简单的双均线策略,一个用ctastrategy模板写一个用portfoliostrategy写,但回测时都只用一个合约,应该得到完全一致的结果。
但是calculate_results()回来的统计结果并不一样
多合约引擎跑出来的是这样
单合约是这样
起始时间均为2019-5-1 -- 2020-5-1。注意两个结果中的turnover其实是一样的,但是在日期上错位了。请问这是不是两个引擎之一的编写有bug?
简单的双均线策略,一个用ctastrategy模板写一个用portfoliostrategy写,但回测时都只用一个合约,应该得到完全一致的结果。
但是calculate_results()回来的统计结果并不一样
多合约引擎跑出来的是这样
单合约是这样
起始时间均为2019-5-1 -- 2020-5-1。注意两个结果中的turnover其实是一样的,但是在日期上错位了。请问这是不是两个引擎之一的编写有bug?
dionysos wrote:
简单的双均线策略,一个用ctastrategy模板写一个用portfoliostrategy写,但回测时都只用一个合约,应该得到完全一致的结果。
但是calculate_results()回来的统计结果并不一样多合约引擎跑出来的是这样
单合约是这样
起始时间均为2019-5-1 -- 2020-5-1。注意两个结果中的turnover其实是一样的,但是在日期上错位了。请问这是不是两个引擎之一的编写有bug?
请在Github开个Issue吧,我们安排同事来查下
用Python的交易员 wrote:
dionysos wrote:
简单的双均线策略,一个用ctastrategy模板写一个用portfoliostrategy写,但回测时都只用一个合约,应该得到完全一致的结果。
但是calculate_results()回来的统计结果并不一样多合约引擎跑出来的是这样
单合约是这样
起始时间均为2019-5-1 -- 2020-5-1。注意两个结果中的turnover其实是一样的,但是在日期上错位了。请问这是不是两个引擎之一的编写有bug?
请在Github开个Issue吧,我们安排同事来查下
大概找到了问题所在:
多合约的run_backtesting() 里面 day_count = 0; 单合约里面day_count = 1. 比如前者该为1可解决前面提到的错位问题。
还发现了一个问题:多合约里面的total trade days会把load_bars(n)中的n天加进去。虽然收益等结果不变,但是所有用到总交易天数的指标都会有问题。
排查发现是因为多合约里面在处理前n天的时候call self.new_bars(), 里面会更新daily results. 但是单合约里面call 的是策略的on_bar()所以没有这个问题。
两个问题都修正后目前所有统计结果都一致。见 issue #2992。谢谢