参数扫描与过拟合:别把历史调到完美
回测报告一漂亮,人就容易兴奋。可历史数据像一张已经公布答案的试卷,你反复改参数,最后当然能把分数调高。问题是,真正上考场时,题目不会按你调过的答案来。这是什么
过拟合验证,就是用样本内外、滚动验证和参数扫描,检查一条策略是不是只适合过去那段历史。说人话,它像给策略做“闭卷考试”:训练时看过的题能做对不稀奇,没看过的题还能不离谱,才值得继续观察。
如果把回测报告比作体检单,过拟合验证就是复查。第一次体检数字好,不代表身体一定没问题;换个时间、换段行情、换一组相近参数再看,才知道是不是偶然撞上了好结果。
入门阶段先记住三件事:
| 方法 | 要解决的问题 | 直观说法 |
|---|---|---|
| 样本内外 | 训练区间好,换区间还行不行 | 不只看做过的题 |
| 滚动验证 | 不同时间段表现是否稳定 | 多换几张试卷 |
| 参数扫描 | 参数稍微变一变,结果会不会塌 | 不靠一个幸运数字 |
经验
过拟合验证不是为了证明策略一定能赚钱,而是为了尽早发现“历史上看起来很好、换个环境就散架”的规则。
为什么历史能被调到很漂亮
做量化的人很容易走进一个坑:先写一条策略,回测不够好;把 MA20 改成 MA18,好一点;再把放量倍数从 1.5 改到 1.7,又好一点;止损线从 8% 改到 6%,曲线更顺了。调着调着,回测报告像被打磨过的简历,缺点越来越少。
但市场不是按简历录取人的。你调出来的那组参数,可能只是刚好适合某一段历史:那段时间趋势多、回撤浅、某几笔交易特别顺。换一段行情,它就可能露出原形。
这就像在饭店试菜。你为了让某一位熟客满意,不断加糖、少盐、换火候,最后那位熟客说好吃;可别的客人一来,可能觉得完全不对味。参数被历史喂得太饱,策略就会只会讨好那段历史。
样本内外:别只看做过的题
最简单的过拟合验证,是把历史切成两段。
样本内,就是你用来调规则和参数的那段数据;样本外,就是先放在旁边不动、最后才拿来检查的那段数据。前者像练习卷,后者像考试卷。
以贵州茅台(600519,白酒行业,上交所主板,2001 年 8 月 27 日上市)作为真实 A 股公司例子;下面数字只是教学样本,不代表真实历史回测结果。
假设你把数据分成两段:
| 区间 | 用途 | 收益 | 最大回撤 | 胜率 | 盈亏比 |
|---|---|---|---|---|---|
| 2018-2021 | 样本内 | 42% | 10% | 52% | 1.8 |
| 2022-2024 | 样本外 | 6% | 24% | 41% | 0.9 |
这份结果就要冷静。样本内看起来很好,样本外收益明显变弱,回撤变深,盈亏比也降到 1 以下。它不一定说明策略彻底没用,但至少说明:这套参数对历史的适配味道太重,不能只拿样本内的漂亮报告说服自己。
风险
方向性做法:调参数只看样本内,最终判断必须看样本外。适用条件是你已经有一条清楚的量化策略规则;反例是把所有历史都拿来反复调,最后还说“回测很稳”;风险是样本外一旦变差,真实交易时很可能比报告难受得多。
滚动验证:多换几张试卷
只切一次样本内外还不够,因为切分点本身也可能碰巧。更稳一点的做法,是做滚动验证:每次用一段较早数据观察规则,再用后一段数据检查表现,然后往前滚动。
比如可以这样看:
| 训练区间 | 检查区间 | 检查区间收益 | 检查区间回撤 |
|---|---|---|---|
| 2017-2019 | 2020 | 12% | 9% |
| 2018-2020 | 2021 | 8% | 11% |
| 2019-2021 | 2022 | -7% | 18% |
| 2020-2022 | 2023 | 5% | 14% |
这张表看的不是“每年都赚”,而是策略有没有明显只靠某一段行情吃饭。如果滚动到某几年就彻底失效,就要追问原因:是行情状态变了,还是规则本身太脆?
老手看滚动验证,不会要求每一格都完美。市场本来就有顺风和逆风。但如果结果像坐过山车:这一段非常好,下一段立刻很差,再下一段又突然爆发,就要怀疑它是不是靠偶然。
参数扫描:别迷信一个幸运数字
参数扫描,就是把相近参数都跑一遍,看看结果是不是只在某个点特别好。
比如同一条策略,MA 周期从 10 到 30,放量倍数从 1.2 到 2.0,分别跑一遍。你不需要追求每组都好,但至少希望“附近一片”不要太差。
一个健康一点的结果,可能长这样:
| 参数组合 | 收益 | 最大回撤 | 期望值 |
|---|---|---|---|
| MA18 + 放量 1.4 | 16% | 13% | 正 |
| MA20 + 放量 1.5 | 18% | 12% | 正 |
| MA22 + 放量 1.6 | 15% | 14% | 正 |
这说明参数稍微动一动,结果没有立刻塌掉。相反,如果只有“MA19 + 放量 1.73”特别好,旁边全都很差,那就像买彩票刚好刮中一个点,不能太当真。
大坑
不要拿参数扫描去“找最漂亮的一格”,然后把它包装成策略能力。参数扫描的主要作用,是看结果对参数是否过度敏感;越敏感,越要保守。
新手最容易踩的坑
第一个坑,是先看结果再定规则。看到某段历史里 MA17 最好,就把策略写成“必须 MA17”,这不是发现规律,更像按答案倒推题目。
第二个坑,是只保留最好的一次。试了几十组参数,只把最漂亮的回测报告拿出来看,其他失败结果全忘掉。散户很容易这样给自己打气,主力和机构不会因为你选择性记忆就少赚你的钱。
第三个坑,是把验证当成否定自己。过拟合验证跑出来不好看,不是丢脸,而是省钱。它是在提醒你:这条规则可能还没到能重仓的程度,先轻仓观察、继续复盘,比直接冲进去更稳。
总结
过拟合验证是在问一句很朴素的话:这条策略是真的有点道理,还是只是把历史调得太完美?入门阶段先会三招:样本内外看换区间是否还行,滚动验证看不同时间段是否太飘,参数扫描看结果是不是只靠一个幸运数字。
自检 3 问:
- 为什么样本内表现好,不代表策略一定可靠?
- 参数扫描为什么不是为了找“最漂亮的一格”?
- 滚动验证能帮你发现哪类问题?
股市有风险,入市需谨慎。本文不构成任何投资建议。
本章新学到:过拟合验证。