聪明理财 · 量化思维与智能工具入门
第 11 章

回测的美丽与陷阱:历史很美,实盘很骨感

上一章我们认识了几种量化策略。这一章要专门处理一个你会反复遇到的场景:有人拿着一条漂亮的收益曲线,告诉你"这个策略过去 5 年年化收益 30%,最大回撤只有 8%"——你该相信吗?该问什么问题?

回测是量化投资里最有用、也最容易被滥用的工具。懂了回测的原理,你就掌握了一把"照妖镜":能看穿一大半那些"历史表现完美"的宣传材料背后的水分,也能在自己研究量化策略时避开根本性的错误。这一章是全书关于"历史数据 ≠ 未来表现"的总论性防火墙。

回测是什么?它有什么用?

基本概念

回测(Backtesting):用历史数据"模拟"某个交易策略在过去一段时间内的运行情况,评估它的可行性。

想象你设计了一套买卖规则:"当沪深 300 指数的 PE 低于 11 倍时分批买入,高于 18 倍时分批卖出"——你想知道这套规则过去 10 年的效果。回测就是把这套规则"放进历史数据"里跑一遍,看看如果你从 2014 年就开始用这个规则,账户曲线会是什么样的。

回测能告诉你什么

一次设计良好的回测可以提供:

  • 盈亏记录:历史上每笔交易的盈亏
  • 最大回撤(Max Drawdown, MDD):历史上最惨的连续下跌幅度
  • 年化收益率:复利年化收益水平
  • 夏普比率:单位风险下的超额收益(详见第七章)
  • 胜率与盈亏比:盈利交易的比例,以及平均盈利与平均亏损的比值
  • 不同市场环境下的表现:牛市、熊市、震荡市各自表现如何

这些数字帮助你在"上真实资金"之前,对策略的大致特征有个认识。对于个人投资者来说,回测是一种"低成本试错"——用历史数据犯错,总比用真钱犯错要便宜。

回测不能告诉你什么

回测最根本的局限:它在历史数据上运行,但你要用的是未来数据。这是一道逻辑上无法跨越的鸿沟。

"你不可能通过看后视镜开车。"——回测描述的是车已经开过的路,不是前方的路。

回测不能告诉你: - 策略未来会不会继续有效 - 市场结构会不会变化、让规律失效 - 实盘中各种"摩擦"会不会吞噬掉回测里的利润

下面我们把这些"不能告诉你"的部分,逐一拆解清楚。

四大陷阱:让回测曲线"虚假完美"

陷阱一:过拟合(Overfitting)

直白解释:通过不断调整参数,让策略在历史数据上表现"完美",但它实际上只是记住了历史数据的"噪音",而不是学到了可重复的规律。

生活类比:想象你观察了过去 10 年的天气,发现"每年 3 月第二周周三下雨时,股市第二天涨"——这个"规律"在历史数据上可能非常精准,但它只是巧合,未来不会重演。

在策略研究中的常见形式

研究者把 20 日均线改成 21 日、22 日……一直试到哪个数字历史表现最好,就用哪个。参数调来调去,最终策略的逻辑是"在历史数据上拟合出来的",而不是来自合理的市场逻辑。

如何识别过拟合

红旗信号 为什么是问题
策略参数极多,逻辑复杂 参数越多,越容易"恰好"拟合历史
参数稍变(如 20 日→21 日均线),回测结果大幅恶化 说明结果对参数极度敏感,缺乏稳健性
策略缺乏合理的经济逻辑 只是数据拟合,没有"为什么有效"的解释
回测收益率异常高、最大回撤异常小 完美才是最危险的信号

对策

  • 策略逻辑越简单越好(奥卡姆剃刀原则:在能解释现象的前提下,选最简单的)
  • 用"样本外测试"验证(见第三节)
  • 参数调整时测试一个合理范围,而不是找最优值
"参数稳健性"是判断策略质量的关键

一个好策略,把参数从 20 改到 21、25,结果应该差不多。如果结果对参数极其敏感,说明你找到的是一个历史偶然,而不是一个稳健的规律。

陷阱二:幸存者偏差(Survivorship Bias)

直白解释:你的历史数据库里,只有那些"活下来"的资产——那些已经退市、被 ST 摘牌、因财务造假被强制退市的公司,早就不在数据库里了。你只看到了幸运儿,没看到失败者,结果高估了策略的真实表现。

生活类比:你想研究"哪些投资决策能让人发财",但你采访的全是现在的富人——那些做了同样决策但失败破产的人,已经不在你能接触到的范围里了。你的研究结论必然是"做这件事很容易成功",因为你系统性地忽略了失败样本。

在股票回测中的具体表现

假设你用"当前沪深 300 成分股"做历史回测——但沪深 300 的成分股是动态调整的,每年都有公司被纳入或剔除。那些因为业绩变差、市值缩水被剔除出指数的公司,你在回测时默认"提前知道了"它们会活到今天,并选择了买入。这是一个隐性的"穿越"——你在历史时点上用了未来才能知道的信息。

