修复交易次数不匹配等问题导致的测试用例通不过¶
背景¶
缺失了 5 笔交易:
根据日志分析,缺失的 5 笔交易是 open 交易,分布在以下日期: 2019-06-18: 110056 2019-09-02: 110048 2022-07-01: 110068 2025-05-06: 110084 2025-10-13: 110081
性能上有一些降低,在后续进行改进优化的时候,尽可能不要降低效率。
backtrader 中访问数据的一些惯例
data = self.datas[0]
data1 = self.datas[1]
# 收盘价序列
close_list = data.close
# 当日价格
close = close_list[0]
# 前一日价格
pre_close = close_list[-1]
# 下个交易日价格
next_close = close_list[1]
# 当前日期
current_date = data.datetime.date(0)
# 前一日时间
pre_date = data.datetime.date(-1)
# 下个交易日时间
next_date = data.datetime.date(1)
```bash
1. 多数据情况下的特殊处理:会获取所有的数据的下一个时间,当移动到下一个时间之后,如果这个数据在下一个交易日没有交易,那么,在系统时间到下个交易日的时候,访问[0]的时候,获取的之前的价格和时间,[1]获取的是下一个有交易的交易日的价格和时间,如果这个数据已经没有交易了,那么,访问[1]就报错,越界
### 核心目标
实现 100%的测试通过率,即 run_tests.bat 运行,没有失败的测试用例
#### 解决方案
1. 失败的原因很可能是 self.next 被更多次调用了,理论上应该调用 1885,但是实际调用了更多次。
2. 尝试修复相关的 bug,尤其是关于 self.next,self.prenext 等导致 bar_num 增加的函数调用。
3. 每次修改过代码之后,运行 run_tests.bat,新的修改代码不能导致新的测试用例失败,否则认为新的代码存在问题,需要返回重做。
4. 最终目标是希望运行 run_tests.bat 的时候,所有的测试用例都能够全部通过,即 100%的通过率。运行详细的结果在 test_results.log 这个日志文件中。
5. 修改的时候不允许修改测试用例,只允许修改源代码。因为测试用例在 master 分支是全部都通过的。
### 修复方法:
1. 每次修改源代码之后,需要先 pip install -U . 安装之后,源代码才能生效。
2. 测试输出显示大量"array index out of range"错误,这个是正常的现象