分类
绩效
难度
进阶
适用场景
回测策略设计EA 评估

过拟合

过拟合是把 EA 参数调得过分贴合历史数据,结果策略在回测中表现出色、在未见过的数据上表现很差,因为它利用的是噪声而不是真实的市场规律。

亦称:overfitting, 曲线拟合, 数据挖掘偏差

更新于 · 审阅于

一句话讲清

把规则一路调到与过去贴得极紧,于是它学会的是那段历史的偶然,而不是它的规律。回测越来越好看,策略却越来越差,而报告里没有任何东西能把两者区分开。

为什么重要

过拟合是一种会产出漂亮证据的失效方式,正因如此,它能通过一个差策略过不了的审查。每跑一轮优化,报告出来的结果都会变好,无论策略本身是否变好;只看报告结果的流程,因此根本分辨不出差别。

  • 它解释了最常见的 EA 失望:回测出色,实盘平庸或亏损,却找不出任何 bug。什么都没坏——那次调参量的是样本。
  • 你越用力,它越严重。参数更多、优化轮次更多、候选策略更多,都会一起抬高“胜者是靠贴合噪声取胜”的概率。
  • 从获胜的那次运行里看不出来。把真实优势和拟合优势分开的唯一证据,是调参从未见过的数据上的表现,而这段数据必须在调参开始之前就留出来。

用它验证策略

用在哪里

  • 判断一只 EA 公布的回测是优势的证据,还是调参的证据。
  • 在动手优化之前,决定一个策略最多可以有几个参数。
  • 解读向前推进检验中样本内与样本外结果之间的落差。
  • 解释为什么一个在优化表里排第一的策略,一投入使用就走样。

可靠的结果长什么样

  • 公布的区间包含挑选参数期间未被动过的数据。
  • 策略参数很少,且每一个都对应交易者不引用回测也能解释清楚的东西。
  • 相邻参数值的表现相近。只在某一个设置下才成立的优势,是样本的属性。
  • 同样的设置,在没有被用来挑选它们的品种和时间段上依然有效。
  • 在这一个之前试过多少策略是公开的,因为一次大规模搜索的胜者本来就该凭运气看着不错。

警示信号

  • 精度离谱的参数——37 周期的均线、23.7 点的止损——而如果优势是真的,取整值的表现几乎一样。
  • 多年回测里胜率超过 90 %、或夏普超过 3,却没有任何前推记录。
  • 结果只在挑选参数所用的那一个品种、那一个区间上展示。
  • 绩效曲面上只有一个孤零零的尖峰,而不是一片宽阔的高原。
  • 完全没提在公布这一版之前测试过多少个变体。

回测与实盘的差异

  • 实盘账户是第一次真正意义上的样本外检验,所以下滑是立刻出现而不是逐渐出现。
  • 被拟合的策略通常滑向“保本减去成本”,而不是戏剧性的巨亏,这让人很容易把它解释成一段行情不好。
  • 要量的是样本内与实盘之间落差的大小。任何策略出现温和回落都很正常;跌穿保本线才是那个签名。
  • 下滑之后重新优化会让回测恢复好看,并把整个循环再走一遍——这正是流程自己造出来的陷阱。

推荐的验证方法

  1. 1在动任何一个参数之前先留出样本外区间,并且只在最后看它一次。
  2. 2宁可要少而含义站得住的参数,也不要多而结果更好的参数。
  3. 3看邻域而不是看峰顶:取一片宽高原的中间,而不是一根尖刺的顶端。
  4. 4把定稿的设置原封不动地拿到其他品种、其他时间段上重测。
  5. 5当策略确实需要随时间重新拟合时,就用向前推进分析,让重新拟合本身也成为被检验的一部分。

示例

优化器给出一个策略最好的十组参数。被公布的是最上面那一行;而真正说明优势是否为真的,是它周围那张表的形状。

样本内最佳设置(周期 37)
PF 2.41
相邻设置(周期 35–39)
PF 0.94–1.06
挪一格就把结果毁掉——那个峰是尖刺,不是高原。
同样的设置,未被动过的样本外区间
PF 0.88

真实的优势会随着参数远离最优点而平缓变弱。被拟合的优势则从悬崖上掉下去,而这道悬崖在花掉任何一份样本外数据之前就已经看得见。

计算 样本内 2.41 → 样本外 0.88,而相邻设置都停在保本附近

