您现在的位置:程序化交易>> 期货公式>> 交易开拓者(TB)>> 开拓者知识>>正文内容

a函数为什么不发单,急.. [开拓者 TB]

  • 咨询内容: 本帖最后由 xiaosong 于 2013-7-24 08:11 编辑

    Begin   //if(BarStatus==2 && Time==0.090000 && CurrentTime<0.090000) Return; // 集合竞价过滤

    If (barstatus==0 || GetGlobalVar(1)==InvalidNumeric)         
         {
           If(A_BuyPosition==0)
            {      
             setglobalvar(1,0);
            } else If(A_BuyPosition>0)               
                {
                   SetGlobalVar(1,1);
                }
            }
         else if(GetGlobalVar(1)!=InvalidNumeric)
                  {
                    SetGlobalVar(1,GetGlobalVar(1));
                  }

    If (barstatus==0 || GetGlobalVar(2)==InvalidNumeric)
         {
           If(A_SellPosition==0)
             {
               SetGlobalVar(2,0);
                           
              } else If(A_SellPosition>0)
                   {
                     SetGlobalVar(2,1);
                   }  
           } else if(GetGlobalVar(2)!=InvalidNumeric)
                   {
                     SetGlobalVar(2,GetGlobalVar(2));            
                        }

    If (barstatus==0 || GetGlobalVar(0)==InvalidNumeric)
        {
           if(A_TotalPosition()==0)
             {
              SetGlobalVar(0,0);
             }else if(A_TotalPosition()!=0)
              {
               SetGlobalVar(0,1);
              }
        } else if(GetGlobalVar(0)!=InvalidNumeric)
             {
                SetGlobalVar(0,GetGlobalVar(0));
             }

    conEntryReady=CurrentTime*100 >=tradBegin  and CurrentTime*100<tradEnd and Q_LowerLimit>20*MinMove*PriceScale AND Q_UpperLimit-C>20*MinMove*PriceScale;//不靠近涨跌停


    if(A_GetOpenOrderCount==0 and A_TotalPosition()==0 AND  A_AccountID!="" and conEntryReady AND GetGlobalVar(0)==0 AND GetGlobalVar(1)==0 AND GetGlobalVar(2)==0) //返回当前公式应用的帐户下当前商品的总持仓 (无持仓)
    {
       IF(a>b) //开多条件
       {
          A_SendOrder(Enum_Buy,Enum_Entry,Lots,Q_AskPrice()+N*MinMove*PriceScale);//发送委托单 开多仓一手
          SetGlobalVar(0,1);
          SetGlobalVar(1,1);
          SetGlobalVar(2,0);
          
         }
       IF(a<b) // 开空条件
          {
             A_SendOrder(Enum_Sell,Enum_Entry,Lots,Q_BidPrice()-N*MinMove*PriceScale); //发送委托单 开空仓一手
          SetGlobalVar(0,1);
             SetGlobalVar(1,1);
             SetGlobalVar(2,0);
           }
       }


    急啊.......................
    ...........................................
    ..................

     

  • TB技术人员: 管量员在吗?版主在吗????????????????????????????

    我是你们付费用户啊.

     

  • TB客服:
    xiaosong 发表于 2013-7-24 08:08
    管量员在吗?版主在吗????????????????????????????

    我是你们付费用户啊. ...


    抱歉啊。公司的论坛维护人员是没有上夜班的。所以没法在夜里及时的回复您的问题,请谅解。

    你的公式,前面一段的回局变量的赋值是干什么用的呢??感觉逻辑上有不太合理的地方呢。
    其一,a_xxx类函数只在最后K线有效,所以你条件里的barstatus==0的情况下是绝对不能取到a_buyposition==0这样的判断。于是你只能从 GetGlobalVar(1)==InvalidNumeric这一条件进入判断。既然如此 ,那barstatus==0放在这里也是没有必要的。
    其二,看到这些全局变量仅是简单地判断持仓而进行赋值的。感觉没有必要啊。在后面的交易中,直接判断持仓量来决定是否下单更好,不必要增加这三个全局变量的。

    交易部分。
    1,建议不要使用上述三个全局变量的判断。直接判断持仓量来决定开平动作就好。
    2,建议将所有用得到的判断变量都输出日志,查看一下到底是哪些交易不符合你的要求,从而没有发出指令的。
    3,想要判断多空均无持仓,直接使用a_buyposition==0,a_sellposition==0即可,不必要判断a_totalposition的.
    4,因为a_xxxx函数,只在最后K线有效,建议在使用中加上barstatus==2的判断能提高效率。

     

  • 网友回复: 谢谢老大. 谢谢回贴,这个软件是不错,是能解决小资金的执行力的问题. 但是编程的确是有难度,这主限制它的推广

    你们不是说:当一个Tick来时触发条件,这时发单,如果因延时成交回单没有回来时,再来一个Tick触发条件,再发一次单.
    所以,我设想三个全面变量. 0 为开与平. 1为持多仓与无持多仓, 2为持空仓与无持

    Begin   //if(BarStatus==2 && Time==0.090000 && CurrentTime<0.090000) Return; // 集合竞价过滤

    If (barstatus==2 || GetGlobalVar(1)==InvalidNumeric)         
         {
           If(A_BuyPosition==0)
            {      
             setglobalvar(1,0);
            } else If(A_BuyPosition>0)               
                {
                   SetGlobalVar(1,1);
                }
            }
         else if(barstatus==2 || GetGlobalVar(1)!=InvalidNumeric)
                  {
                    SetGlobalVar(1,GetGlobalVar(1));
                  }

    If (barstatus==2 || GetGlobalVar(2)==InvalidNumeric)
         {
           If(A_SellPosition==0)
             {
               SetGlobalVar(2,0);
                           
              } else If(A_SellPosition>0)
                   {
                     SetGlobalVar(2,1);
                   }  
           } else if(barstatus==2 GetGlobalVar(2)!=InvalidNumeric)
                   {
                     SetGlobalVar(2,GetGlobalVar(2));            
                        }

    If (barstatus==2 || GetGlobalVar(0)==InvalidNumeric)
        {
           if(a_buyposition==0 and a_sellposition==0)
             {
              SetGlobalVar(0,0);
             }else if(A_TotalPosition()!=0)
              {
               SetGlobalVar(0,1);
              }
        } else if(barstatus==2 || GetGlobalVar(0)!=InvalidNumeric)
             {
                SetGlobalVar(0,GetGlobalVar(0));
             }



    if(barstatus==2 and a_buyposition==0 and a_sellposition==0 AND  GetGlobalVar(0)==0 AND GetGlobalVar(1)==0 AND GetGlobalVar

    (2)==0) )无持仓
    {
       IF(a>b) //开多条件
       {
          A_SendOrder(Enum_Buy,Enum_Entry,Lots,Q_AskPrice()+N*MinMove*PriceScale);//发送委托单 开多仓一手
          SetGlobalVar(0,1); 因为开了仓 全面变量0设为1
          SetGlobalVar(1,1); 因为开的多 全面变量1设为1
          SetGlobalVar(2,0);
          
         }
       IF(a<b) // 开空条件
          {
          A_SendOrder(Enum_Sell,Enum_Entry,Lots,Q_BidPrice()-N*MinMove*PriceScale); //发送委托单 开空仓一手
             SetGlobalVar(0,1); 因为开了仓 全面变量0设为1
             SetGlobalVar(1,1);
             SetGlobalVar(2,0); 因为开的多 全面变量2设为1
           }
       }
                     SetGlobalVar(2,GetGlobalVar(2));            
                        }
       



    if(barstatus==2 and a_buyposition>0 and a_sellposition==0 AND  GetGlobalVar(0)==1 AND GetGlobalVar(1)==1 AND GetGlobalVar

    (2)==0) ) //持多仓,在没有检查到用户函数,又因为有全局变量的二种控制,所以,保证不重发单

    {  if(c>b) 平多条件
         
         ..........................................
             SetGlobalVar(0,1); 因为平了仓 全面变量0设为0
             SetGlobalVar(1,1); 因为平多了 全面变量1设为0
             SetGlobalVar(2,0);

      }

     

  • 网友回复:
    xiaosong 发表于 2013-7-24 11:46
    谢谢老大. 谢谢回贴,这个软件是不错,是能解决小资金的执行力的问题. 但是编程的确是有难度,这主限制它的 ...


    这样写,感觉不是很合理哟。至少不是很适用于实际交易。
    建议先看一下F1里公式策略进阶里关于a_sendorder与全局变量配合使用的例子。

 

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

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


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

相关文章

    没有相关内容