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。
建议先看三件事:
passed_quality_gate_count是否大于 0。quality_gate_reason_counts中最大阻断项是什么。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/6passed - 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/18passed - 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 定义,检查策略抽象是否偏离书本。