3. 策略回测核心概念:回测目的、过拟合、前视偏差、幸存者偏差、回测与实盘差异

做高频策略回测,说白了就是一场「模拟考试」。你拿着历史数据当试卷,看看自己的策略能不能赚钱。但这里有个坑——很多人把回测当成了「开卷考试」,结果一到实盘就崩了。

我个人习惯把回测看作「风险探测器」,而不是「印钞机模拟器」。你想想看,如果回测曲线漂亮得像一条直线,那大概率是哪里出问题了。嗯,咱们今天就把回测里最核心的几个概念掰开揉碎了讲清楚。

3.1 回测的目的到底是什么?

很多人以为回测就是为了看「赚了多少」。其实不然。我做了这么多年回测,总结下来核心目的就三个:

  • 验证逻辑有效性:你的策略逻辑在历史上是否站得住脚?比如「突破前高就买入」,历史上真的有效吗?
  • 评估风险特征:最大回撤多少?夏普比率如何?极端行情下会不会爆仓?
  • 发现隐藏问题:数据有没有坑?代码有没有bug?逻辑有没有漏洞?

核心观点:回测不是为了证明策略能赚钱,而是为了证明策略「还没发现致命问题」。

我在项目中遇到过一位朋友,他的回测年化收益300%,回撤不到5%。我当时就觉得不对劲。后来一查,他把手续费设成了0,还用了未来数据。嗯,这种回测,说白了就是自欺欺人。

3.2 过拟合:回测里的「死胡同」

过拟合是什么?我打个比方:你让一个学生背下所有考试题的答案,结果考试时题目稍微变一下,他就不会了。策略过拟合也是这个道理——它把历史数据里的「噪音」当成了「信号」。

为什么会过拟合?常见原因有:

  • 参数太多:一个策略里塞了十几个参数,每个参数都去优化,最后拟合了历史数据里的随机波动
  • 过度优化:反复调整参数,直到回测曲线完美,但实盘时这些参数就失效了
  • 样本内测试:只用同一段数据来回测和优化,没有留出样本外数据做验证

避坑指南:我曾经见过一个策略,参数从1优化到100,每个参数都跑一遍,最后选了一个回测收益最高的。结果实盘第一周就亏了15%。这就是典型的过拟合——你把历史数据里的「运气」当成了「能力」。

怎么避免过拟合?我个人习惯用这几招:

  1. 留出样本外数据:比如用前80%的数据做优化,后20%的数据做验证
  2. 限制参数数量:一个策略的参数最好不超过3-5个
  3. 做蒙特卡洛模拟:随机打乱交易顺序,看看策略是否还能赚钱
  4. 跨品种验证:在螺纹钢上有效的策略,在铁矿石上是否也有效?

3.3 前视偏差:回测里的「时间旅行」

前视偏差,说白了就是「用未来的信息做今天的决策」。这在回测里是个非常隐蔽的坑。

举个例子:你在回测时用当天的收盘价作为买入信号,但实际交易中,你只能在收盘后才能知道收盘价。如果你在回测里用收盘价作为「盘中」的买入条件,那就是前视偏差。

常见的几种前视偏差:

类型 说明 例子
价格前视 用未来价格做当前决策 用当日收盘价作为盘中买入条件
数据前视 用未来数据做当前计算 用未来复权因子计算历史收益率
事件前视 用未来事件做当前判断 用财报发布后的数据做发布前的交易

小技巧:我建议在回测代码里加一个「时间戳检查」——确保每个交易信号只用到当前时刻之前的数据。你可以用shift函数把数据往后移一格,模拟「实时数据流」。

3.4 幸存者偏差:回测里的「幸存者游戏」

幸存者偏差,这个词最早来自二战时的飞机弹孔研究。简单说就是:你只看到了活下来的,没看到已经死掉的。

在期货回测里,幸存者偏差表现为:

  • 只用了当前还在交易的合约:那些已经退市、交割的合约被忽略了
  • 只用了主力合约:非主力合约的流动性问题被忽略了
  • 只用了活跃品种:那些已经没人交易的品种被忽略了

你想想看,如果只回测那些「活下来」的合约,你的策略可能只是运气好——刚好选到了没被淘汰的品种。一旦遇到退市或流动性枯竭,策略就失效了。

核心观点:回测时一定要包含「已退市」的合约数据。虽然找这些数据很麻烦,但这是避免幸存者偏差的唯一办法。

我记得有一次,一个策略在回测里表现很好,但实盘时发现很多交易信号对应的合约已经退市了。嗯,这就是典型的幸存者偏差——回测时只用了「活着的」合约,实盘时才发现「死掉的」合约才是常态。

3.5 回测与实盘的差异:理想很丰满,现实很骨感

回测和实盘之间的差异,说白了就是「理想世界」和「现实世界」的差距。我总结下来,主要有这几个方面:

差异项 回测假设 实盘现实
成交价格 以收盘价或指定价成交 可能滑点、无法成交
交易成本 固定手续费 实际手续费可能更高,还有冲击成本
流动性 无限流动性 大单可能吃不完,小单可能买不到
延迟 零延迟 网络延迟、交易所延迟
数据质量 完美数据 可能有缺失、错误、延迟

怎么缩小这个差距?我个人习惯的做法是:

  1. 加滑点:回测时主动加1-2个tick的滑点,模拟实盘成交
  2. 加手续费:按实际手续费的两倍计算,留出安全边际
  3. 限制仓位:回测时限制单笔交易量,模拟流动性不足的情况
  4. 做压力测试:在极端行情下测试策略表现,比如2015年股灾、2020年原油暴跌

避坑指南:我曾经有一个策略,回测时年化收益50%,实盘时只有15%。后来一查,问题出在滑点上——回测时我假设以收盘价成交,但实盘时高频交易根本抢不到那个价格。从那以后,我回测时都会加至少2个tick的滑点。

3.6 知识体系总览

下面这张图,我把本章的核心概念串起来了。你可以把它当作回测的「检查清单」——每次做回测前,对照着看一遍,能帮你避开大部分坑。

策略回测核心概念 回测目的 过拟合 前视偏差 幸存者偏差 回测与实盘差异 验证逻辑 评估风险 发现漏洞 参数过多 过度优化 样本内测试 价格前视 数据前视 事件前视 忽略退市合约 忽略非主力 忽略不活跃 成交价格 交易成本 流动性 图3-1 策略回测核心概念知识体系

这张图把五个核心概念串成了一个整体。你每次做回测时,可以对照着检查一遍:回测目的是否明确?有没有过拟合?有没有前视偏差?数据是否包含退市合约?实盘和回测的差距是否考虑到了?

嗯,把这些都检查一遍,你的回测结果才真正有参考价值。否则,你只是在「自嗨」而已。

专注资料整理