过拟合(曲线拟合)是指你的规则描述的是某段历史样本中的噪声,而不是会重复出现的规律。这是回测中看起来很棒的策略在真金白银下令人失望的最常见原因。
它是怎么发生的
每当你测试一个变体(换一个 RSI 阈值、换一条均线、再加一个过滤条件),并保留看起来最好的那个,你就是在搜索。搜索得足够多,总会有东西纯属偶然地看起来不错,就像很多人一起掷硬币,总有人会连续掷出十次正面。
问题不在于某一次测试,而在于你跑过又忘掉的测试次数。David Bailey 和 Marcos López de Prado 等研究者对此有大量论述,其中包括 收缩夏普比率 这样的方法,它会按背后的尝试次数来调整结果。
报告中的警示信号
- 交易极少。 数据少时,几笔幸运的交易几乎可以造出任何曲线。
- 结果依赖少数几次大赚。 如果去掉几笔交易利润就没了,这个优势可能并不真实。
- 奇怪地精确的参数。 37 根 K 线的均线有效,而 30 和 45 都不行,这是一个警示。
- 样本内表现强、样本外表现弱。
- 规则或条件相对交易次数过多。
去掉最佳交易检验
Backte.st 的 去掉最佳交易 检验会在去掉收益最高的五笔交易后,重新计算已平仓交易的复合收益。如果策略仍然赚钱,说明结果分布在许多交易中。如果变成亏损,说明大部分利润来自少数极端值,而这恰恰最难重复。
减少过拟合的习惯
- 测试前先写下规则。 决定你期待什么以及原因,然后只测一次。
- 选择简单的规则。 条件越少,拟合噪声的方式就越少。
- 留出一段期间,只用一次。 参见 样本外测试。
- 检查邻近参数。 真实的效应很少只依赖于某一个精确数字。参见 参数稳健性。
- 在多个市场上测试。 只在一个代码上有效的规则值得怀疑。Backte.st 允许用同一套规则运行最多 10 个市场。
- 记下尝试次数。 如果你测试了二十个变体,就要比只测试一个时更严格地评判胜出者。
实际看起来是什么样
在 实验室 中搭建一个像 RSI 反转这样的策略,在几只股票上运行,并调整阈值直到某个市场看起来很棒。然后看检验:未见期间或邻近参数常常会变成弱点。这就是变得可见的过拟合。