leonshi 发表于 2019-2-24 22:17:32

回测时,在没有交易指令发出的前提下,MarketPosition被重置

本帖最后由 leonshi 于 2019-2-24 22:19 编辑

报一个bug,回测时,在没有交易指令发出的前提下,MarketPosition被重置为0。根据我自己的调查,这个bug与均线有关。

1. 先贴上我的实验公式:Vars
        String tradeLogFile;        //交易日志
        Numeric ma;
Begin

        tradeLogFile = "D:\\tblog\\trade_testissue01_" + Symbol + "_" + Text(CurrentDate) + ".log";        
        
        ma = AverageFC(Close, 19);
        
        if(CurrentBar == 0) {
                Buy(1, Open);
        }
        
        FileAppend(tradeLogFile, "---bar " + Text(CurrentBar) + " MarketPosition:" + Text(MarketPosition));

End2. 再贴上公式打印的部分log:
---bar 0 MarketPosition:1
---bar 1 MarketPosition:1
---bar 2 MarketPosition:1
---bar 3 MarketPosition:1
---bar 4 MarketPosition:1
---bar 5 MarketPosition:1
---bar 6 MarketPosition:1
---bar 7 MarketPosition:1
---bar 8 MarketPosition:1
---bar 9 MarketPosition:1
---bar 10 MarketPosition:1
---bar 11 MarketPosition:1
---bar 12 MarketPosition:1
---bar 13 MarketPosition:1
---bar 14 MarketPosition:1
---bar 15 MarketPosition:1
---bar 16 MarketPosition:1
---bar 17 MarketPosition:1
---bar 18 MarketPosition:0
---bar 19 MarketPosition:0

3. 我对该bug的分析:
从日志可见,第19个bar,也就是均线求值的bar个数,MarketPosition被重置为0.
如果不执行均线求值,则MarketPosition表现正常,不会被重置。
第19个bar之前和之后都可以建仓和平仓。可一旦到达第19个bar仍在持仓,则MarketPoistion自动重置,同时,该图表的投资组合性能测试报告会生成失败,里面不会有任何交易,所有数据都是0.
使用average方法替代AverageFC,仍有此问题。

以下是我的tb版本信息:程序文件:TradeBlazer.exe
软件名称:交易开拓者平台
版本:  5.5.4.6
更新:  2018-12-28

文件名:BarEx.dll
版本:  5.5.4.6
更新:  2018-12-28

文件名:BaseCtrl.dll
版本:  5.5.0.0
更新:  2018-07-03

文件名:DataFeed.dll
版本:  5.5.4.6
更新:  2018-12-28

文件名:Desktop.dll
版本:  5.5.4.6
更新:  2018-12-28

文件名:ice35.dll
版本:  3.5.1
更新:  2017-05-09

文件名:iceutil35.dll
版本:  3.5.1
更新:  2017-05-09

文件名:KeyFilter.dll
版本:  5.5.4.6
更新:  2018-12-28

文件名:libcurl.dll
版本:  7.30.0
更新:  2014-07-01

文件名:libeay32.dll
版本:  1.0.1e
更新:  2014-07-01

文件名:LowQuote.dll
版本:  5.5.4.6
更新:  2018-12-28

文件名:Master.dll
版本:  5.5.4.6
更新:  2018-12-28

文件名:mfc110.dll
版本:  11.0.60610.1
更新:  2014-07-01

文件名:MsgManage.dll
版本:  5.5.4.6
更新:  2018-12-28

文件名:msvcp110.dll
版本:  11.00.51106.1
更新:  2014-07-01

文件名:msvcr110.dll
版本:  11.00.51106.1
更新:  2014-07-01

文件名:NewChart.dll
版本:  5.5.4.6
更新:  2018-12-28

文件名:OptionQuote.dll
版本:  5.5.4.6
更新:  2018-12-28

文件名:RichCtrl.dll
版本:  5.5.4.6
更新:  2018-12-28

文件名:SciLexer.dll
版本:  3.3.9
更新:  2014-07-01

文件名:ScriptRunner.dll
版本:  5.5.4.6
更新:  2018-12-28

文件名:SectChart.dll
版本:  5.5.4.6
更新:  2018-12-28

文件名:ssleay32.dll
版本:  1.0.1e
更新:  2014-07-01

文件名:SysFuncs.dll
版本:  5.5.4.6
更新:  2018-12-28

文件名:TBCompiler.dll
版本:  5.5.4.6
更新:  2018-12-28

文件名:TBFormula.dll
版本:  5.5.4.6
更新:  2018-12-28

文件名:TBParser.dll
版本:  5.5.4.6
更新:  2018-12-28

文件名:TradeMaster.dll
版本:  5.5.4.6
更新:  2018-12-28

文件名:TradingBox.dll
版本:  5.5.4.6
更新:  2018-12-28


如果确认这是bug,望早日修复此bug,以及请提供替代写法。

谢谢!

小米 发表于 2019-2-25 15:51:04

可在开仓条件上加一限制 ,限制只有currentbar>=maxbarsback的情况下方执行开仓语句。
页: [1]
查看完整版本: 回测时,在没有交易指令发出的前提下,MarketPosition被重置