背景

重构代码之后,这个测试用例失败了,需要修复这个测试用例,分析定位 bug 在什么地方,然后修复

FAILED tests/strategies/test_58_data_replay.py::test_data_replay - AssertionError: Expected final_value=108263.90, got 107605.40000000001

修复方法建议

  1. backtrader/run_test_with_log.py 这个运行这个策略,然后对比 master 分支上的结果,看看 origin 分支上的结果究竟差在哪里,然后去定位。

  2. 如果必要,可以修改测试用例,增加注释,然后方便在两个分支上进行对比。

从理论上来看,大概率是 使用回放功能,将日线回放为周线 下面的功能失败了,需要修复这个功能 cerebro.replaydata( data, timeframe=bt.TimeFrame.Weeks, compression=1 ) 不要去修改 crossover 这个,因为这个在其他地方是正常的,所以需要修复的是上面的 replaydata 相关的功能。

可以新增一个每个 bar 都打印开盘价,收盘价的功能,看下每个 bar 是否正常。

资源

  1. 修改当前测试脚本,比如新增了 debug 信息之类的,可以用 backtrader/sync_to_master.py 同步到 master 分支上的对应脚本

  2. 可以使用 backtrader/run_test_with_log.py 这个脚本,对比当前分支(origin)和 master 分支上运行这个策略的结果,形成日志,放到 logs,方便后续对比差异。

限制

  1. 不允许修改测试用例,尤其是测试用例的期望值。

  2. 修改过源代码重新测试的时候,最好 pip install -U . 重新安装一下。

  3. 现在版本的代码和原始的底层实现的逻辑已经有很大不一样了,每个函数的逻辑可能会存在不一样,不能按照 master 版本的相应函数来实现现在版本的函数。即不允许:restore the master branch’s simpler, declarative implementation