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

发个模板,欢迎共享,欢迎测试、改进、完善 - TradeBlazer公式 [开拓者 TB]

  • 咨询内容: //本模板包含两个模块:开多仓,平多仓。
    //本模板还没有完全测试完毕。已发现有个别重复发单现象。原因尚在查找中。
    //欢迎copy,欢迎拍砖。

    Params
            //模板参数
            Numeric        lastOpenTime(14.55);//开仓时间限制
            Numeric        lastCloseTime(14.56);//退出时间限制
            Numeric        waittimeEntry(20);//等待入场成交时间秒数
            Numeric        waittimeExit(20);//等待出场成交时间秒数
            Numeric        lots(1);                //交易量       


    Vars
            //模板变量
            Bool                conBuyEntry;//开多条件
            Bool                conOpenOrderBuyEntry;//已存在未成交开多单
            Bool                conWaitTime;
            Numeric                        priceBuyEntry;
            Bool                conSellExit;
            Bool                conOpenOrderSellExit;//已存在未成交平多单
            Numeric                        priceSellExit;
           
            //个性变量

           

    Begin
    //开多*******************************************************************************************************

            //判断是否已有未成交多单 (防止网络延时以及全局变量意外丢失正确值)
            conOpenOrderBuyEntry=(GetGlobalVar(10)==1) || (A_GetLastOpenOrderIndex(Enum_Buy,Enum_Entry) != InvalidInteger) ;       
            If ( CurrentTime*100<lastOpenTime && A_BuyPosition==0 )
            {       
    FileAppend("d:\\h.log",text(currenttime*100)+"***********************************准备开多");                       
                                                                                           
    //-------------------------------------------------------------------------------------求开多条件
                   
                   
                   
                   
                   
                    conBuyEntry=True;
    //-------------------------------------------------------------------------------------求开多条件完毕               
                   
                    If (conBuyEntry)        //多头条件
                    {
                            //处理已有未成交多单                        
                            If ( conOpenOrderBuyEntry )       
                            {
                                    // 判断等待时间
                                    If (GetGlobalVar(11)==InvalidNumeric)       
                                            SetGlobalVar(11,0);//初始化等待时间变量
                                    conWaitTime=(MyDecTime( currenttime,GetGlobalVar(11))>waittimeEntry)
                                                    || ( MyDecTime(currenttime,A_OpenOrderTime( A_GetLastOpenOrderIndex(Enum_Buy,Enum_Entry) )) > waittimeEntry );                                                       
    FileAppend("d:\\h.log",text(currenttime*100)+"     "+"等待时间秒数1="+text(MyDecTime( currenttime,GetGlobalVar(11)))
            +"      等待时间秒数2="+text( MyDecTime(currenttime,A_OpenOrderTime( A_GetLastOpenOrderIndex(Enum_Buy,Enum_Entry) ))));       
                                    If ( conWaitTime )
                                    {
    FileAppend("d:\\h.log",text(currenttime*100)+"     "+"延时已到,撤单重发");               
    FileAppend("d:\\h.log",text(currenttime*100)+"     "+"撤单合同号="
            +A_OpenOrderContractNo( A_GetLastOpenOrderIndex(Enum_Buy,Enum_Entry)));                               
                                            A_DeleteOrder( A_OpenOrderContractNo( A_GetLastOpenOrderIndex(Enum_Buy,Enum_Entry) ) );        //撤单                                               
                                            //算价、下单、设置、计时
                                            priceBuyEntry=        ;                                                                                       
                                            A_SendOrder(Enum_Buy,Enum_Entry,lots,priceBuyEntry);       
    FileAppend("d:\\h.log",text(currenttime*100)+"     "+"重发单(未成交)索引号="
            +text( A_GetLastOpenOrderIndex(Enum_Buy,Enum_Entry)));                                       
    FileAppend("d:\\h.log",text(currenttime*100)+"     "+"重发合同号(未成交)="
            +A_OpenOrderContractNo( A_GetLastOpenOrderIndex(Enum_Buy,Enum_Entry)));       
    FileAppend("d:\\h.log",text(currenttime*100)+"     "+"重发合同号(末合同)="
            +A_OrderContractNo( A_GetLastOrderIndex(Enum_Buy,Enum_Entry)));               
                                            SetGlobalVar(10,1);
                                            SetGlobalVar(11,currenttime);                                       
                                    }                                               
                            }
                            Else       
                            {
                            //算价、下单、设置、计时
                                    priceBuyEntry=              ;

                            A_SendOrder(Enum_Buy,Enum_Entry,lots,priceBuyEntry);
    FileAppend("d:\\h.log",text(currenttime*100)+"     "+"首次发单");
    FileAppend("d:\\h.log",text(currenttime*100)+"     "+"首发合同号="
            +A_OpenOrderContractNo( A_GetLastOpenOrderIndex(Enum_Buy,Enum_Entry)));
                            SetGlobalVar(10,1);
                            SetGlobalVar(11,currenttime);                                                               
                            }               
                    }
                    Else
                    {
    FileAppend("d:\\h.log",text(currenttime*100)+"     "+"不符合多头条件");       
                            //有多单则撤单
                            If ( (A_GetLastOpenOrderIndex(Enum_Buy,Enum_Entry) != InvalidInteger) )        //不采用全局变量,需等待前面的单子可撤。
                                    A_DeleteOrder( A_OpenOrderContractNo( A_GetLastOpenOrderIndex(Enum_Buy,Enum_Entry) ) );                               
                                   
                            SetGlobalVar(10,0);
                    }
                   
            }
           
            Else
            {
                    If ( (A_GetLastOpenOrderIndex(Enum_Buy,Enum_Entry) != InvalidInteger) )        //不采用全局变量,需等待前面的单子可撤。
                            A_DeleteOrder( A_OpenOrderContractNo( A_GetLastOpenOrderIndex(Enum_Buy,Enum_Entry) ) );
                    SetGlobalVar(10,0);
            }
           
    //处理多头仓位*************************************************************************************************************************************
           
            If ( A_BuyPosition!=0 )        
            {       
                    //判断是否已有未成交平多单 (防止网络延时以及全局变量意外丢失正确值)
                    conOpenOrderSellExit=(GetGlobalVar(30)==1) || (A_GetLastOpenOrderIndex(Enum_Sell,Enum_ExitToday) != InvalidInteger) ;       
    FileAppend("d:\\h.log",text(currenttime*100)+"================================================准备平多仓");       
                    If (CurrentTime*100<=lastCloseTime)        //退出时间限制
                    {
                            //有单无单分别处理                        
                            If ( conOpenOrderSellExit )         //有单处理,有手工单也同样处理
                            {
                                    If (GetGlobalVar(31)==InvalidNumeric)       
                                            SetGlobalVar(31,0);//初始化等待时间变量
                                    conWaitTime=(MyDecTime( currenttime,GetGlobalVar(31))>waittimeExit)
                                                    || ( MyDecTime(currenttime,A_OpenOrderTime( A_GetLastOpenOrderIndex(Enum_Sell,Enum_ExitToday) )) > waittimeExit );
    FileAppend("d:\\h.log",text(currenttime*100)+"     "+"平仓等待时间秒数1="+text(MyDecTime( currenttime,GetGlobalVar(31)))
            +"      平仓等待时间秒数2="+text( MyDecTime(currenttime,A_OpenOrderTime( A_GetLastOpenOrderIndex(Enum_Sell,Enum_ExitToday) ))));       
                                    If ( conWaitTime )                // 等待成交的延时已到,撤单追价重发
                                    {
    FileAppend("d:\\h.log",text(currenttime*100)+"     "+"延时已到,撤平仓单重发");               
    FileAppend("d:\\h.log",text(currenttime*100)+"     "+"撤单合同号="
            +A_OpenOrderContractNo( A_GetLastOpenOrderIndex(Enum_Sell,Enum_ExitToday)));                               
                                            A_DeleteOrder( A_OpenOrderContractNo( A_GetLastOpenOrderIndex(Enum_Sell,Enum_ExitToday) ) );        //撤单                                                               
                                            //算价、下单、设置、计时
                                            PriceSellExit=            ;                                               
                                            A_SendOrder(Enum_Sell,Enum_Exit,lots,PriceSellExit);
                                            SetGlobalVar(30,1);
                                            SetGlobalVar(31,currenttime);                                       
                                    }                                               
                            }
                            Else        //无单处理
                            {
                                   
    //-------------------------------------------------------------------------------------求平多条件
                   
                   
                   
                   
                   
                                    conSellExit=true;                       
    //-------------------------------------------------------------------------------------求平多条件完毕                                               
                                                                                                                                                                                   
                                    If (conSellExit)        //平多条件
                                    {
                                    //算价、下单、设置、计时
                                            PriceSellExit=          ;

                                    A_SendOrder(Enum_Sell,Enum_Exit,lots,PriceSellExit);
    FileAppend("d:\\h.log",text(currenttime*100)+"     "+"首次平仓发单");                               
                                    SetGlobalVar(30,1);
                                    SetGlobalVar(31,currenttime);                                                               
                                    }
                            }

                    }
                    Else        //退出时间已到,有单撤单,以停板价委托,之后不撤单
                    {
    FileAppend("d:\\h.log",text(currenttime*100)+"     "+"退出时限已到");               
                            If (GetGlobalVar(39)==InvalidNumeric)
                                    SetGlobalVar(39,0);//初始化
                            If ( A_GetLastOpenOrderIndex(Enum_Sell,Enum_ExitToday)!=InvalidInteger && GetGlobalVar(39)!=1)
                            {
                                    A_DeleteOrder( A_OpenOrderContractNo( A_GetLastOpenOrderIndex(Enum_Sell,Enum_ExitToday) ) );
    FileAppend("d:\\h.log",text(currenttime*100)+"     "+"有平仓单撤单");
                                    SetGlobalVar(30,0);
                            }
                            If ( GetGlobalVar(39)!=1 )
                            {
                            A_SendOrder(Enum_Sell,Enum_Exit,lots, Q_LowerLimit);        
    FileAppend("d:\\h.log",text(currenttime*100)+"     "+"跌停价发平仓单");
                            SetGlobalVar(30,1);
                            SetGlobalVar(39,1);
                            }
                    }
            }
            Else
                    SetGlobalVar(30,0);
                   
             
           
    End

     

  • TB技术人员: 上面的用户函数mydectime用于计算两个时间的秒差

    Params
            Numeric MyTime1; //如0.143059
            Numeric MyTime2;

    Vars
            Numeric MyHH1;
            Numeric MyMM1;
            Numeric MySS1;
            Numeric MyHH2;
            Numeric MyMM2;
            Numeric MySS2;

    Begin
            MyHH1 = IntPart(MyTime1*100);
            MyMM1 = IntPart(MyTime1*10000)-MyHH1*100;
            MySS1 = MyTime1*1000000-MyHH1*10000-MyMM1*100;
            MyHH2 = IntPart(MyTime2*100);
            MyMM2 = IntPart(MyTime2*10000)-MyHH2*100;
            MySS2 = MyTime2*1000000-MyHH2*10000-MyMM2*100;
            Return MyHH1*3600 + MyMM1*60 + MySS1 - MyHH2*3600 - MyMM2*60 - MySS2;
    End

     

  • TB客服: 要是tb能提供收盘时间也能进行盘中测试就好了

     

  • 网友回复: 很高兴“顺势顺心”利用我的MyDecTime函数。但是我自己并不使用该函数,实际上使用Tick计算更合适,我认为。
    有时间研究一下你的程序框架。

     

  • 网友回复:
    很高兴“顺势顺心”利用我的MyDecTime函数。但是我自己并不使用该函数,实际上使用Tick计算更合适,我认为。
    有时间研究一下你的程序框架。
    efrog 发表于 2010-9-13 12:31


    引用你的函数没有注明出处。哈哈。我也忘了从谁那copy的。把你的时间小数位数改了点。

 

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

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

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

 


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

相关文章

    没有相关内容