您现在的位置:程序化交易>> 期货公式>> 文华财经>> 文华财经知识>>正文内容

[求助]有几个遇到的问题,请老师帮忙解答 [赢顺期货]

  • 咨询内容: 第一个问题:是不是想在外盘测试交易组件是否正确不只是把国内的下单信号改成国外的下单信号这么简单?例如把BK换成BUYLONG这样? 第二个问题:写了一个交易组件,其中有个功能不能实现,下面会把交易组件贴出来,不能实现的功能是在CA1时候,满足C>A1并且持有空仓或者C0) { T_Deal(F_DealCode(),0,1,SCC,0);//以市价发出现有空头持仓数的买平委托 T_Deal(F_DealCode(),0,0,KPN,0);//以市价发出规定手数(KPN)的买开委托 } IF(SCC==0) { T_Deal(F_DealCode(),0,0,KPN,0);//以市价发出规定手数(KPN)的买开委托 } M=2; WriteGlobal("M",M); } ELSE IF(F_Sig()==SPK) { IF(BCC>0) { T_Deal(F_DealCode(),1,1,BCC,0);//以市价发出现有多头持仓数的卖平委托 T_Deal(F_DealCode(),1,0,KPN,0);//以市价发出规定手数(KPN)的卖开委托 } IF(BCC==0) { T_Deal(F_DealCode(),1,0,KPN,0);//以市价发出规定手数(KPN)的卖开委托 } M=2; WriteGlobal("M",M); } } ELSE IF(F_FreshSig()==1&&F_SigValid()==0)//信号消失 { FT_Deal(); } //----------------------------------- IF(M==2) { KT_Deal(); } //------------------------------------ IF(SM==5&&SS==45)//如果当前时间到了当根K线的14分45秒时 { M=1; WriteGlobal("M",M); } //------------------------------------- IF(M=1) { IF(F_Sig()==BPK&&BCC==0)//如果信号为买平开且未持有买单 { T_Deal(F_DealCode(),0,1,SCC,0);//以市价发出现有空头持仓数的买平委托 T_Deal(F_DealCode(),0,0,KPN,0);//以市价发出规定手数(KPN)的买开委托 } ELSE IF(F_Sig()==SPK&&SCC==0)//如果信号为卖平开且未持有卖单 { T_Deal(F_DealCode(),1,1,BCC,0);//以市价发出现有多头持仓数的卖平委托 T_Deal(F_DealCode(),1,0,KPN,0);//以市价发出规定手数(KPN)的卖开委托 } } WriteGlobal("M",M); } VOID KT_Deal()//信号出现处理函数 { IF((C0))//如果此时C小于B6且持有多单 { T_Deal(F_DealCode(),1,1,BCC,0);//以市价发出现有多头持仓数的卖平委托 T_Deal(F_DealCode(),1,0,KPN,0);//以市价发出规定手数(KPN)的卖开委托 } ELSE IF((C>A1)&&(SCC>0))//如果此时C大于A1且持有空单 { T_Deal(F_DealCode(),0,1,SCC,0);//以市价发出现有空头持仓数的买平委托 T_Deal(F_DealCode(),0,0,KPN,0);//以市价发出规定手数(KPN)的买开委托 } M=2; WriteGlobal("M",M); } VOID FT_Deal()//信号消失处理函数 { IF (F_Sig()==BPK)//如果信号为买平开 { T_Deal(F_DealCode(),1,1,BCC,0);//以市价发出现有多头持仓数的卖平委托 T_Deal(F_DealCode(),1,0,KPN,0);//以市价发出规定手数(KPN)的卖开委托 } IF(F_Sig()==SPK)//如果信号为卖平开 { T_Deal(F_DealCode(),0,1,SCC,0);//以市价发出现有空头持仓数的买平委托 T_Deal(F_DealCode(),0,0,KPN,0);//以市价发出规定手数(KPN)的买开委托 } } VAR SEC()//返回当根k线秒时间自定义函数 { VAR T; VAR N1; T=CurrentTime(); N1=T-(T/60)*60; RETURN(N1); } VAR SFF()//返回当根k线分钟时间自定义函数 { VAR FF; VAR FF15; VAR T; T=CurrentTime(); FF=T/60-(T/60/60)*60; FF15=FF-(FF/5)*5;//表示加载在5分钟周期上 RETURN(FF15); }

     

  • 赢顺技术人员: 您发帖模式有误导致混乱,请重新以正常设计模式发送。谢谢合作。

     

  • 赢顺客服:

    VAR A1;
    VAR A2;
    VAR B6;
    VAR H;
    VAR L;
    VAR BCC;//取当前持有的买单数
    VAR SCC;//取当前持有的卖单数
    VAR dealcode;
    VAR KPN;
    VAR C;
    VAR M;
    VAR SS;//取当前K线的秒时间
    VAR SM;//取当前K线的分时间
    VOID MAIN()//主函数。
    {
     SS=SEC();
     SM=SFF();
     H=F_High(0);//定义H为最后一根K线的最高价
     L=F_Low(0);//定义L为最后一根K线的最低价
     A1=H-(H-L)*0.25;
     A2=H-(H-L)*0.26;
     B6=L+(H-L)*0.25;
     BCC=F_BuyPosition();//定义BCC为当前模型的多头持仓
     SCC=F_SellPosition();//定义SCC为当前模型的空头持仓
     dealcode=F_DealCode();//定义dealcode为模型加载的合约名称
     KPN=2;//定义默认开仓手数为2
     C=F_Close(0);//定义C为当前模型加载最后一根K线收盘价
     M=ReadGlobal("M");//M的意义:2 进入止损函数KT_DEAL,1 进入最后15秒
     
     IF(F_FreshSig()==1)//取得新信号
      {
        IF(F_Sig()==BPK)
         {
           IF(SCC>0)
             {
                T_Deal(F_DealCode(),0,1,SCC,0);//以市价发出现有空头持仓数的买平委托
                T_Deal(F_DealCode(),0,0,KPN,0);//以市价发出规定手数(KPN)的买开委托
             }
           IF(SCC==0)
             {
                T_Deal(F_DealCode(),0,0,KPN,0);//以市价发出规定手数(KPN)的买开委托
             }
        M=2;
      WriteGlobal("M",M);     
          }


        ELSE IF(F_Sig()==SPK)
          {
            IF(BCC>0)
             {
                T_Deal(F_DealCode(),1,1,BCC,0);//以市价发出现有多头持仓数的卖平委托
                T_Deal(F_DealCode(),1,0,KPN,0);//以市价发出规定手数(KPN)的卖开委托
             }
            IF(BCC==0)
             {
                T_Deal(F_DealCode(),1,0,KPN,0);//以市价发出规定手数(KPN)的卖开委托
             }
        M=2;
      WriteGlobal("M",M);
           } 
       }

     ELSE IF(F_FreshSig()==1&&F_SigValid()==0)//信号消失
        {
           FT_Deal();
        }
    //-----------------------------------
     IF(M==2)
      {
       KT_Deal();
      }
    //------------------------------------ 
     IF(SM==5&&SS==45)//如果当前时间到了当根K线的14分45秒时
     {
      M=1;
      WriteGlobal("M",M);
     }
    //-------------------------------------
    IF(M=1)
     {
      IF(F_Sig()==BPK&&BCC==0)//如果信号为买平开且未持有买单
      {
       T_Deal(F_DealCode(),0,1,SCC,0);//以市价发出现有空头持仓数的买平委托
       T_Deal(F_DealCode(),0,0,KPN,0);//以市价发出规定手数(KPN)的买开委托
      }
      ELSE IF(F_Sig()==SPK&&SCC==0)//如果信号为卖平开且未持有卖单
      {
       T_Deal(F_DealCode(),1,1,BCC,0);//以市价发出现有多头持仓数的卖平委托
       T_Deal(F_DealCode(),1,0,KPN,0);//以市价发出规定手数(KPN)的卖开委托
      }
     }
     WriteGlobal("M",M);
    }
    VOID KT_Deal()//信号出现处理函数
     {
       IF((C<B6)&&(BCC>0))//如果此时C小于B6且持有多单
        {
         T_Deal(F_DealCode(),1,1,BCC,0);//以市价发出现有多头持仓数的卖平委托
         T_Deal(F_DealCode(),1,0,KPN,0);//以市价发出规定手数(KPN)的卖开委托
        }
       ELSE IF((C>A1)&&(SCC>0))//如果此时C大于A1且持有空单
        {
         T_Deal(F_DealCode(),0,1,SCC,0);//以市价发出现有空头持仓数的买平委托
         T_Deal(F_DealCode(),0,0,KPN,0);//以市价发出规定手数(KPN)的买开委托
        }

       M=2;
      WriteGlobal("M",M);

     }
    VOID FT_Deal()//信号消失处理函数
     {
       IF (F_Sig()==BPK)//如果信号为买平开
         {
           T_Deal(F_DealCode(),1,1,BCC,0);//以市价发出现有多头持仓数的卖平委托
           T_Deal(F_DealCode(),1,0,KPN,0);//以市价发出规定手数(KPN)的卖开委托
         }
       IF(F_Sig()==SPK)//如果信号为卖平开
         {
           T_Deal(F_DealCode(),0,1,SCC,0);//以市价发出现有空头持仓数的买平委托
           T_Deal(F_DealCode(),0,0,KPN,0);//以市价发出规定手数(KPN)的买开委托
         }
     }
    VAR SEC()//返回当根k线秒时间自定义函数
    {
     VAR T;
     VAR N1;
     T=CurrentTime();
     N1=T-(T/60)*60;
     RETURN(N1);
    }
    VAR SFF()//返回当根k线分钟时间自定义函数
    {
     VAR FF;
     VAR FF15;
     VAR T;
     T=CurrentTime();
     FF=T/60-(T/60/60)*60;
     FF15=FF-(FF/5)*5;//表示加载在5分钟周期上
     RETURN(FF15);
    }

     

  • 网友回复:

    这样就正常了,刚才可能点到什么了

     

  • 网友回复:

    第一个问题:是不是想在外盘测试交易组件是否正确不只是把国内的下单信号改成国外的下单信号这么简单?例如把BK换成BUYLONG这样?

    第二个问题:写了一个交易组件,其中有个功能不能实现,下面会把交易组件贴出来,不能实现的功能是在C>A1时候,满足C>A1并且持有空仓或者C<B6且持有多仓才下单,而是只要满足C>A1或者C<B6就不停下单一直到没有钱申报失败。当然失败了之后还会继续下单。

    第三个问题:时间控制没有效果,是因为下单之后的持仓总是和信号方向相同所以没效果还是什么原因?我怎么能测试出时间控制这个部分是否生效?

    第四格问题:如果我春节期间想测试我的下单组件,请问用什么方式?


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

相关文章

    没有相关内容