前推分析:切片、训练比例与配置选择
前推分析把回测周期切成若干片,在每片的训练部分挑出最佳参数配置,再在它从未见过的测试部分上评估,最后报告拼接起来的样本外结果,并给出效率数值和去膨胀 Sharpe。
Senzoukria · 文档 · 更新于 2026 年 9 月
位置
- 位置
- 回放 → 准备 → 自动回测 → 勾选“前推 —— 寻找最佳配置”
- 默认值
- 切片 4,训练比例 0.7,选择标准 SQN
- 组合数
- 最多 400;一个配置至少要有 10 笔交易才可被选中
- 最少数据量
- 每一片至少需要 100 根训练 K 线和 50 根测试 K 线
它做什么
测试三十种配置再留下最好的那一个,衡量的是运气。前推分析把选择与衡量分开:参数在每一片的前段被选定,再在该片的后段上评估,而后段没有参与过任何选择。所显示的结果,正是这些从未被看过的片段的拼接,也是该策略真正会带来的结果。
实现(lib/replay/autoBacktest.ts,runWalkForward):K 线被切成等长的片;在每一片内,前 trainRatio 比例的 K 线是训练窗口,其余是测试窗口。扫描维度的每一种组合都在训练窗口上运行,按选择标准打分,最佳者在测试窗口上运行一次。所有切片的样本外交易被拼接起来,综合统计即在其上计算。进度显示为“第 n 片 · 训练”,随后是“第 n 片 · 测试”。
设置
| 设置 | 默认值 | 它改变什么 |
|---|---|---|
| 前推开关 | 关闭 | 显示下方设置,并把运行按钮改为“运行前推分析”。 |
| 切片数 | 4 | 折数,2 到 12。切片越多训练窗口越短;如果划分后训练 K 线少于 100 根或测试 K 线少于 50 根,运行会被拒绝。 |
| 训练比例 | 0.7 | 每一片中用于选择参数的比例,0.5 到 0.9,步长 0.05。 |
| 选择标准 | SQN(质量,计入交易笔数) | 还可选盈利因子、每笔期望值或每笔 Sharpe。交易少于 10 笔的配置得分为负无穷。 |
| 要扫描的参数 | 从脚本的 params 读取的维度,否则为 lookback 10、20、40 / stopTicks 20、40、80 / targetTicks 40、80、160 | 每个维度用逗号分隔取值;“探索所有可读参数”会围绕脚本默认值设置最多五个维度;“重新读取脚本”可恢复它们。 |
| 组合数提示行 | — | “{n} 种组合 × {folds} 片 —— 约 {dur}”,或“组合过多(上限 400)”。 |
解读结果
- 前推效率 = 各切片样本外平均期望值除以样本内平均期望值。达到 70 % 或以上:“策略在其自身数据之外依然成立”;从 40 % 起:“它在样本外丢失了相当一部分优势”;再低:“结果的大部分来自过拟合”。低于 50 % 时该行会被高亮为不良。
- 去膨胀 Sharpe:把样本外的每笔 Sharpe 与仅凭选择在所试配置数量下就能产生的阈值相比较。结论:稳健(经得起修正)、脆弱(配置数量解释了其中相当一部分)、噪声(与随机抽取中的最佳者无法区分)。
- 折数表格:切片、训练、真实测试、配置,以便你看出所选配置是否在各片之间跳变。
- 图表:样本内与样本外权益对比(优化器看到的那条曲线用虚线),以及把所选配置与其网格邻居相比较的参数稳定性(平台、斜坡或尖峰)。
- 记入性能面板的,是综合的样本外统计数据。
局限与陷阱
每增加一种组合,就是在同一批数据上多抽一次;超过某个点,你衡量的就是一次过拟合的运气,这正是上限为 400、并且助手被要求把扫描控制在 100 以内的原因。在一个月的 15 分钟 K 线上扫描五个维度,会产出一个毫无意义的胜者。
切片按 K 线数量划分,而不是按日历;一片可能横跨一次市场状态的转变。扫描会把每种组合当作一次完整回测来跑,因此运行时间随 组合数 × 切片数 线性增长,长周期的 1 分钟 K 线需要数小时。前推分析使用与普通回测相同的成交规则和成本,并且绝不下达任何订单。
相关页面
其他语言版本
常见问题
- 前推效率 45 % 是什么意思?
- 平均而言,样本外期望值只有样本内的 45 %:策略在未曾见过的数据上丢失了相当一部分优势。低于 50 % 时面板会高亮,助手也被要求直说结果的大部分来自曲线拟合。
- 为什么我设置的切片数被拒绝?
- 每一片必须保留至少 100 根训练 K 线和 50 根测试 K 线。周期过短或切片过多时无法满足;请减少切片数或延长周期。
- 我该按哪个标准来选择?
- 默认是 SQN,因为它把交易笔数纳入了评分。此外还有盈利因子、每笔期望值和每笔 Sharpe;无论选哪一个,交易少于 10 笔的配置永远不会被选中。