被 ST、退市的股票往往带来极大的亏损,幸存者偏差让你的回测自动跳过了这些最惨的结果,收益率自然高得不真实。

对策:使用包含"已退市股票数据"的历史数据集——这类数据被称为"无幸存者偏差数据(Point-in-time data)"。这类数据通常需要付费,但对于严肃的回测而言是必须的。

陷阱三:前视偏差(Look-Ahead Bias / 未来函数)

直白解释:在回测中,你无意间使用了"在那个历史时点上本不应该知道的信息",导致策略在历史上看起来会"预测未来",结果当然漂亮。

常见案例

  • 用当日最高/最低价做信号:比如"当天价格触及当日最低价时买入"——问题是,你只有在这一天收盘后才知道"今天的最低价是多少",不可能在实时交易中用到这个信息。
  • 财报发布日期错误:季报通常在季末后 1~2 个月才正式公布。如果你的回测假设"财报发布当天的数据马上就能用",实际上大多数投资者要过若干天才能看到,这就是使用了"未来信息"。
  • 用复权后的历史价格判断买卖点:股价经过除权除息后,历史价格会被"修正"。用修正后的历史价格回测出来的均线穿越,和当时投资者实际看到的价格是不同的。

防范方法:严格核对每个数据点的"时间戳"——每条信息只能在它实际被公开之后才能被策略使用。

📘前视偏差有时很隐蔽

开发量化策略时,哪怕是有经验的人也可能无意间引入前视偏差——有时候就是代码写法上的一个小失误,比如用了错误的时间索引。这是为什么"自己认为正确的回测"和"真正无偏的回测"之间经常有差距。

陷阱四:忽视交易成本和市场摩擦

回测里默认的"理想世界"

即使过拟合、幸存者偏差、前视偏差都避开了,还有一道坎——回测中的成本假设往往比现实乐观。

因素 回测的常见假设 实盘的现实
成交价格 按信号价格精确成交 滑点(实际成交价与信号价的差距)和冲击成本(你的大单会推动价格不利方向移动)
佣金 可能漏算或低估 A 股基金赎回有手续费、卖出股票有佣金+印花税,高频策略下成本惊人
流动性 假设随时能按任意数量成交 小市值股票流动性差,大单进出时买不到或卖不出,只能分批且被动接受更差的价格
市场冲击 假设你的交易不影响价格 大额资金买入会推高价格,卖出会压低价格——回测里这些成本是零

对高频策略影响极大:买卖越频繁,成本叠加越可怕。一个每天交易 5 次、每次双边成本 0.1% 的策略,一年光成本就接近 25%——回测收益再好,成本也能把它吃掉。

对低频策略影响相对小:每季度再平衡一次的策略,年化交易次数少,成本可控。

🧮成本的惊人效果

某策略回测年化收益 20%,但实际运行中: - 年换手率 200%(每只股票平均一年买卖各一次) - 单向交易成本 0.15%(佣金 + 印花税 + 滑点估算) - 年化成本约 = 200% × 0.15% × 2(双向)= 0.6% ?不对—— - 年化成本 = 200% × 0.15% = 0.3%,但实际上 200% 换手意味着:如果以成本方式算,每 100 万资金一年里买了 200 万的股票、卖了 200 万的股票,双向共 400 万,实际成本 400万×0.15% = 6000元 = 0.6%

注意:还要加上印花税(仅卖出征收 0.05%,年化成本 = 200%×0.05% = 0.1%)和滑点。

综合来看,一个年化换手 200% 的策略,仅成本就可能侵蚀真实收益 1~2 个百分点甚至更多。

样本内 vs 样本外:正确的回测流程

两个概念

样本内(In-Sample):用来开发、调参、优化策略的那段历史数据。

样本外(Out-of-Sample):完全不参与策略开发的另一段历史数据,只用于最终验证。

正确的流程

全部历史数据(如 2010—2024 年)
       ↓ 按时间切分(不能随机切分!)
样本内(2010—2019 年)   ← 在这里开发策略、调整参数
       ↓ 策略开发完成后,锁定参数
样本外(2020—2024 年)   ← 一次性跑,看结果
       ↓
如果样本外表现也不错,才有一定置信度

为什么要按时间切分,不能随机切分?
投资策略依赖于时间序列——数据有先后顺序,不能把 2015 年的数据和 2023 年的数据混着用。否则回测中会无意识地"提前看到未来信息",引入前视偏差。

样本外测试只能做一次

这是很多人不知道或不愿执行的规则:样本外测试只有第一次才有效。

如果你看到样本外的结果不好,又回去调整策略、再拿样本外测试——那你已经在用样本外的数据反过来优化策略了。这时候的"样本外",实际上已经成为了"样本内",样本外测试失去了意义。

⚠️"不断调参直到曲线好看"是最常见的陷阱

