以文本方式查看主题

-  金字塔客服中心 - 专业程序化交易软件提供商  (http://weistock.com/bbs/index.asp)
--  金字塔软件问题提交  (http://weistock.com/bbs/list.asp?boardid=2)
----  定义的全局变量只能取值1或0,但DEBUGFILE显示值成了-1,请问什么原因务请回复!  (http://weistock.com/bbs/dispbbs.asp?boardid=2&id=53320)

--  作者:ydian
--  发布时间:2013/6/24 15:36:49
--  定义的全局变量只能取值1或0,但DEBUGFILE显示值成了-1,请问什么原因务请回复!

在后台程式化(固定时间间隔,5秒轮询一次)公式语句中定义了两个变量:

GLOBALVARIABLE:IFPKKD=1;
GLOBALVARIABLE:IFPDKK=1;

并设定,交易指令发生以后,上面对应的变量取值为0。也就是说,上面两个全局变量按道理取值只能是1或0,但是DEBUGFILE输出的日志记录显示这两个变量是-1(实际情况是有时候为1或0,大部情况是-1),请问这是为什么?务请金字塔相关人员有个准确回复!

下面是全部公式语句:

 


//RUNMODE:0;
INPUT:offset(2,1,40,1);
INPUT:initialasset(10000000,1000000,100000000,1000000);
GLOBALVARIABLE:AccountID=\'807697\';  //指定交易账户

ACCOUNTONLINE:=TACCOUNT2(3,\'807697\')>0;
IF ACCOUNTONLINE=0 THEN DEBUGFILE(\'D:\\HLPYIF_OFFLINE.TXT\',\'807697不在线.0f\',0);
IF ACCOUNTONLINE=0 THEN EXIT;  //当帐户不在线时停止执行后面语句

TRADETIME:=(DYNAINFO(207)>091502) AND (DYNAINFO(207)<151458); //限定交易时间内交易
IF TRADETIME<>1 THEN EXIT;

//GLOBALVARIABLE:IFBUYHOLDHY=1;
//GLOBALVARIABLE:IFSELLHOLDHY=1;
GLOBALVARIABLE:IFPKKD=1;
GLOBALVARIABLE:IFPDKK=1;

MULTIPIF:=300;

LOTSIF:=INTPART(initialasset/CALLSTOCK(\'IF00\',vtCLOSE,5,-1)/MULTIPIF/9);

 

//IF (DYNAINFO(207)>=091500 AND DYNAINFO(207)<091600) OR (DYNAINFO(207)>=101500 AND DYNAINFO(207)<101600) OR (DYNAINFO(207)>=111500 AND DYNAINFO(207)<111600) OR (DYNAINFO(207)>=131500 AND DYNAINFO(207)<131600) OR (DYNAINFO(207)>=141500 AND DYNAINFO(207)<141600) THEN EXIT;
//错开换月时间

//IF交易指令
HPPOINTIF:=HHV(CALLSTOCK(\'IF00\',vtHIGH,5,-offset),6);//高点
LPPOINTIF:=LLV(CALLSTOCK(\'IF00\',vtLOW,5,-offset),6);//低点
PrebuyholdIF:=TBUYHOLDINGEX(AccountID,\'IF00\',1);//持有当前连续合约的多仓数
PresellholdIF:=TSELLHOLDINGEX(AccountID,\'IF00\',1); //持有当前连续合约的空仓数
DEBUGFILE(\'D:\\HLPYIFRECORD\\HLPYIF.TXT\',\'IF外HPPOINTIF=%.2f\',HPPOINTIF);
DEBUGFILE(\'D:\\HLPYIFRECORD\\HLPYIF.TXT\',\'IF外LPPOINTIF=%.2f\',LPPOINTIF);
DEBUGFILE(\'D:\\HLPYIFRECORD\\HLPYIF.TXT\',\'IF外IFPKKD=%.0f\',IFPKKD);
DEBUGFILE(\'D:\\HLPYIFRECORD\\HLPYIF.TXT\',\'IF外IFPDKK=%.0f\',IFPDKK);
DEBUGFILE(\'D:\\HLPYIFRECORD\\HLPYIF.TXT\',\'IF外CALLSTOCKIF00VTHIGH=%.2f\',CALLSTOCK(\'IF00\',vtHIGH,5,0));
DEBUGFILE(\'D:\\HLPYIFRECORD\\HLPYIF.TXT\',\'IF外CALLSTOCKIF00VTLOW=%.2f\',CALLSTOCK(\'IF00\',vtLOW,5,0));
DEBUGFILE(\'D:\\HLPYIFRECORD\\HLPYIF.TXT\',\'IF外DYNAINFO(207)%.5f\',DYNAINFO(207));

//IF交易触发条件
HBIF:=CALLSTOCK(\'IF00\',vtHIGH,5,0)>HPPOINTIF;
LBIF:=CALLSTOCK(\'IF00\',vtLOW,5,0)<LPPOINTIF;
//IF开始交易
IF HBIF AND IFPKKD=1  THEN //平空开多
BEGIN
  DEBUGFILE(\'D:\\HLPYIFRECORD\\HLPYIF.TXT\',\'IF内CALLSTOCKIF00VTHIGH=%.2f\',CALLSTOCK(\'IF00\',vtHIGH,5,0));
  DEBUGFILE(\'D:\\HLPYIFRECORD\\HLPYIF.TXT\',\'IF内HPPOINTIF=%.2f\',HPPOINTIF);
  DEBUGFILE(\'D:\\HLPYIFRECORD\\HLPYIF.TXT\',\'IF内LPPOINTIF=%.2f\',LPPOINTIF);
  DEBUGFILE(\'D:\\HLPYIFRECORD\\HLPYIF.TXT\',\'IF内IFPKKD=%.0f\',IFPKKD);
  DEBUGFILE(\'D:\\HLPYIFRECORD\\HLPYIF.TXT\',\'IF内IFPDKK=%.0f\',IFPDKK);
  DEBUGFILE(\'D:\\HLPYIFRECORD\\HLPYIF.TXT\',\'IF内DYNAINFO(207)%.5f\',DYNAINFO(207));
  SENDMAIL(1,\'yangdian@simpleasset.com;ztb2@hotmail.com;anniesun@hotmail.com\',\'联想台式机金字塔公式HLPYIF公式语句定义的IF交易指令预警邮件\',\'预警时间:\'&NUMTOSTR(DYNAINFO(207),0)&\'  品种:IF\'&\'  交易动作:平空开多\'&\'  预警价格:\'&NUMTOSTR(CALLSTOCK(\'IF00\',vtHIGH,5,0),2));
  IFPKKD:=0;//已发指令记录,防固定轮询追单
  IF PresellholdIF>0 THEN
  TSELLSHORT(1,PresellholdIF,MKT,0,0,AccountID,\'IF00\');  //平空,平空手数取此前持有的空单手数
  IF PrebuyholdIF=0 THEN
  TBUY(1,LOTSIF,MKT,0,0,AccountID,\'IF00\');//开多,开多手数根据最新价格计算
END
  
IF LBIF AND IFPDKK=1 THEN //平多开空,第二个条件防固定轮询追单
BEGIN
  DEBUGFILE(\'D:\\HLPYIFRECORD\\HLPYIF.TXT\',\'IF内CALLSTOCKIF00VTLOW=%.2f\',CALLSTOCK(\'IF00\',vtLOW,5,0));
  DEBUGFILE(\'D:\\HLPYIFRECORD\\HLPYIF.TXT\',\'IF内HPPOINTIF=%.2f\',HPPOINTIF);
  DEBUGFILE(\'D:\\HLPYIFRECORD\\HLPYIF.TXT\',\'IF内LPPOINTIF=%.2f\',LPPOINTIF);
  DEBUGFILE(\'D:\\HLPYIFRECORD\\HLPYIF.TXT\',\'IF内IFPKKD=%.0f\',IFPKKD);
  DEBUGFILE(\'D:\\HLPYIFRECORD\\HLPYIF.TXT\',\'IF内IFPDKK=%.0f\',IFPDKK);
  DEBUGFILE(\'D:\\HLPYIFRECORD\\HLPYIF.TXT\',\'IF内DYNAINFO(207)%.5f\',DYNAINFO(207));
  SENDMAIL(1,\'yangdian@simpleasset.com;ztb2@hotmail.com;anniesun@hotmail.com\',\'联想台式机金字塔公式HLPYIF公式语句定义的IF交易指令预警邮件\',\'预警时间:\'&NUMTOSTR(DYNAINFO(207),0)&\'  品种:IF\'&\'  交易动作:平多开空\'&\'  预警价格:\'&NUMTOSTR(CALLSTOCK(\'IF00\',vtLOW,5,0),2));
  IFPDKK:=0;
  IF PrebuyholdIF>0 THEN
  TSELL(1,PrebuyholdIF,MKT,0,0,AccountID,\'IF00\');   //平多,平多手数取此前持有的多单手数
  IF PresellholdIF=0 THEN
  TBUYSHORT(1,LOTSIF,MKT,0,0,AccountID,\'IF00\');     //开空,开空手数根据最新净资产和价格计算
END
/////////////////////////////////IF公式段结束/////////////////////////////////////////////////


--  作者:ydian
--  发布时间:2013/6/24 15:38:10
--  
补充:使用的是序列模式
--  作者:jinzhe
--  发布时间:2013/6/24 16:05:17
--  
明日开盘后测试
--  作者:RogarZ
--  发布时间:2013/6/24 16:13:39
--  

后台怎么用 GLOBALVARIABLE?这个函数是图表使用的。

后台使用EXTGBDATASET    EXTGBDATA


--  作者:ydian
--  发布时间:2013/6/24 16:37:02
--  
以下是引用RogarZ在2013/6/24 16:13:39的发言:

后台怎么用 GLOBALVARIABLE?这个函数是图表使用的。

后台使用EXTGBDATASET    EXTGBDATA

EXTGBDATASET  EXTGBDATA全局变量将读变量值存在硬盘,类似于注册表变量,关机之后变量值仍然存在,如果不同公式用同一变量名,将发生紊乱。但没有在你们的任何资料上看到过后台只能用EXTGBDATASET    EXTGBDATA,并且参加过数次你们在上海的培训,专门与培训老师作过交流,专门请教过培训老师GLOBALVARIBLE的用法,专门请教过GLOBALVARIBLE用于后台程序化交易的问题。如果真的后台不能用GLOBALVARIBLE,请金字塔方面给出一个权威的答复或说明,并建议在手册和软件自带的函数说明里明确。


--  作者:ydian
--  发布时间:2013/6/24 16:43:16
--  
以下是引用jinzhe在2013/6/24 16:05:17的发言:
明日开盘后测试

测试时请注意:公式开始部分有帐户不在线时停止执行后面语句的EXIT语句,你们测试时别忘了把这个去掉或修改成其他你们使用的资金帐户,否则不登录那个帐户的话永远不会执行后面的语句


--  作者:RogarZ
--  发布时间:2013/6/24 17:03:22
--  

GLOBALVARIBLE 的返回值与EXTGBDATA的返回值是一样的  它的设计初衷就是让图表也有类似EXTGBDATA效果的函数。

你上海的培训谁给你讲的?


--  作者:ydian
--  发布时间:2013/6/25 8:20:40
--  
以下是引用RogarZ在2013/6/24 17:03:22的发言:

GLOBALVARIBLE 的返回值与EXTGBDATA的返回值是一样的  它的设计初衷就是让图表也有类似EXTGBDATA效果的函数。

你上海的培训谁给你讲的?

左冬祥老师,很负责的一位老师。针对我的问题,你的建议是把GLOBLVARIBLE换为EXTGBDATA对吗?我觉得如果GLOBALVARIBLE若不能用于后台,还是应该在手册或客户端函数说明里明确说明啊。


--  作者:fly
--  发布时间:2013/6/25 15:17:17
--  

请加上以下语句,使其运行在序列模式下.

RUNMODE:1;

跟踪出来,IFPKKD和IFPDKK两个全局变量的变化,也都正常.   您本地再试试

2013-06-25 14:48:38.484    IF外IFPKKD=1
2013-06-25 14:48:38.484    IF外IFPDKK=1
2013-06-25 14:48:38.484    IF平空开多IFPKKD=1
2013-06-25 14:48:38.484    IF平空开多IFPDKK=1
2013-06-25 14:48:39.437    IF外IFPKKD=0
2013-06-25 14:48:39.437    IF外IFPDKK=1
2013-06-25 14:48:40.437    IF外IFPKKD=0
2013-06-25 14:48:40.437    IF外IFPDKK=1
2013-06-25 14:48:41.437    IF外IFPKKD=0
2013-06-25 14:48:41.437    IF外IFPDKK=1
2013-06-25 14:48:42.437    IF外IFPKKD=0
2013-06-25 14:48:42.437    IF外IFPDKK=1


--  作者:ydian
--  发布时间:2013/6/25 20:45:57
--  
本来在公式首行有RONMODE:0,后来考虑到在公式编辑界面上运行模式一栏直接点选序列模式,所以就把RONMODE注释掉了。我明天再测试下。