问题描述
调用 strategy.backtest() 完成后,Evaluator.report() 内部调用 self.source.datas(位于 quool/sources/duck.py:202),但 DuckPQSource 未实现该属性,导致 KeyError:
File "quool/evaluator.py", line 70, in report
data = self.source.datas
File "quool/sources/duck.py", line 202, in datas
.set_index([self.datetime_col, self.code_col])
KeyError: "None of ['time', 'code'] are in the columns"
环境
- quool 版本:7.0.17
- DuckPQSource 初始化参数:
source = DuckPQSource(
source=db,
begin=BEGIN,
end=END,
datetime_col="time",
code_col="code",
bar={...}
)
复现步骤
- 使用 DuckPQSource 初始化回测
- 运行
strategy.backtest(history=True)
- 回测正常完成,但 evaluate 阶段报错
预期行为
Evaluator.report() 应能正常工作,不依赖未实现的 source.datas 属性。
可能的修复方向
- 在 DuckPQSource 中实现
datas 属性,返回历史全量 OHLCV DataFrame(按 time + code 索引)
- 或者在 Evaluator.report 中添加兼容处理,duck.py 的
_data 是每次 update 后的快照,可能需要累积到列表中
备注
回测逻辑本身运行正常(44 根 K 线全部处理),问题仅出现在结果评估阶段。
问题描述
调用
strategy.backtest()完成后,Evaluator.report()内部调用self.source.datas(位于quool/sources/duck.py:202),但DuckPQSource未实现该属性,导致 KeyError:环境
复现步骤
strategy.backtest(history=True)预期行为
Evaluator.report()应能正常工作,不依赖未实现的source.datas属性。可能的修复方向
datas属性,返回历史全量 OHLCV DataFrame(按 time + code 索引)_data是每次 update 后的快照,可能需要累积到列表中备注
回测逻辑本身运行正常(44 根 K 线全部处理),问题仅出现在结果评估阶段。