前推分析:切片、训练比例与配置选择

前推分析把回测周期切成若干片,在每片的训练部分挑出最佳参数配置,再在它从未见过的测试部分上评估,最后报告拼接起来的样本外结果,并给出效率数值和去膨胀 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 笔的配置永远不会被选中。