Skip to content

回测

当前回测模块已经不只是占位文件,已经提供了一个最小可运行的执行核心。

建议优先关注:

  • zelqor.backtest.engine.run_precomputed_pool_backtest
  • zelqor.backtest.engine.create_backtest_state
  • zelqor.backtest.engine.step_backtest_day
  • zelqor.backtest.engine.finalize_backtest_result
  • zelqor.backtest.scheduler.PrecomputedPoolBacktestInput
  • zelqor.backtest.scheduler.BacktestState
  • zelqor.backtest.scheduler.BacktestStepConfig
  • zelqor.backtest.scheduler.DayStepResult
  • zelqor.backtest.scheduler.DayCallbackPayload
  • zelqor.api.run_precomputed_backtest
  • zelqor.api.run_selector_backtest
  • zelqor.api.run_stateful_step_backtest
  • zelqor.api.run_backtest
  • zelqor.api.run_backtest_safe
  • zelqor.api.run_backtest_task
  • zelqor.strategy.selector.build_daily_pools

这条链路当前适合“库模式”使用,也就是:

  • 策略脚本自己 import zelqor
  • 策略脚本自己生成 daily_pools
  • 再把数据交给回测执行核心

仓库内已经提供了一个对应的最小示例:

  • examples/run_precomputed_backtest.py
  • examples/run_step_backtest.py
  • examples/run_selector_backtest.py
  • examples/loadable_selector_strategy.py
  • examples/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
  • 回测开始 / 结束
  • 每个交易日的推进
  • 买入 / 卖出成交

当前回测内核支持的成交时点包括:

  • open
  • next_open
  • high
  • high_limit
  • limit_up
  • average
  • avg
  • vwap
  • 默认 close

其中平均价口径为:

  • amount / volume
  • 如果 volume <= 0,则自动回退到 close

run_backtest(...) 现在还支持通过 loader 直接运行策略文件或模块:

  • strategy.type == "python_file"
  • strategy.type == "python_module"

并支持通过 strategy.kind 显式声明:

  • auto
  • selector
  • stateful_step

最小可加载示例包括:

  • examples/loadable_selector_strategy.py
  • examples/loadable_stateful_step_strategy.py
  • zelqor.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)

推进单个交易日,并原地更新回测状态。