参数敏感性与过度优化
理解海龟交易法回测中为什么 20/55 不是魔法数字,以及如何用参数敏感性、样本外验证和策略版本记录避免过度优化。
参数优化最容易让交易系统看起来更聪明,也最容易让系统变脆弱。
海龟交易法里常见的 20 日突破、55 日突破、10 日退出、20 日退出、2N 止损等数字,不应被理解成永远有效的魔法参数。它们更像一组规则样本:用不同周期定义突破、用波动单位定义风险、用规则化退出让系统参与趋势。
回测真正要回答的不是“哪组参数收益最高”,而是“这一类规则在合理参数范围内是否仍然稳定”。
什么是参数敏感性
参数敏感性指的是:当参数轻微变化时,系统表现是否剧烈改变。
如果 20 日突破表现很好,21 日突破完全失效,19 日突破也很差,那么这套结果可能只是贴合了历史噪音。相反,如果 18、20、22、25 等相近窗口都呈现类似特征,说明规则族可能更稳健。
需要观察的不只是收益,还包括:
- 最大回撤。
- 最长回撤时间。
- 交易次数。
- 成本敏感性。
- 不同市场组的贡献。
- 样本内和样本外差异。
- 参数改变后是否仍然符合执行能力。
参数敏感性不是为了找到最漂亮的数字,而是为了避免被最漂亮的数字骗到。
过度优化的常见表现
过度优化通常有这些特征:
- 参数越调越多,规则越来越复杂。
- 每次只为解释最近一段亏损而改规则。
- 回测收益变好,但样本外表现明显变差。
- 交易次数太少,结果依赖少数极端行情。
- 某个参数小幅变化后,收益和回撤完全变形。
- 忽略手续费、滑点、资金费率和成交限制。
- 只保留表现好的市场,把失败市场事后删除。
过度优化不是“做了很多回测”本身,而是让历史数据替你编故事。
样本内与样本外
一个基本流程是:
- 用样本内数据设计规则。
- 固定规则和参数。
- 在样本外数据中验证。
- 再观察不同市场、不同年份、不同波动环境。
如果规则只在样本内漂亮,样本外立刻失效,就不能直接发布为实盘规则。样本外验证不能保证未来有效,但能降低“只适合过去”的风险。
参数不是孤立的
突破周期、退出周期、止损距离、加仓间距和 Unit 上限是成套系统。只优化一个参数,很容易破坏其他模块。
例如:
- 缩短突破周期会增加信号,也会增加手续费和假突破。
- 放宽止损会降低止损次数,但会增加单笔亏损。
- 缩短退出周期会减少盈利回吐,也可能截断大趋势。
- 增加最大 Unit 数会提高趋势中参与度,也会提高组合回撤。
所以参数测试要按系统组合看,而不是只看单项。
一个参数敏感性检查表
每次回测可以记录:
| 字段 | 说明 |
|---|---|
| 策略版本 | 当前规则编号 |
| 参数组 | 入场、退出、止损、加仓、风险比例 |
| 样本内区间 | 用于设计规则的数据 |
| 样本外区间 | 未参与优化的数据 |
| 交易次数 | 样本是否足够 |
| 最大回撤 | 风险是否可承受 |
| 成本假设 | 手续费、滑点、资金费率 |
| 参数邻域 | 相近参数是否表现类似 |
| 市场组贡献 | 是否过度依赖少数品种 |
| 修改原因 | 为什么要改这一版 |
这些字段应和 交易日志与复盘模板 保持一致,避免回测和执行使用两套语言。
修改参数的边界
可以修改参数,但应遵守几个边界:
- 修改前先写清问题,不要只因为最近亏损。
- 修改后重新回测,而不是直接实盘。
- 保留旧版本记录,避免忘记为什么改。
- 不在持仓中临时改变退出或止损规则。
- 不把一次极端行情作为唯一修改依据。
系统可以进化,但进化应该有证据链。
与其他页面的关系
参数优化不是为了找到最会讲过去故事的数字,而是为了确认规则族是否足够稳定,可以承受真实市场的噪音、成本和执行偏差。