vn.py官网
开源量化社区
Member
加入于:
帖子: 13
声望: 0

简单的双均线策略,一个用ctastrategy模板写一个用portfoliostrategy写,但回测时都只用一个合约,应该得到完全一致的结果。
但是calculate_results()回来的统计结果并不一样

多合约引擎跑出来的是这样

description

单合约是这样

description

起始时间均为2019-5-1 -- 2020-5-1。注意两个结果中的turnover其实是一样的,但是在日期上错位了。请问这是不是两个引擎之一的编写有bug?

Administrator
avatar
加入于:
帖子: 4887
声望: 284

dionysos wrote:

简单的双均线策略,一个用ctastrategy模板写一个用portfoliostrategy写,但回测时都只用一个合约,应该得到完全一致的结果。
但是calculate_results()回来的统计结果并不一样

多合约引擎跑出来的是这样

description

单合约是这样

description

起始时间均为2019-5-1 -- 2020-5-1。注意两个结果中的turnover其实是一样的,但是在日期上错位了。请问这是不是两个引擎之一的编写有bug?

请在Github开个Issue吧,我们安排同事来查下

Member
avatar
加入于:
帖子: 470
声望: 24
  1. 请问用的是哪个版本?
  2. 可以load_bars()比load_bar()少一天试试看。
Member
加入于:
帖子: 13
声望: 0

用Python的交易员 wrote:

dionysos wrote:

简单的双均线策略,一个用ctastrategy模板写一个用portfoliostrategy写,但回测时都只用一个合约,应该得到完全一致的结果。
但是calculate_results()回来的统计结果并不一样

多合约引擎跑出来的是这样

description

单合约是这样

description

起始时间均为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。谢谢

Member
加入于:
帖子: 13
声望: 0

青青子荆 wrote:

  1. 请问用的是哪个版本?
  2. 可以load_bars()比load_bar()少一天试试看。
  1. 是2.3.0.
  2. 应该不是load_bars()的问题:)
© 2015-2019 上海韦纳软件科技有限公司
备案服务号:沪ICP备18006526号-3

沪公网安备 31011502017034号