回测
当前回测模块已经不只是占位文件,已经提供了一个最小可运行的执行核心。
建议优先关注:
zelqor.backtest.engine.run_precomputed_pool_backtestzelqor.backtest.engine.create_backtest_statezelqor.backtest.engine.step_backtest_dayzelqor.backtest.engine.finalize_backtest_resultzelqor.backtest.scheduler.PrecomputedPoolBacktestInputzelqor.backtest.scheduler.BacktestStatezelqor.backtest.scheduler.BacktestStepConfigzelqor.backtest.scheduler.DayStepResultzelqor.backtest.scheduler.DayCallbackPayloadzelqor.api.run_precomputed_backtestzelqor.api.run_selector_backtestzelqor.api.run_stateful_step_backtestzelqor.api.run_backtestzelqor.api.run_backtest_safezelqor.api.run_backtest_taskzelqor.strategy.selector.build_daily_pools
这条链路当前适合“库模式”使用,也就是:
- 策略脚本自己 import
zelqor - 策略脚本自己生成
daily_pools - 再把数据交给回测执行核心
仓库内已经提供了一个对应的最小示例:
examples/run_precomputed_backtest.pyexamples/run_step_backtest.pyexamples/run_selector_backtest.pyexamples/loadable_selector_strategy.pyexamples/loadable_stateful_step_strategy.py
这个示例会:
- 从 ClickHouse 读取一小段交易日
- 从第一天的
universe中取前两只股票 - 构造最小
daily_pools - 调用
run_precomputed_backtest(...) - 输出 summary、成交数量和最后一天权益
selector 示例则会:
- 在每个交易日执行
selector.select(...) - 构造标准
daily_pools - 调用
run_selector_backtest(...) - 通过
on_day逐日输出股票池、买卖和权益 - 输出 summary、第一天股票池和第一笔成交
run_step_backtest.py 则会:
- 显式创建
BacktestState - 显式配置
BacktestStepConfig - 按交易日调用
step_backtest_day(...) - 最后调用
finalize_backtest_result(...)
当前最小回测引擎已经支持逐日回调:
run_precomputed_backtest(..., on_day=...)run_selector_backtest(..., on_day=...)
回调载荷类型为:
DayCallbackPayload
另外,回测链路现在也会输出关键节点日志,包括:
- selector 构建
daily_pools - 回测开始 / 结束
- 每个交易日的推进
- 买入 / 卖出成交
当前回测内核支持的成交时点包括:
opennext_openhighhigh_limitlimit_upaverageavgvwap- 默认
close
其中平均价口径为:
amount / volume- 如果
volume <= 0,则自动回退到close
run_backtest(...) 现在还支持通过 loader 直接运行策略文件或模块:
strategy.type == "python_file"strategy.type == "python_module"
并支持通过 strategy.kind 显式声明:
autoselectorstateful_step
最小可加载示例包括:
examples/loadable_selector_strategy.pyexamples/loadable_stateful_step_strategy.pyzelqor.strategy.examples.loadable_selector_module
如果宿主更适合消费“成功结果或错误结果”的统一结构,而不想自己捕获异常,可以使用:
run_backtest_safe(...)
如果宿主更适合消费固定 envelope 结构,而不想自己判断联合类型,可以使用:
run_backtest_task(...)
zelqor.backtest
回测子系统导出。
BacktestState
dataclass
回测运行中的显式状态对象。
BacktestStepConfig
dataclass
逐日 step 执行配置。
DayStepResult
dataclass
单个交易日推进后的结果摘要。
PrecomputedPoolBacktestInput
dataclass
最小可运行回测执行输入。
create_backtest_state(initial_cash, *, metadata=None)
创建逐日推进回测所需的初始状态。
finalize_backtest_result(*, state, initial_cash, provider_name, strategy_type)
把逐日推进 state 汇总成最终回测结果。
run_backtest_engine(request)
兼容当前 request 入口,仍返回稳定占位结果。
run_precomputed_pool_backtest(input_data)
执行基于预先给定股票池的最小回测。
step_backtest_day(*, state, trade_date, pool_codes, provider, config, date_to_index, trade_dates, on_day=None)
推进单个交易日,并原地更新回测状态。