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

新手学用A函数编程.请帮助看一下逻辑性 [开拓者 TB]

  • 咨询内容: 本帖最后由 xiaosong 于 2013-7-20 12:01 编辑

    我用交易开拓者几天,这个软件的确能解决执行力的问题,但是坑爸的事,编程的确有一点难.

    下面是我的思维(才学习几天,如何止损原码看不懂,还是日内时间控制也是搞不清楚)

    1:如果A>B是开多条件
    2: 如果A<B是平多条件
    3:如果C>D是开空条件
    4:如果C<D是平空条件

    固定交易一手.

    对信号消失的处理

    1:如果开多信号出现后,信号又消失,也开仓,如果再出现开多信号就不开多仓. 如果出现反向的开空信号就,就平多仓,开空仓

    2:开空也是一样如处理了




    bigen

        ................................
        ..................................


    if(A_TotalPosition()=0) \\返回当前公式应用的帐户下当前商品的总持仓 (无持仓)
    {
       IF(A>B) \\开多条件
       {
         if(A_BuyPosition()=0) \\返回当前公式应用的帐户下当前商品的买入持仓  \\没有多仓持仓 ( 我想了一下,前面的入口是没有持多仓空仓,才能进来.所以,这里是不是,满足了开多条件,直接开多仓了?不要这个IF)
           {
            A_SendOrder(..........) \\针对当前公式应用的帐户、商品发送委托单 \\开仓一手
           }
           }
       } els IF(C>D) \\ 开空条件
           {
            IF(A_SellPosition()=0) \\\\返回当前公式应用的帐户下当前商品的卖出持仓 \\没有持空仓  (( 我想了一下,前面的入口是没有持多仓空仓,才能进来.所以,这里是不是,满足了开空条件,直接开多仓了?不要这个IF)
              {
               A_SendOrder(..........) \\针对当前公式应用的帐户、商品发送委托单 \\开空仓一手
              }
            }
    }else if(A_BuyPosition()!=0) \\ 有多仓的情况

         {   IF(C>D) \\ 开空条件 \\  有持多仓的情况,出现了开空信号处理
             {
               A_SendOrder(..........)               \\平多仓
               A_SendOrder(..........)               \\开空仓
             } else if( 开多仓的价格-k最高价)>=20)  \\\止损 在持多仓的情况,如果下跌,下跌超过20点止损

                    {  A_SendOrder(..........)   \\平多仓
                      } else if(A<B)             \\平多条件  ,在持多仓的情况,如果上跌,达到平多条件平仓
                             {
                              A_SendOrder(..........)               \\平多仓
                              }

         } else if(  A_SellPosition()!=0)\\ 有空仓的情况
                 {
                 IF(A>B) \\开多条件    有持空仓的情况,出现了开多信号处理
                  {  A_SendOrder(..........)               \\平空仓
                     A_SendOrder(..........)               \\开多仓
                  } else if(开空仓的价格-k最低价)>=-20)  \\\止损  在持空仓的情况,如果上跌,上涨超过20点止损

                         { A_SendOrder(..........)               \\开空仓   
                         } else If( C<D)            \\是平空条件       在持空仓的情况,如果下跌,达到平空条件平仓   
                             {
                              A_SendOrder(..........)               \\平空仓

                             }
                   }

    end



    各位大哥,我是新人,请指教小弟,看一下有没有什么逻辑性错误了...



    谢谢                       

     

  • TB技术人员: 还有几个问题请教.

    1:如开盘后15后才交易,收盘前14.55平仓.

      (1):网上有原码,我也看不懂。请教
            要把原码放在那里了?????????????????????????????????????????????????????


    2:Return;

       在网上,有一些函数加得有Return; Return;是返回
    (1)加与不加有什么差异?

      (2):我上面要加吗?
      

     

  • TB客服: 本帖最后由 xiaosong 于 2013-7-20 15:32 编辑

    又经过几个小时的奋斗,搞出来的止损,日内时间控制,与收盘前平仓.

    那位朋友来看一下有错误吗?

    Params
    Numeric Lots(1);单次开仓手数
    Numeric tradBegin(930); 开仓时间
    Numeric tradEnd(1456); 开仓截止时间
    Numeric mycputime(14.58);    //电脑时间 收盘前平仓
    Numeric N(2);                //相对买卖盘的偏移值
    Numeric K(0);                //0为多空都平;1为只平多单;-1为只平空单


    bigen

        ................................
        ..................................
    if(Time>=0.0001*tradBegin And Time<=0.1500)  if( CurrentTime*100 >=tradBegin and  tradEnd>=CurrentTime*100)  \\两种方案,不知那种方案正确

    {


    if(A_TotalPosition()=0) \\返回当前公式应用的帐户下当前商品的总持仓 (无持仓)
    {
       IF(A>B) \\开多条件
       {
          A_SendOrder(Enum_Buy,Enum_Entry,lost,Q_AskPrice()+N*MinMove*PriceScale);
    )\\发送委托单 开多仓一手
        }
          
        } else IF(C>D) \\ 开空条件
           {

            A_SendOrder(Enum_Sell,Enum_Entry,lost,Q_BidPrice()-N*MinMove*PriceScale); \\发送委托单 开空仓一手
             
            }
    }else if(A_BuyPosition>0) \\ 持多仓的情况

         {  IF(C>D) \\ 在持多仓的情况,出现开空信号的处理
             {
                A_SendOrder(Enum_Sell,Enum_Exit, A_sellPosition(),Q_BidPrice()-N*MinMove*PriceScale);  \\平多仓
                A_SendOrder(Enum_Sell,Enum_Entry,lost,Q_BidPrice()-N*MinMove*PriceScale); \\开空仓
             } else if( A_BuyAvgPrice()-Q_BidPrice>20)  \\\止损 在持多仓的情况,如果下跌,下跌超过20点止损

                    {  A_SendOrder(Enum_Sell,Enum_Exit, A_BuyPosition,Q_BidPrice()-N*MinMove*PriceScale);  \\平多仓 注:是平仓,不是平今
                      } else if(A<B)             \\在持多仓的情况,达到平多条件平仓
                             {
                              A_SendOrder(Enum_Sell,Enum_Exit, A_BuyPosition(),Q_BidPrice()-N*MinMove*PriceScale);  \\平多仓
                              }

         } else if(A_SellPosition>0)\\ 持空仓的情况
                 {
                 IF(A>B) \\在持空仓的情况,出现了开多信号处理
                  {  A_SendOrder(Enum_Buy,Enum_Exit,A_sellPosition(),Q_AskPrice()+N*MinMove*PriceScale); \\平空仓
                     A_SendOrder(Enum_Buy,Enum_Entry,lost,Q_AskPrice()+N*MinMove*PriceScale);        \\开多仓
                  } else if(Q_AskPrice-A_SellAvgPrice)>20)  \\止损  在持空仓的情况,如果上跌,上涨超过20点止损
                    {     
                        A_SendOrder(Enum_Buy,Enum_Exit,A_SellPosition,Q_BidPrice()+N*MinMove*PriceScale);\\平空仓   
                         } else If( C<D)            \\在持空仓的情况,达到平空条件平仓   
                             {
                               A_SendOrder(Enum_Buy,Enum_Exit,A_sellPosition(),Q_BidPrice()+N*MinMove*PriceScale);\\平空仓

                             }
                   } else If(CurrentTime*100 >= mycputime )  //平仓时间设置
      {
        If (A_BuyPosition()>0 && A_GetOpenOrderCount()==0 and K>=0)
        {
          A_SendOrder(Enum_Sell,Enum_Exit,A_BuyPosition(),Q_BidPrice()-N*MinMove*PriceScale);
        }
        If (A_sellPosition()>0 && A_GetOpenOrderCount()==0 and K<=0)
        {
          A_SendOrder(Enum_Buy,Enum_Exit,A_sellPosition(),Q_AskPrice()+N*MinMove*PriceScale);
        }
       }

    }

    end

     

  • 网友回复: 本帖最后由 xiaosong 于 2013-7-20 17:49 编辑

    版主老大,各位论坛上的朋友在吗?
    上面的我的公式中,
    1:用A函数在,在一根K线会,发生反复发单的情况吗?

    2:达到条件后开仓后,马上进去有仓的入口,在有入仓的入口,只有三个条件入口: 反向开仓平仓入口,止损入口, 按要求平仓入口.
         没在再开多样仓向的入口

    3:我在这个公式中,要用全局变量吗?

     

  • 网友回复: 昨晚与今天在网看了一天的贴.

    1:每当Tick来时,如果激发开仓条件,就会发单.
         A_SendOrder(Enum_Buy,Enum_Entry,Lots,Q_AskPrice()+N*MinMove*PriceScale);//发送委托单 开多仓一手
       
        虽然if(A_TotalPosition()==0),是没有持仓时的入口,好相if(A_TotalPosition()==0)能控制,有持仓时不进来.
        但是因为时间的延时,发单成交的数据迟迟不返回,断网..或者发单不成交.

       在上一个发单(Tick激发开仓条件)------------------又一次Tick激发开仓条件--------------------到发单交成返回之间.

       就会二次运行.

       if(A_TotalPosition()==0),
    {
      }

      这就发二次单,如果都成交,就会成交二次.

    2:这种Tick激发方式,能保证成交的及时性. 如果都采用Bar方式,价格就差很多.

         

      

       

 

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

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


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

相关文章

    没有相关内容