过度拟合:如何区分高原与运气好的尖峰
作者 chwoo · 加密货币交易7年。自2026年春起运行自动交易机器人。 · · 更新
一个令人不适的事实:只要测试足够多的参数组合,你 总会 找到一个回测惊艳的。不是因为存在隐藏的宝石,而是因为随机性保证了这一点。有了成百上千种周期、阈值与出场的 组合,某个配置就会恰好躲过每一次暴跌、抓住每一次拉升,纯属巧合。
这就是 过度拟合(曲线拟合) :把历史噪音里的模式当成市场的性质。麻烦在于,那个配置在屏幕上和真货长得一模一样。收益率+400%,无论来自 优势还是来自偶然,都显示为+400%。区分二者只有一个办法,就是 看它的邻居。
尖点与高原
找到一个看起来不错的设置后,把这个值往两边各挪一格再跑一次。如果RSI周期是14,就查12和16;如果阈值是30, 就查25和35。结果只有两种。
- 邻近设置表现相似,那是 高原(plateau) ,策略很可能抓住了市场行为中某种真实的东西,因为真实的效应不会薄如刀刃。
- 往旁边挪一格成绩就崩塌或翻负,那是 尖点(peak) ,你找到的是一次巧合。市场并不在乎你的RSI周期恰好是13。
不要断言,直接跑一遍
我们用本站的引擎做了扫描。对象是新手最先学到的规则:RSI上穿30就做多 。BTC一小时周期,止盈3% / 止损2%,单边手续费0.06%与滑点0.02%计入,杠杆1倍,仓位90%,数据为截至2026年8月31日 的币安K线。先只改RSI周期。
| RSI周期 | ROI | MDD | 交易数 | 夏普 |
|---|---|---|---|---|
| 8 | -80.9% | 87.6% | 1,246 | -0.64 |
| 10 | -86.6% | 91.0% | 1,031 | -0.92 |
| 12 | -85.9% | 90.4% | 849 | -1.01 |
| 14 | -80.9% | 85.2% | 695 | -0.94 |
| 16 | -83.6% | 85.2% | 569 | -1.16 |
| 18 | -75.8% | 78.5% | 472 | -0.99 |
| 20 | -68.0% | 70.5% | 400 | -0.86 |
这里要得到的结论不是「周期20最好」,而是 这既不是高原也不是尖点,整片地形都在水面之下 。无论选哪个值,都会亏掉三分之二以上的本金。如果从这张表里挑出一格宣布「RSI 20最优」,那不是优化,只是 挑了一个没那么糟的亏损。
我们又确认改阈值是否有别。这次把周期固定为14,只动阈值。
| 阈值 | ROI | MDD | 交易数 | 夏普 |
|---|---|---|---|---|
| 20 | -59.3% | 60.7% | 157 | -1.13 |
| 25 | -69.9% | 72.3% | 394 | -0.92 |
| 30 | -80.9% | 85.2% | 695 | -0.94 |
| 35 | -76.6% | 84.9% | 1,014 | -0.64 |
| 40 | -80.1% | 85.8% | 1,246 | -0.62 |
| 45 | -64.6% | 73.4% | 1,339 | -0.32 |
两张表合起来跑了十三个设置,没有一个盈利。走到这一步常见的反应是把格子分得更细:加上周期13、15、17, 加上阈值28、32。这样做下去,最终总会有一格返回正数。而那一刻,正是过度拟合发生的地方。
多重比较的陷阱
把一千枚公平硬币各抛十次,其中总有几枚会出现八次以上正面。指着那几枚说「这枚硬币偏正面」是错的。你不是 找到了一枚特殊的硬币,你只是硬币很多。
参数搜索正是这件事。你不是在检验一个配置,而是同时检验几百个并留下最好的那个。最好配置的成绩按定义是 实力加运气 ,尝试次数越多,运气那一项就越大。所以记录你试过什么、试了几次很重要:第四十次找到的+50%,和第一次就出现 的+50%,不是同一个数字。
改结构,而不是改参数
这些表真正教的不是怎样挑更好的数字,而是要问这条规则为什么会输。RSI上穿30在下跌趋势中也会不断触发, 每次都在接飞刀。那么与其摇参数,不如加一个条件:只在价格位于200 EMA之上时买入。
| 设置 | ROI | MDD | 交易数 | 胜率 |
|---|---|---|---|---|
| 无过滤 | -80.9% | 85.2% | 695 | 38.0% |
| 200EMA之上 | -17.3% | 22.0% | 79 | 38.0% |
同一个指标、同一组数值,结果却完全不同。而且请注意没有变的东西:两行的胜率都是38.0%。 过滤器并没有提高取胜的概率,它只是让策略不去做那些注定会亏的交易。交易从695笔降到79笔,亏损也随之下降。 调参数不会带来这种性质的变化。
不能停在这里。加了过滤器的版本也可能是尖点,所以要用同样的方式检查它的邻居。
| RSI周期 | ROI | MDD | 交易数 |
|---|---|---|---|
| 10 | -26.4% | 34.5% | 198 |
| 12 | -21.2% | 25.9% | 123 |
| 14 | -17.3% | 22.0% | 79 |
| 16 | -23.7% | 24.9% | 37 |
| 18 | -5.4% | 10.0% | 19 |
现在地形平缓了。所有结果落在-5%到-26%之间,往旁边挪一格既不翻负也不崩塌。虽然仍然全部亏损,但亏损保持一致本身就是信息 :它说明这条规则不是运气不好,而是结构上跨不过自己的成本。
警惕样本消失
最后一张表里看起来最好的一格是周期18的-5.4%。但那一格建立在 19笔交易 之上。用十九笔交易算出的收益率是故事,不是统计;前后只要有几笔不同,符号就可能改变。
每加一个条件,入场机会就减少。695笔变成79笔,再拉长周期就变成19笔。所以过滤器不是免费的,它用样本换来 更小的亏损;而样本一薄,剩下的数字就朝偶然靠回去。这也是当策略条件超过四个时,本工具的结果页面会提醒你 的原因。
一个黄金周期并不够
只在2021年上调优的策略只会学到一个教训:逢跌就买。这个教训会在下一个熊市里死去。稳健意味着跨越不同市场 状态生存:上涨的年份、下跌的年份、横盘震荡。这也是本站把结果拆成7年、5年、3年、2年、1年和6个月窗口, 而不是只给一个总数的原因。
上面那个加了过滤器的版本,在覆盖到的8个周期里也只有1个盈利。总亏损收窄到-17%,并不意味着出现了优势。
旋钮越少,越可信
两个参数的策略比六个参数的策略更难过度拟合,因为搜索空间更小。成绩相当时,优先选旋钮更少的那个。并且要求 一个关于 为什么 这个优势应该存在的解释:交易的对手方是谁,他们为什么会持续把钱送出来。没有这个,你手上只剩一条曲线。
实用检查清单
- 检查参数的邻居:要高原,不要尖点。
- 检查每一个周期窗口,而不只是总和。一致性胜过幅度。
- 检查交易数。少于约30笔时,胜率和盈亏比连作为估计值都不可用。
- 在开启手续费和滑点的状态下检查。只在零成本下有效的策略不是策略。
- 在摇参数之前先怀疑结构。一个过滤器带来的改变超过二十个数值。
- 把你测试过的东西写下来。未来的你不会记得那40次失败。
参考资料
- Overfitting — The general statistical problem, of which curve-fitting a strategy is one case.
- Sample size determination