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

下单组件 开多,自动减仓后,不停的循环平仓0手,哪里有问题呢 [文华财经]

  • 咨询内容:

    //1、当策略发BK信号,买多3手;如果实时涨3点,止盈平多单2手;如果实时跌5点,全部止损平仓。
    //2、当策略发出SP信号,全部平仓。
    //3、当策略发SK信号,买空3手;如果实时跌3点,止盈平空单2手;如果实时涨5点,全部止损平仓。
    //4、当策略发出BP信号,全部平仓。
    //5、如果委托20秒不成交,全部撤单重新委托。
    //当信号为BPK或SPK时可能不会被执行

    VAR LastWithDrawFinsh;
    VAR B,S,F;
    VAR K,Y,N;

    VOID MAIN()//主函数
    {  K=50;//止损参数(*0.2)
       Y=15;//止盈参数(*0.2)
       N=5;//开仓手数

       LastWithDrawFinsh=ReadGlobal("LASTWITHDRAW");
        IF(T_IsNoOrder()!=1 )   //有挂单的情况
        {
            IF(CurrentTime()-LastOrderTime()>10 && LastWithDrawFinsh==1)//如果10秒有委托未成交,全撤,下次进入会重新下委托
         {
                T_DeleteOrderAll();//撤掉所有未成交委托。
                LastWithDrawFinsh=0;   
          }
            WriteGlobal("LASTWITHDRAW", LastWithDrawFinsh);
            RETURN;    
          }
                  LastWithDrawFinsh=1;
       F=F_FreshSig();  //取一个新信号
      IF (T_BuyPosition(F_DealCode())>0)//如果多头持仓大于0
        {
           IF(F==0) //如果没有信号
        {
           B=ReadGlobal("BKPRICE");//读取注册表中上一次记录的开多仓价格。   
          IF(Price(F_DealCode())>=T_BuyAvgPrice(F_DealCode())+Y*MinPrice(F_DealCode()) )//如果盈利3个点()
         {
            T_ReduceBuyOpiTo(F_DealCode(),Price(F_DealCode()),3);//减仓至3手
            }
            IF(Price(F_DealCode())<=B-K*MinPrice(F_DealCode()))//如果亏5点
            {
            T_Deal(F_DealCode(),1,1,F_BuyPosition(),0);//市价全平多
            }
          }
           ELSE IF(F==1) //如果有信号
         {
         IF(F_Sig()==SP&& F_SigValid()==1)//当前信号为SP 
            {       
            T_Deal(F_DealCode(),1,1,F_BuyPosition(),0); //全平
            }
          }
        RETURN;
        }

     

        IF (T_SellPosition(F_DealCode())>0)  //如果空头持仓大于0
        {
          IF(F==0)
         {
        S=ReadGlobal("SKPRICE");//读取注册表中上一次记录的开空仓价格。   
            IF(Price(F_DealCode())<=T_SellAvgPrice(F_DealCode())-Y*MinPrice(F_DealCode()) )
            {
            T_ReduceSellOpiTo(F_DealCode(),Price(F_DealCode()),3);
            }
            IF(Price(F_DealCode())>=S+K*MinPrice(F_DealCode()))
            {
                T_Deal(F_DealCode(),0,1,F_SellPosition(),0);
              }
            }
            ELSE IF(F==1)
       {
           IF(F_Sig()==BP&& F_SigValid()==1)//当前信号为BP信号。 
          {
               T_Deal(F_DealCode(),0,1,F_SellPosition(),0);
            }
         }
      RETURN;
      }
       IF (T_BuyPosition(F_DealCode())==0 && T_SellPosition(F_DealCode())==0)//如果空仓
       {
          IF(F==1)
           {
            IF(F_Sig()==BK&& F_SigValid()==1)//当前信号为开多仓信号。 
            {        
            T_Deal(F_DealCode(),0,0,N,Price(F_DealCode())+MinPrice(F_DealCode()));//开多N手,价格+1
            B=F_SigPrice();
            WriteGlobal("BKPRICE",B);
            }

            IF(F_Sig()==SK&& F_SigValid()==1)//当前信号为开空仓信号。 
            {        
            T_Deal(F_DealCode(),1,0,N,Price(F_DealCode())-MinPrice(F_DealCode()));
            S=F_SigPrice();
            WriteGlobal("SKPRICE",S);
            }
           }
        }
    }

     

  • 文华技术人员:

    T_ReduceBuyOpiTo(F_DealCode(),Price(F_DealCode()),3);//减仓至3手

    会不会是上面这句有问题,因为自动减仓至3手后,程序就不停的发出减仓0手的指令。

     

  • 文华客服:

    因为您的手数已经是3手了,没有用别的条件限制,所以软件在运行REDUCE时会发出委托0手的指令

     

  • 网友回复:

    在这个组件里,

    "LASTWITHDRAW"是一个什么参数?

    "BKPRICE"是注册表里的数值吗?在函数表里怎么没有这样的参数?还有哪些类似这种类型的参数呢?

     

  • 网友回复: 工作时间咨询相关同事后回复您

 

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

可联系技术人员 QQ: 262069696  点击在线交流进行 有偿 编写!不贵!点击查看价格!


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

相关文章

    没有相关内容