重复使用样本外区间
每当预留区间里的一个结果又指导了一次调整,那段区间就成了训练数据的一部分。几轮之后已经没有样本外了,而流程感觉更严谨,证明的东西却更少。
过拟合是把 EA 参数调得过分贴合历史数据,结果策略在回测中表现出色、在未见过的数据上表现很差,因为它利用的是噪声而不是真实的市场规律。
亦称:overfitting, 曲线拟合, 数据挖掘偏差
更新于 · 审阅于
把规则一路调到与过去贴得极紧,于是它学会的是那段历史的偶然,而不是它的规律。回测越来越好看,策略却越来越差,而报告里没有任何东西能把两者区分开。
过拟合是一种会产出漂亮证据的失效方式,正因如此,它能通过一个差策略过不了的审查。每跑一轮优化,报告出来的结果都会变好,无论策略本身是否变好;只看报告结果的流程,因此根本分辨不出差别。
优化器给出一个策略最好的十组参数。被公布的是最上面那一行;而真正说明优势是否为真的,是它周围那张表的形状。
真实的优势会随着参数远离最优点而平缓变弱。被拟合的优势则从悬崖上掉下去,而这道悬崖在花掉任何一份样本外数据之前就已经看得见。
计算 样本内 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 笔,另有两只只有个位数。