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

麻烦看看下面的组件为什么没有正确执行? [赢顺期货]

  • 咨询内容:

    组件的目的:挂价开、平仓,30秒不能成交撤单对价追单。

     

    VAR Price,KPN,M;
    VAR BKID,SKID,BPID,SPID;//定义BKID,SKID,BPID,SPID
    VAR LastWithDrawFinsh; 

    VOID MAIN() //
    {

          KPN=1;//定义开平仓手数为1手
          M=0;//
          Price=Price(F_DealCode());//

     IF (F_Sig()==BK) //如果信号是买开信号
     BKID=T_Deal(F_DealCode(),0,0,KPN,Offers( F_DealCode(),"bid1")+0*MinPrice(F_DealCode()));//
     IF (F_Sig()==SK) //如果信号是卖开信号
     SKID=T_Deal(F_DealCode(),1,0,KPN,Offers( F_DealCode(),"ask1")-0*MinPrice(F_DealCode()));//
     IF (F_Sig()==BP) //如果信号是买平信号
     {
      IF (F_SellPosition()>0 && F_SellPosition()<KPN)//如果当前模型空头持仓大于0小于KPN
      BPID=T_Deal(F_DealCode(),0,1,F_SellPosition(),Offers( F_DealCode(),"bid1")+0*MinPrice(F_DealCode()));//
      //
      ELSE IF (F_SellPosition()>=KPN)//
      BPID=T_Deal(F_DealCode(),0,1,KPN,Offers( F_DealCode(),"bid1")+0*MinPrice(F_DealCode()));//发出KPN手平空指令
      ELSE IF (F_SellPosition()==0)//
      MessageOut ("当前没有空头持仓");
     }
     IF (F_Sig()==SP) //如果信号是卖平信号
     {
      IF (F_BuyPosition()>0 && F_BuyPosition()<KPN)//如果当前模型多头持仓小于KPN大于0
      SPID=T_Deal(F_DealCode(),1,1,F_BuyPosition(),Offers( F_DealCode(),"ask1")-0*MinPrice(F_DealCode()));//
      //
      ELSE IF (F_BuyPosition()>=KPN)//如果当前模型多头持仓大于等于KPN手
      SPID=T_Deal(F_DealCode(),1,1,KPN,Offers( F_DealCode(),"ask1")-0*MinPrice(F_DealCode()));//
      ELSE IF (F_BuyPosition()==0)//如果当前持仓为0
      MessageOut ("当前没有多头持仓");
     }
    IF (F_Sig()==BPK) //如果信号是买平开信号
     {
      IF (F_SellPosition()>0 && F_SellPosition()<KPN)//如果当前模型空头持仓大于0小于KPN
      {
       T_Deal(F_DealCode(),0,1,F_SellPosition(),Offers( F_DealCode(),"bid1")+0*MinPrice(F_DealCode()));//以当前模型空头持仓手数发出买平委托
       
       T_Deal(F_DealCode(),0,0,KPN,Offers( F_DealCode(),"bid1")+0*MinPrice(F_DealCode()));//以KPN手发出买开委托
      }
      ELSE IF (F_SellPosition()>=KPN)//如果当前空头持仓大于等于KPN手
      {
       T_Deal(F_DealCode(),0,1,KPN,Offers( F_DealCode(),"bid1")+0*MinPrice(F_DealCode()));//以KPN手发出买平委托
       
       T_Deal(F_DealCode(),0,0,KPN,Offers( F_DealCode(),"bid1")+0*MinPrice(F_DealCode()));//以KPN手发出买开委托
      }
      ELSE IF (F_SellPosition()==0)//空头持仓为0
      {
       MessageOut ("当前没有空头持仓");
       T_Deal(F_DealCode(),0,0,KPN,Offers( F_DealCode(),"bid1")+0*MinPrice(F_DealCode()));//以KPN手发出买开委托
      }
     }
    IF (F_Sig()==SPK) //如果信号是卖平开信号
     {
      IF (F_BuyPosition()>0 && F_BuyPosition()<KPN)//如果当前模型多头持仓大于0小于KPN
      {
       T_Deal(F_DealCode(),1,1,F_BuyPosition(),Offers( F_DealCode(),"ask1")-0*MinPrice(F_DealCode()));//以当前模型多头持仓手数发出卖平委托
       
       T_Deal(F_DealCode(),1,0,KPN,Offers( F_DealCode(),"ask1")-0*MinPrice(F_DealCode()));
      }
      ELSE IF (F_BuyPosition()>=KPN)
      {
       T_Deal(F_DealCode(),1,1,KPN,Offers( F_DealCode(),"ask1")-0*MinPrice(F_DealCode()));
       
       T_Deal(F_DealCode(),1,0,KPN,Offers( F_DealCode(),"ask1")-0*MinPrice(F_DealCode()));
      }
      ELSE IF (F_BuyPosition()==0)//多头持仓为0
      {
       MessageOut ("当前没有多头持仓");
       T_Deal(F_DealCode(),1,0,KPN,Offers( F_DealCode(),"ask1")-0*MinPrice(F_DealCode()));
      }
     }
          //下面是30秒没有成交,撤单。
     //IF(CurrentTime()-LastOrderTime()<2 && LastOrderTime()!=0) 
     // RETURN; //控制组件的执行频率 两秒执行一次
     //icount=F_SigCount();
     LastWithDrawFinsh=ReadGlobal("LASTWITHDRAW");
     IF(T_IsNoOrder()!=1 ) //有挂单的情况
     {
      //查询挂单然后进行撤单
      //need added code
      IF(CurrentTime()-LastOrderTime()>30 && LastWithDrawFinsh==1) //如果30秒有委托未成交,全撤,下次进入会重新下委托
      {
       T_DeleteOrderAll();//撤掉所有未成交委托。
       LastWithDrawFinsh=0;
      }
      WriteGlobal("LASTWITHDRAW", LastWithDrawFinsh);
      RETURN;
     }
     LastWithDrawFinsh=1; 
     F_FreshSig(); //刷新现有的信号
     

          IF (F_Sig()==BK) //如果信号是买开信号(以对价+M倍最少波动),保证成交
     BKID=T_Deal(F_DealCode(),0,0,KPN,Offers( F_DealCode(),"ask1")+M*MinPrice(F_DealCode()));//以最新价+0个最小表动价位发出KPN手的买开委托
     IF (F_Sig()==SK) //如果信号是卖开信号(以对价-M倍最少波动),保证成交
     SKID=T_Deal(F_DealCode(),1,0,KPN,Offers( F_DealCode(),"bid1")-M*MinPrice(F_DealCode()));//以最新价-0个最小表动价位发出KPN手的卖开委托
     IF (F_Sig()==BP) //如果信号是买平信号
     {
      IF (F_SellPosition()>0 && F_SellPosition()<KPN)
      BPID=T_Deal(F_DealCode(),0,1,F_SellPosition(),Offers( F_DealCode(),"ask1")+M*MinPrice(F_DealCode()));

      ELSE IF (F_SellPosition()>=KPN)//如果当前空头持仓大于KPN手
      BPID=T_Deal(F_DealCode(),0,1,KPN,Offers( F_DealCode(),"ask1")+M*MinPrice(F_DealCode()));
      ELSE IF (F_SellPosition()==0)//空头持仓为0
      MessageOut ("当前没有空头持仓");
     }
     IF (F_Sig()==SP) 
     {
      IF (F_BuyPosition()>0 && F_BuyPosition()<KPN)
      SPID=T_Deal(F_DealCode(),1,1,F_BuyPosition(),Offers( F_DealCode(),"bid1")-M*MinPrice(F_DealCode()));
      ELSE IF (F_BuyPosition()>=KPN)
      SPID=T_Deal(F_DealCode(),1,1,KPN,Offers( F_DealCode(),"bid1")-M*MinPrice(F_DealCode()));
      ELSE IF (F_BuyPosition()==0)//如果当前持仓为0
      MessageOut ("当前没有多头持仓");
          }
    IF (F_Sig()==BPK) //如果信号是买平开信号
     {
      IF (F_SellPosition()>0 && F_SellPosition()<KPN)
      {
       T_Deal(F_DealCode(),0,1,F_SellPosition(),Offers( F_DealCode(),"ask1")+M*MinPrice(F_DealCode()));
       T_Deal(F_DealCode(),0,0,KPN,Offers( F_DealCode(),"ask1")+M*MinPrice(F_DealCode()));//
      }
      ELSE IF (F_SellPosition()>=KPN)//如果当前空头持仓大于等于KPN手
      {
       T_Deal(F_DealCode(),0,1,KPN,Offers( F_DealCode(),"ask1")+M*MinPrice(F_DealCode()));//
       T_Deal(F_DealCode(),0,0,KPN,Offers( F_DealCode(),"ask1")+M*MinPrice(F_DealCode()));//
      }
      ELSE IF (F_SellPosition()==0)//空头持仓为0
      {
       MessageOut ("当前没有空头持仓");
       T_Deal(F_DealCode(),0,0,KPN,Offers( F_DealCode(),"ask1")+M*MinPrice(F_DealCode()));//以KPN手发出买开委托
      }
     }
    IF (F_Sig()==SPK) //
     {
      IF (F_BuyPosition()>0 && F_BuyPosition()<KPN)//
      {
       T_Deal(F_DealCode(),1,1,F_BuyPosition(),Offers( F_DealCode(),"bid1")-M*MinPrice(F_DealCode()));//
       T_Deal(F_DealCode(),1,0,KPN,Offers( F_DealCode(),"bid1")-M*MinPrice(F_DealCode()));//
      }
      ELSE IF (F_BuyPosition()>=KPN)//
      {
       T_Deal(F_DealCode(),1,1,KPN,Offers( F_DealCode(),"bid1")-M*MinPrice(F_DealCode()));//
       T_Deal(F_DealCode(),1,0,KPN,Offers( F_DealCode(),"bid1")-M*MinPrice(F_DealCode()));//
      }
      ELSE IF (F_BuyPosition()==0)//
      {
       MessageOut ("当前没有多头持仓");
       T_Deal(F_DealCode(),1,0,KPN,Offers( F_DealCode(),"bid1")-M*MinPrice(F_DealCode()));//
      }
     }
     WriteGlobal("LASTWITHDRAW", LastWithDrawFinsh);
    }
     

     

  • 赢顺技术人员: 老师们吃饭去了?

     

  • 赢顺客服:

    组件不发委托的原因有很多,不光是编写的问题,向您咨询下,您加载的是什么合约,所有的信号都没有委托?还是第一根信号没有委托?是否进行了仓位初始化的设定?

     

  • 网友回复: 用了这个下单组件,下午出现开仓信号后不断帮我开仓,一秒一次开仓信号,直到没有资金。。。。。。。。。我在下单参数里面选择了“等K线走完下单“,应该对此没有什么影响啊 原来同样的模型,用软件自身的下单设置,没有使用过滤也是用得好好的啊~

     

  • 网友回复: 是组件问题还是模型问题呢?

 

如果以上指标公式不适用于您常用的行情软件

或者您想改编成选股公式,以便快速选出某种形态个股的话,

可以联系我们相关技术人员 QQ: 262069696  点击在线交流进行 有偿 改编!

 


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

相关文章

    没有相关内容