您现在的位置:程序化交易>> 期货公式>> 金字塔等>> 金字塔知识>>正文内容

定义的全局变量只能取值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公式段结束/////////////////////////////////////////////////

     

  • 金字塔客服: 补充:使用的是序列模式

     

  • 用户回复: 明日开盘后测试

     

  • 网友回复:

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

    后台使用EXTGBDATASET    EXTGBDATA

     

  • 网友回复: 以下是引用RogarZ在2013/6/24 16:13:39的发言:

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

    后台使用EXTGBDATASET    EXTGBDATA

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

 

有思路,想编写各种指标公式,程序化交易模型,选股公式,预警公式的朋友

可联系技术人员 QQ: 1145508240  有需要帮忙请点击这里留言!!!进行 有偿 编写!不贵!点击查看价格!


【字体: 】【打印文章】【查看评论

相关文章

    没有相关内容