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

历史回测不能下单 [开拓者 TB]

  • 咨询内容: 本帖最后由 wblsjhmxuhongbo 于 2018-11-20 17:27 编辑

    1分钟图上,根据信号下单和平仓。
    为确保1个bar只执行1次。我将所有代码都放在如下的判断语句中:
    If(T()<>GetGlobalVar(99))
            {
                    SetGlobalVar(99,T());

    代码根据信号下单:
    if(v_orient==1)
            {               
                    Buy(1,0);
                    XHBLog("buy","",v_programName,Date(),Time());
            }
            Else if(v_orient==-1)
            {               
                    SellShort(1,0);
                    XHBLog("sell","",v_programName,Date(),Time());
            }
            Else if(v_orient==0)
            {
                    Sell();
                    BuyToCover();
                    XHBLog("kill","",v_programName,Date(),Time());
            }

    日志显示几乎每分钟都有交易:
    2018-11-20 09:01:00 TestOrder  :sell
    2018-11-20 09:02:00 TestOrder  :sell
    2018-11-20 09:03:00 TestOrder  :sell
    2018-11-20 09:04:00 TestOrder  :sell
    2018-11-20 09:05:00 TestOrder  :sell
    2018-11-20 09:06:00 TestOrder  :sell
    2018-11-20 09:07:00 TestOrder  :sell
    2018-11-20 09:08:00 TestOrder  :sell
    2018-11-20 09:09:00 TestOrder  :sell
    2018-11-20 09:10:00 TestOrder  :sell
    2018-11-20 09:11:00 TestOrder  :sell
    2018-11-20 09:12:00 TestOrder  :sell
    2018-11-20 09:13:00 TestOrder  :sell
    2018-11-20 09:14:00 TestOrder  :sell
    2018-11-20 09:15:00 TestOrder  :sell
    2018-11-20 09:16:00 TestOrder  :sell
    2018-11-20 09:17:00 TestOrder  :sell
    2018-11-20 09:18:00 TestOrder  :sell
    2018-11-20 09:19:00 TestOrder  :sell
    2018-11-20 09:20:00 TestOrder  :sell
    2018-11-20 09:21:00 TestOrder  :sell
    2018-11-20 09:22:00 TestOrder  :sell
    2018-11-20 09:23:00 TestOrder  :sell
    2018-11-20 09:24:00 TestOrder  :sell
    2018-11-20 09:25:00 TestOrder  :sell
    2018-11-20 09:26:00 TestOrder  :sell
    2018-11-20 09:27:00 TestOrder  :sell
    2018-11-20 09:28:00 TestOrder  :sell
    2018-11-20 09:29:00 TestOrder  :sell
    2018-11-20 09:30:00 TestOrder  :sell
    2018-11-20 09:31:00 TestOrder  :sell
    2018-11-20 09:32:00 TestOrder  :sell
    2018-11-20 09:33:00 TestOrder  :sell
    可是回测记录全天却只有4条:
    #        公式应用        类型        商品        建仓时间        建仓价格        平仓时间        平仓价格        数量        交易成本
    1        TestOrder        空头        m1903        2018/11/20 9:01        3055        2018/11/20 10:07        3064        1        6
    2        TestOrder        多头        m1903        2018/11/20 10:07        3064        2018/11/20 10:08        3060        1        6
    3        TestOrder        多头        m1903        2018/11/20 10:14        3060        2018/11/20 10:50        3070        1        6
    4        TestOrder        空头        m1903        2018/11/20 10:50        3070        2018/11/20 14:59        3080        1        6

    也就是说,其中大部分下单信号都没有执行。请高手指点,这到底是为什么?我理解历史回测不是应该都能成交吗?

     

     来源:CXH99.COM

  • TB技术人员: 本帖最后由 wblsjhmxuhongbo 于 2018-11-21 11:43 编辑

    我把源码贴出来,请高手帮忙看下,这是什么原因。先不用管程序逻辑(大概逻辑是以同品种不同期合约价差(m1903-m1901)均线为参考依据,收盘价超过上限卖,低于下限买,否则平仓),我主要目的是用来了解下单函数的。现在的现象是,在信号变化的地方会下单,比如第一次出现buy信号时下单,其后连续的buy信号都不下单:

    //------------------------------------------------------------------------
    // 简称: TestOrder
    // 名称: 测试下单函数
    // 类别: 公式应用
    // 类型: 用户应用
    //------------------------------------------------------------------------

    Params
    Numeric MALength(100);
            Numeric FirstStep(50);//警戒线
            Numeric pBuyLots(1);
            numeric pStartDate(20181110);

    Vars

    string v_programName;
            NumericSeries ma;
            NumericSeries maQuick;
            NumericSeries CloseDif;
            numeric v_orient;

            numeric lv_lot;

            Numeric ShiftUnit(10);
    Begin
            if(Date()<pStartDate){return;}
           
            If(T()<>GetGlobalVar(99))
            {
                    //利用全局变量,确保每个bar只执行一次
                    SetGlobalVar(99,T());
                   
                    if (CurrentBar <MALength)
            {
                    return ;
            }
            v_programName="TestOrder";
           
                    CloseDif=Data0.Close-Data1.Close;
                    ma=Average( CloseDif, MALength );


            If(CloseDif>(ma+FirstStep))
            {
                    //超过均线上限则卖出
                    v_orient=-1;
            }
            else If(CloseDif<(ma-FirstStep))
            {
                    //超过均线下限则买入
                    v_orient=1;
            }
            Else
            {
                    //平仓
                    v_orient=0;               
            }
           
            PlotNumeric("orient",v_orient);
           
            if(v_orient==1)
            {               
                    Buy(1,0);
                    //XHBLog("buy","",v_programName,Date(),Time());
                    FileAppend("C:\\temp\\log.txt",DateToString(Date)+" "+TimeToString(Time)+" "+"buy");
            }
            Else if(v_orient==-1)
            {               
                    SellShort(1,0);
                    //XHBLog("sell","",v_programName,Date(),Time());
                    FileAppend("C:\\temp\\log.txt",DateToString(Date)+" "+TimeToString(Time)+" "+"sell");
            }
            Else if(v_orient==0)
            {
                    Sell();
                    BuyToCover();
                    //XHBLog("kill","",v_programName,Date(),Time());
                    FileAppend("C:\\temp\\log.txt",DateToString(Date)+" "+TimeToString(Time)+" "+"kill");
            }
            }
    End

    //------------------------------------------------------------------------
    // 编译版本        GS2015.12.25
    // 用户版本        2018/10/22 12:16:33
    // 版权所有       
    // 更改声明        TradeBlazer Software保留对TradeBlazer平台
    //                        每一版本的TradeBlazer公式修改和重写的权利
    //------------------------------------------------------------------------

     

  • TB客服:
    wblsjhmxuhongbo 发表于 2018-11-21 11:39
    我把源码贴出来,请高手帮忙看下,这是什么原因。先不用管程序逻辑(大概逻辑是以同品种不同期合约价差(m1 ...

    同一个公式里面,系统默认是不能连续建仓的吧(我也不知道tb为什么要这样设定)。在全局交易设置里面允许连续建仓试试?

     

  • 网友回复:
    colin10g 发表于 2018-11-21 13:01
    同一个公式里面,系统默认是不能连续建仓的吧(我也不知道tb为什么要这样设定)。在全局交易设置里面允许 ...

    谢谢,正是这个原因!问题已解决!

 

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

可联系技术人员 QQ: 511411198  点击这里给我发消息或微信:cxhjy888 进行 有偿 编写!不贵!点击查看价格!


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

相关文章

    没有相关内容