背景¶
重构代码之后,这个测试用例失败了,需要修复这个测试用例,分析定位 bug 在什么地方,然后修复
FAILED tests/strategies/test_58_data_replay.py::test_data_replay - AssertionError: Expected final_value=108263.90, got 107605.40000000001
修复方法建议¶
backtrader/run_test_with_log.py 这个运行这个策略,然后对比 master 分支上的结果,看看 origin 分支上的结果究竟差在哪里,然后去定位。
如果必要,可以修改测试用例,增加注释,然后方便在两个分支上进行对比。
从理论上来看,大概率是 使用回放功能,将日线回放为周线 下面的功能失败了,需要修复这个功能 cerebro.replaydata( data, timeframe=bt.TimeFrame.Weeks, compression=1 ) 不要去修改 crossover 这个,因为这个在其他地方是正常的,所以需要修复的是上面的 replaydata 相关的功能。
可以新增一个每个 bar 都打印开盘价,收盘价的功能,看下每个 bar 是否正常。
资源¶
修改当前测试脚本,比如新增了 debug 信息之类的,可以用 backtrader/sync_to_master.py 同步到 master 分支上的对应脚本
可以使用 backtrader/run_test_with_log.py 这个脚本,对比当前分支(origin)和 master 分支上运行这个策略的结果,形成日志,放到 logs,方便后续对比差异。
限制¶
不允许修改测试用例,尤其是测试用例的期望值。
修改过源代码重新测试的时候,最好 pip install -U . 重新安装一下。
现在版本的代码和原始的底层实现的逻辑已经有很大不一样了,每个函数的逻辑可能会存在不一样,不能按照 master 版本的相应函数来实现现在版本的函数。即不允许:restore the master branch’s simpler, declarative implementation