Files
ai-exchange/docs/AI_ICT_批量历史回测验证_S16_2026-05-21_v1.md

6.0 KiB

AI_ICT 批量历史回测验证 S16 2026-05-21 v1

目标

把 Strategy Backtest 从“能查看最近回测结果”推进到“可以批量跑历史验证矩阵”。R2 继续由 runtime 后台等待真实 executable candidate;开发主线转向用历史数据验证 ICT setup 是否有优势。

当前完成度判断

在 S16 之前,回测能力不能算“大量历史回测完成”。当时已经完成的是:

  • Strategy Backtest 只读页面 /trading/backtests。
  • 单次回测脚本 scripts/run_backtest.py。
  • 最近回测、质量门、样本、R 指标、失败原因、最近 run 展示。

S16 补齐的是批量历史验证入口:一次性按 instrument / subject / timeframe / session / candidate model 组合跑多个回测 run,并把所有 run 写回现有 backtest_runs / backtest_results,用于快速判断哪些 ICT setup 不值得盘中关注。

仍未把它夸大成完整量化研究平台:本阶段不做参数自动寻优、不做外部数据商接入、不做交易执行、不把未过质量门的历史统计提升为实盘信号。

本阶段仍然只读:

  • 不下单
  • 不提交 OKX
  • 不改变 execution_allowed
  • 不改变 decision_support_ready
  • 不改变 real_live_ready
  • 不伪造 paper / execution / weekly review 样本

新增入口

python scripts/run_backtest_batch.py

默认行为:

  • instrument: 1
  • subject: plan_replay,signal
  • mode: replay_no_lookahead
  • limit: 1000
  • session groups: ALL;LONDON;NY_AM;NY_PM;ASIA
  • 每个 run 写入现有 backtest_runs / backtest_results
  • 输出批量质量门汇总

常用参数

通过环境变量控制:

BACKTEST_BATCH_OUTPUT_JSON=1
BACKTEST_BATCH_ID=bt-ict-mainline-001
BACKTEST_BATCH_INSTRUMENT_IDS=1,2
BACKTEST_BATCH_SUBJECT_TYPES=plan_replay,signal
BACKTEST_BATCH_MODES=replay_no_lookahead
BACKTEST_BATCH_LIMIT=2000
BACKTEST_BATCH_SESSION_GROUPS=ALL;LONDON;NY_AM;NY_PM;ASIA
BACKTEST_BATCH_TIMEFRAME_SETS=1m/1m/1m;15m/5m/1m
python scripts/run_backtest_batch.py

PowerShell 示例:

$env:BACKTEST_BATCH_OUTPUT_JSON='1'
$env:BACKTEST_BATCH_ID='bt-ict-mainline-001'
$env:BACKTEST_BATCH_LIMIT='2000'
$env:BACKTEST_BATCH_SUBJECT_TYPES='plan_replay,signal'
$env:BACKTEST_BATCH_SESSION_GROUPS='ALL;LONDON;NY_AM;NY_PM;ASIA'
$env:BACKTEST_BATCH_TIMEFRAME_SETS='1m/1m/1m;15m/5m/1m'
.venv\Scripts\python.exe scripts\run_backtest_batch.py

质量门参数沿用单次回测:

BACKTEST_MIN_TOTAL_SIGNALS=100
BACKTEST_MIN_EXECUTED_SIGNALS=30
BACKTEST_MIN_EXPECTANCY_R=0
BACKTEST_MIN_PROFIT_FACTOR_R=1.2
BACKTEST_MAX_DRAWDOWN_R=10
BACKTEST_MAX_CONSECUTIVE_LOSSES=5

输出如何读

关键字段:

  • run_count: 本批次实际跑了多少个回测 run。
  • passed_quality_gate_count: 通过质量门的 run 数。
  • blocked_quality_gate_count: 被质量门阻断的 run 数。
  • total_result_count: 总历史样本数。
  • total_executed_signals: 总执行样本数。
  • quality_gate_reason_counts: 质量门失败原因聚合。
  • failure_reason_counts: setup / replay 失败原因聚合。
  • aggregate_by_subject: plan replay 与 signal 回测分层。
  • aggregate_by_session_group: session 分层。
  • top_runs_by_expectancy: 按 executed expectancy 排序的候选 run。

建议先看三件事:

  1. passed_quality_gate_count 是否大于 0。
  2. quality_gate_reason_counts 中最大阻断项是什么。
  3. aggregate_by_session_group 哪些 session 的样本和执行结果明显更差。

与 Trader Cockpit 的关系

批量回测不是买卖信号。它只回答:

这个 ICT setup 在历史样本里是否有足够证据,值得进入盘中观察?

如果样本太小、expectancy 不足、profit factor 不足、回撤过大、连续亏损过高,Trader Cockpit 必须继续降级为 Observe Only 或 Do Not Use。

S16 闭环标准

  • 批量 runner 可本地测试。
  • 远端可执行真实批量回测。
  • 新 run 写入 backtest_runs,可被 /trading/backtests 读取。
  • 输出清楚显示哪些 setup/session 不可信。
  • 不影响 R2 实盘监控后台等待。

首批远端验证结果

2026-05-21 首批远端 smoke 验证:

  • batch id: S16-remote-20260521-a
  • run ids: 490-495
  • run count: 6
  • total result count: 79
  • total executed signals: 66
  • quality gate: 0/6 passed
  • main quality blockers: expectancy_below_threshold=6, profit_factor_below_threshold=6, sample_size_too_small=5, executed_sample_too_small=5
  • main failure reasons: stopped_out=52, outside_session_window=42, no_future_candles=12, same_candle_entry_exit_ambiguous=10

结论:批量回测能力已经跑通并落库,但当前策略样本不支持进入 Trader Cockpit Review Now。这正是回测应发挥的作用:先把历史上没有优势的 setup 拦住,而不是等盘中再靠主观判断。

同日扩大一轮 timeframe/session 矩阵:

  • batch id: S16-remote-20260521-b
  • run ids: 496-513
  • run count: 18
  • total result count: 211
  • total executed signals: 156
  • quality gate: 0/18 passed
  • timeframe sets: 1m/1m/1m, 15m/5m/1m, 1h/15m/5m
  • session groups: ALL, LONDON, NY_AM, NY_PM, ASIA
  • main quality blockers: expectancy_below_threshold=18, profit_factor_below_threshold=18, executed_sample_too_small=16, sample_size_too_small=15
  • main failure reasons: stopped_out=124, outside_session_window=126, no_future_candles=54, same_candle_entry_exit_ambiguous=30

扩大矩阵后的结论更明确:当前抽象出来的 setup 在现有历史样本里没有优势,必须继续停留在 study / observe-only,不能进入实盘 Review Now。

下一步

S16 之后,主线不应该继续等待 R2。应优先用批量回测积累历史证据:

  • 先跑 BTC/ETH/SOL 的同一套 session/timeframe 矩阵。
  • 再对通过质量门或接近质量门的 setup 做人工复核。
  • 未通过质量门的 setup 不允许进入 Trader Cockpit Review Now。
  • 如果长期没有任何 run 通过质量门,下一步不是实盘试,而是回到《ICT交易全书》的 setup 定义,检查策略抽象是否偏离书本。