前推分析

前推分析(walk-forward analysis)是一种回测流程:在训练窗口上选定参数,把参数冻结,然后在紧随其后、完全没有参与选择的测试窗口上做评估,再把两个窗口按时间向前推进,如此重复。把各个测试窗口的结果拼接起来,才是这套策略用「当时真能知道的参数」所能得到的回报。

Senzoukria · 术语表 · 更新于 2026 年 9 月


流程一步一步走

  • 事先固定训练长度、测试长度、参数网格和选择规则(例如:扣除成本后净结果最高)。
  • 在第一个训练窗口上跑完整个网格,按选择规则挑出一组配置。
  • 把这组配置冻结,跑在紧接其后的那个测试窗口上。
  • 把两个窗口一起向前滑动,重复上述步骤,直到数据用尽。
  • 报告各测试窗口的拼接结果,每一段都注明为它选出的配置,并包含成本和亏损的交易。

为什么它比一次性优化更扎实

在整段历史上做一次优化,挑出来的是最贴合这段历史的那组配置,而它的资金曲线又恰恰是在用来挑选它的同一批数据上衡量的。前推分析把这两件事分开:选择发生在过去,衡量发生在相对于它而言的未来。只拟合了噪声的参数往往会在某一片上被选中,然后在下一片上失效,而这种失效会出现在拼接后的结果里,而不是被藏起来。

把各片的样本内与样本外表现放在一起比较,常被概括为前推效率(walk-forward efficiency):训练窗口上的成绩有多少在测试窗口里活了下来。它是一项诊断指标,不是一张合格证。

会塑造结果的那些选择

流程本身的参数
选择项取舍
切片数量切片越多,样本外窗口越多,但每段训练期越短
训练占比占比越大,拟合越好而检验越少;占比越小,检验越多但拟合基础更薄
锚定训练 对 滚动训练锚定窗口从固定起点不断增长;滚动窗口长度固定,会遗忘旧数据
选择规则必须在开跑之前定好;看到结果之后再改,就重新引入了选择偏差

在 Senzoukria 里

「回放」界面上的自动回测面板有一个开关,名为「前推分析——找出最优配置」。它的提示写明了方法:参数在每一片的前段上选出,然后在后段上评估,而后段完全没有参与选择;展示出来的结果,是这些从未被看过的片段的拼接。切片数量和训练占比在面板里设置,「待扫描参数」定义网格;在你按下「运行前推分析」之前,面板会估算组合数乘以切片数,以及预计耗时。

报告会逐片列出训练期、真实测试期和被选中的配置,并给出一个前推效率数值,配一句话的解读:策略在自己的数据之外依然成立、在样本外损失了相当一部分优势,或者结果大部分来自过拟合。另有一张「样本内 对 样本外」图,把优化器看到的曲线和你实际会拿到的曲线画在一起。

常见错误

  • 不停地换选择规则重跑前推,直到效率看起来漂亮为止。
  • 把样本内曲线当成结果来读。
  • 切片切得太短,以至于每个测试窗口里只剩寥寥几笔交易。
  • 在已经根据最后一个测试窗口调过参数之后,还把它当成未被触碰的窗口。

其他语言版本

常见问题

前推分析和训练/测试切分有什么不同?
一次性切分只留出一段靠后的时期,而且只留一次。前推分析沿着历史把这种切分重复很多次,于是策略会在多个它从未见过的时期上被评估,每一段都用紧邻其前选出的参数。这样能从同一批数据里得到更多样本外证据,也能看出被选中的参数是否在各片之间漂移。
什么是前推效率?
它把测试窗口上取得的表现,和挑选参数的那些训练窗口上取得的表现相比较。样本外结果保留了大部分样本内结果的策略,被称为站得住;保留得很少的,基本是在拟合噪声。这个数值取决于切片方式和选择规则,所以必须和它们一起读。
前推分析能防止过拟合吗?
它是把过拟合暴露出来,而不是防止它。如果分析者在看到样本外结果之后还不断修改网格、切片或选择规则,那些窗口就换了个名字变成了训练数据。这套流程之所以有效,前提是它自身的设置在开跑之前就已固定,并且每一次运行都有记录。

继续阅读