很多人开发策略时的真实流程是:调一套参数→跑全量数据→看结果不好→再调→再跑……如此循环几十次,直到找到一套"历史上完美"的参数。但这整个过程其实就是在用全量数据做参数优化,根本没有真正的样本外检验。这样找到的策略,实盘表现几乎必然不如回测。

为什么宣传材料里的曲线都那么漂亮?

看到这里,你大概已经明白了:一条漂亮的历史回测曲线,背后可能有多种"美化"手段:

  1. 精心挑选了测试区间:在牛市期间回测当然好看;如果把区间换成包含熊市的更长时间段,结果可能大相径庭
  2. 参数优化到极致:调到历史表现最好的参数,但它在未来不会重演
  3. 幸存者偏差没有处理:只用了"活着的"股票,系统性跳过了退市、暴雷的案例
  4. 成本计算过于乐观:把交易成本设为零,或设成比实际低很多的数字
  5. 策略本来就特别简单:某些营销材料展示的是"如果一直持有指数"的收益曲线,这本来就是市场回报,和任何主动策略无关

这不意味着所有回测都是骗局,但它意味着你看到一条漂亮曲线时,应该问以下问题:

看到回测曲线时该问的七个问题

  1. 时间区间是怎么选的? 是否涵盖了牛市、熊市、震荡各种市场环境?还是只选了表现好的那段?
  2. 有没有样本外测试? 样本内和样本外分别是哪段时间?
  3. 参数是怎么确定的? 是有逻辑依据,还是调出来的最优值?
  4. 数据库里有没有退市股? 有没有处理幸存者偏差?
  5. 成本是怎么算的? 佣金、印花税、滑点、冲击成本是否真实纳入?
  6. 策略有什么合理的经济逻辑? 为什么这个规律应该存在、应该持续?
  7. 实盘业绩有没有? 有没有真实资金运行记录,和回测相比差多少?
看到回测曲线时默认持怀疑态度

任何人都可以用历史数据"凑"出一条漂亮曲线。越完美的回测,越需要你用这七个问题去审视它。历史数据只能说明"过去有效",不能保证"未来有效"。这是量化投资的铁律,也是本书反复强调的核心风险提示。

回测有价值,但有正确的使用姿势

以上说了这么多陷阱,你可能会问:那回测有没有用?当然有。正确的用法是:

回测是"排除法",不是"证明法"

  • 如果一个策略在历史上表现惨淡,可以基本排除它(排除)
  • 如果一个策略历史表现不错,这只是一个"值得深入研究"的信号,而不是"一定能赚钱"的证明(不能证明)

回测是帮你理解策略特征的工具

通过回测,你可以了解策略的风格——它在什么市场环境下表现好、在什么情况下会大回撤、换手率高不高——这些特征本身是有价值的认识。

回测后一定要加"现实检验"

  • 策略有没有合理的经济逻辑(不是靠数据凑出来的)?
  • 策略在不同市场、不同时期、稍微调整参数后是否仍然成立(稳健性)?
  • 样本外结果是否支持样本内的结论?
💡对个人投资者的实用建议

大多数普通投资者不需要自己做复杂的量化回测。更实用的是:当你看到某个基金、某个策略、某个工具的"历史表现图"时,用本章学到的视角问几个问题,避免被"历史漂亮"的表象迷惑。核心判断标准永远是:历史表现是一个参考,不是未来表现的承诺。

本章小结

  • 回测是用历史数据模拟策略表现的工具,能帮你了解策略特征,但无法预测未来。
  • 过拟合:参数调来调去优化出来的历史完美,实际上只是记住了历史的"噪音",样本外必然失效。
  • 幸存者偏差:只用了"活着"的资产回测,系统性跳过退市/暴雷的亏损记录,收益率被虚高。
  • 前视偏差:回测中用了当时实际上还不知道的信息,策略"提前看到未来",结果不可信。
  • 交易成本和市场摩擦:滑点、冲击成本、真实手续费往往比回测假设高出不少,高频策略尤甚。
  • 样本外测试只有一次有效:看了结果再调参,样本外就变成了样本内。
  • 看到漂亮回测曲线,应习惯性提七个问题,而不是直接被美图打动。

划重点

划重点

"历史回测表现优秀"和"未来实盘表现优秀"之间,有一道由过拟合、幸存者偏差、前视偏差、成本低估共同构成的巨大鸿沟。本章是全书对"历史数据 ≠ 未来表现"这一核心风险的系统梳理。无论是看基金产品宣传材料、量化工具介绍,还是自己研究策略,请把这句话贴在脑门上:任何基于历史数据的漂亮曲线,都不是对未来收益的承诺。

🧠
本章自测
看了 ≠ 学会了。6 道题检验一下:选择题即时判分,简答题由 AI 批改点评。

题目由 AI 依据本章内容自动生成,仅供自我检验;AI 批改结果仅供参考,不代表标准答案。

本书为投资知识科普,不构成任何投资建议,不推荐任何具体产品、基金或股票。历史数据不代表未来表现,投资有风险,本金可能亏损。一切操作以各 App 实际界面与最新规则为准。