结果 那个 2.41 是区间的属性,不是规则的属性

怎么读这个数字

过拟合是从产出结果的流程去诊断的,而不是从结果本身。要问:调了什么、在什么数据上调、又留下了什么。

区间 含义
一个区间,全部参数都优化,什么都没留 这份报告对未来没有证据价值。它描述的是规则能被掰到多贴合一个样本。
公布了样本外区间,但每次调整后又拿来用 预留已经花掉了。一旦它的结果反过来喂给调参,它也变成了样本内。
一个未被动过的样本外区间,只看了一次 最低标准。要解读落差,而不是解读水平。
带宽阔参数高原、并做跨品种校验的向前推进检验 实盘之前能拿到的最强证据,因为重新拟合这件事本身被检验过了。
  • 要数试过的策略数量,而不只是参数数量。试两百个想法再公布最好的那个,是一次胜者本就该看着不错的搜索。
  • 把公布的参数取整再跑一遍。如果结果大体还在,那份精度只是装饰;如果结果垮掉,那份精度本身就是优势。
  • 去评判参数曲面,而不是峰顶。能迁移到未见数据上的属性是宽度。

mt5depot 的列表会写明数据区间、测试模型和成交笔数,读者因此可以问出上面这些问题,而不是直接相信那条曲线。

常见误区

重复使用样本外区间

每当预留区间里的一个结果又指导了一次调整,那段区间就成了训练数据的一部分。几轮之后已经没有样本外了,而流程感觉更严谨,证明的东西却更少。

把高夏普或高胜率当成没有过拟合的证据

那恰恰是拟合会吹大的数字。零售 EA 的样本内夏普超过 3,更可能是症状而不是安慰。

以为参数少策略就安全

参数数量是一条路径,策略筛选是另一条。在同一个区间里从两百个简单策略中挑出最好的一个,对样本的拟合效果,和调一个复杂策略一样有效。

实盘表现让人失望时就重新优化

这会让回测恢复好看,并把失败重演一次,因为新的拟合出自和旧拟合完全相同的流程。要先回答的问题是:原来那个优势有没有哪怕一次是样本外的。

深入说明

十四份公开回测能定下什么,又定不下什么

这里公开的 14 只 EA数值
样本内盈利因子1.27–1.52
盈利因子低于 1.00 的条目0
报告了样本外区块的11
样本外收益率−0.57 % 至 +3.01 %
亏损的样本外区块2
在真金白银账户上验证过的运行0

先读最后一行,再读第一行。滚动回测跑的仍然是有人可能早就看过的历史,所以上面没有任何一项是“能定下什么”的那种样本外——而且有三只 EA 公布了预留区间的起始日期,此后再没有发布过任何结果,从内部看,报告偏差正是这个样子。

弱点在规模,不在正负号。这里样本内记录的中位数是 362 笔已平仓交易,预留区块的中位数只有 21 笔。这么短的一段跑不出优势与一个平静季度的区别,所以那些小幅的负数(−0.57 %、−0.47 %)并不比正数带有更多判决。

策略测试器的 Forward 下拉框(No、1/2、1/3、1/4、Custom)会替你把区间切开。它拦不住你在每一轮优化之后又去看一遍前半段,而正是这一次次重看把它花掉了。把 Forward 设为 Custom,填上你停止查看的那个日期——上面十个区块用的是 2026-04-01——预留区间值多少,就取决于落进去多少:Cairn 有 142 笔,其次最大的是 40 笔,另有两只只有个位数。

常见问题

买之前怎么判断一只 EA 是不是过拟合了?
看流程,别看曲线。要问:挑参数期间是否留出过某段区间;设置是取整的还是精确得不合常理;相邻的参数值表现是否相近;这套规则有没有在并非用来挑选它的品种上被测过。在这里答不上来的问题,本身就是答案。
少用参数能防住过拟合吗?
有帮助,但防不住。在同一批数据上从众多候选中挑出表现最好的那个策略,即使每个候选都很简单,也仍然是在拟合这批数据;所以试过多少个想法,和其中任何一个有多少个旋钮同样重要。
优化总是坏事吗?
不是——策略总得有一套设置,从历史里挑选它们是合理的。把优化和过拟合分开的,是有没有留出什么来对照这个选择,以及选中的设置是落在一片宽阔高原上,还是落在一根尖刺上。