多阶段回测验证框架——在提交昂贵的完整周期回测前,使用短期窗口(冒烟/压力/中等/完整)快速筛选,节省...
渐进验证器 : 停止在从开始就注定要进行的反向测试上浪费3小时是一项面向实际任务的技能,主要用于这种技能执行一个多阶段验证管道, 15分钟内消除不良策略。它将相关步骤、工具调用和结果整理方式集中到统一流程中,帮助使用者更快完成目标并减少重复操作。
实际使用前应先确认任务范围、数据来源、运行环境、必要权限和关键参数,再依据技能说明逐步执行;若输入条件不完整,应先补齐信息或采用保守配置,避免因错误假设导致结果偏离需求。
执行过程中需要关注工具调用是否成功、接口或依赖是否可用、输出格式是否符合预期,并对异常提示、缺失字段和边界情况进行处理;涉及批量任务时,还应保存进度,避免中断后重复操作。
停止在注定失败的回测上浪费 3 小时。本技能实现了一个多阶段验证流水线,可在 15 分钟内淘汰无效策略,而非耗时 3 小时。
15 分钟 30 分钟 1 小时 3 小时
+-----------+ +-----------+ +-----------+ +-----------+
| SMOKE | 通过 | STRESS | 通过 | MEDIUM | 通过 | FULL |
| 3 个月 |------>| 5 个月 |------>| 18 个月 |------>| 3 年 |
| 最大回撤 < 50% | | 最大回撤 < 45% | | 最大回撤 < 42% | | 最大回撤 < 40% |
+-----------+ +-----------+ +-----------+ +-----------+
| 失败 | 失败 | 失败 | 失败
v v v v
拒绝 拒绝 拒绝 拒绝
(损失 15 分钟) (损失 45 分钟) (损失 1.5 小时) (损失 3 小时以上)
无渐进式验证时:每个失败策略均耗费 3 小时。 启用渐进式验证后:绝大多数失败可在 15–45 分钟内捕获。
在配置中定义验证窗口:
BACKTEST_WINDOWS = {
"smoke_test": {
"start": "2024-01-01",
"end": "2024-03-31",
"max_dd": 0.50,
"expected_time": "15-20 min",
"purpose": "Eliminate garbage fast",
},
"stress_test": {
"start": "2024-02-01",
"end": "2024-06-30",
"max_dd": 0.45,
"expected_time": "25-30 min",
"purpose": "Survive worst conditions",
},
"medium": {
"start": "2024-01-01",
"end": "2025-06-30",
"max_dd": 0.42,
"expected_time": "45-60 min",
"purpose": "Bull/bear transition stability",
},
"full": {
"start": "2023-01-01",
"end": "2026-01-31",
"max_dd": 0.40,
"expected_time": "2-3 hours",
"purpose": "Final benchmark acceptance",
},
}
前提条件:本技能协调各验证阶段;实际回测提交由 backtest-poller 技能(
cli.py)处理。请确保该技能已安装并位于系统 PATH 中,再运行以下命令。
# 第一阶段:冒烟测试(Smoke) # (调用 backtest-poller 技能的 cli.py) python3 ../backtest-poller/cli.py submit --main-file strategy.py --name "M31_smoke" # 查询下一步应执行的阶段: python3 validator.py next M31 strategy.py # 冒烟测试完成后记录结果: python3 validator.py record M31 smoke_test --status passed --drawdown 0.32 --sharpe 2.1 # 第二阶段:压力测试(Stress)——仅当冒烟测试通过后执行 python3 ../backtest-poller/cli.py submit --main-file strategy.py --name "M31_stress" python3 validator.py record M31 stress_test --status passed --drawdown 0.38 --sharpe 2.0 # 第三阶段:中等测试(Medium)——仅当压力测试通过后执行 python3 ../backtest-poller/cli.py submit --main-file strategy.py --name "M31_medium" python3 validator.py record M31 medium --status passed --drawdown 0.35 --sharpe 2.3 # 第四阶段:全周期测试(Full)——仅当中等测试通过后执行 python3 ../backtest-poller/cli.py submit --main-file strategy.py --name "M31_full" python3 validator.py record M31 full --status passed --drawdown 0.30 --sharpe 2.5 --profit 3.2
并非所有修改都需从冒烟测试开始:
| 变更类型 | 起始阶段 |
|---|---|
| 入场逻辑变更 | 冒烟测试(Stage 1) |
| 结构性变更(仓位管理、生存机制) | 冒烟测试(Stage 1) |
| 仅盈利管理逻辑变更 | 中等测试(Stage 3) |
| 日期或参数微调 | 与此前相同阶段 |
本技能与 backtest-poller 技能(独立包)协同工作。backtest-poller 的早停功能实时监控最大回撤,若在任务完成进度达 20% 后即突破阈值,则立即终止该回测任务 —— 无需等待注定失败的完整执行。本验证器在本地追踪各阶段的通过/失败状态,因此您始终清楚应从何处恢复验证流程。
依赖项:请安装 backtest-poller 技能以启用提交(submit)和早停(early-stop)功能。本验证器自身不执行回测提交操作。
测试 5 个策略变体,其中 3 个为无效策略:
| 方法 | 耗时 |
|---|---|
| 仅执行全周期回测 | 5 × 3 小时 = 15 小时 |
| 采用渐进式验证 | 3 × 15 分钟 + 1 × 45 分钟 + 1 × 3 小时 = 约 4.5 小时 |
节省:约 70% 的计算时间。
max_dd 将破坏渐进式验证的保障机制。所有阈值须在验证启动前确定。python3 validator.py record --status passed|failed 持久化保存结果。未记录的结果将导致 next 和 status 命令失效。相关专题
热门下载
相关下载
精品课程
共6课时 | 54.7万人学习
共89课时 | 134.1万人学习
共49课时 | 82.6万人学习
最新文章