← 返回教程库

什么是回测,回测在骗你什么:好看的曲线最会骗人

最后更新 2026-06-21
L5 · 量化投资 📖 L5-21 回测与评价 ⏱ 约 13 分钟 R2 · 注意风险
你将学到
  • 理解回测是什么、它能验证什么、不能验证什么
  • 看清未来函数、幸存者偏差、交易成本忽略等回测陷阱
  • 建立「回测好≠未来赚钱」的底线认知

你在某个量化社区里翻帖,看到一张图:一条从左下角一路爬到右上角的资金曲线,几乎没有回撤,标注写着「年化 87%,最大回撤 4%,夏普 3.2」。下面一堆人问作者要代码、要参数。你心动了,觉得自己离财务自由就差一份脚本。

我要先泼一盆冷水:越是好看到不真实的回测曲线,越值得怀疑。 不是说它一定是假的,而是说,做出一条漂亮曲线在技术上太容易了,容易到你几乎不需要任何真本事。这一节就把回测这件事拆开——它到底是什么,能验证什么,以及它在哪些地方会系统性地骗你。

回测是什么:拿历史数据把策略重放一遍

回测(backtest)的字面意思就是「向后测试」。你有一套交易规则,比如「当 20 日均线上穿 60 日均线时买入,下穿时卖出」,你想知道这套规则到底靠不靠谱。最直接的办法是拿过去几年的历史行情数据,让计算机假装时间倒流,按这套规则一天一天地模拟操作,最后算出:如果当初真这么做了,账户会变成什么样。

输出通常是几个数字和一张图:

  • 资金曲线:账户净值随时间怎么变。
  • 年化收益:折算成每年的复合回报。
  • 最大回撤:从某个高点跌到后续最低点的最大幅度,衡量你最难受时亏多少。
  • 夏普比率:每承担一单位波动换来多少超额收益,衡量收益的「性价比」。

回测能帮你做的事,本质上只有一件:在历史这段已经发生的数据上,检验这套规则当时是不是有效。 如果一套规则连过去都跑不赢,那它大概率不值得你拿真金白银去试。从这个角度说,回测是个有用的筛子。

但筛子的作用是「排除明显的坏东西」,不是「证明剩下的就是好东西」。这中间的距离,就是无数人交学费的地方。

⚠️ 风险提示

回测是在已知答案的历史上做的模拟,它检验的是「过去」。一条好看的回测曲线,不构成任何买卖信号,也不代表未来会赚钱。 历史数据里跑出来的收益,是已经发生的、你拿不到的收益;未来会怎样,回测一个字都没说。

回测在骗你什么:六个让曲线变好看的陷阱

下面这六个陷阱,有的是无心之失,有的是有意无意地「美化」。它们的共同点是:都会让回测结果比真实可实现的结果好看得多。

一、未来函数 / 前视偏差:用了当时根本拿不到的信息

这是最隐蔽也最致命的一类错误。所谓前视偏差(look-ahead bias),就是你的策略在「当天」用到了「当天收盘后才知道」的信息。

举个例子。你写了一条规则:「在每天的最低价买入。」回测一跑,收益爆表。问题是——你在当天交易时,根本不知道今天的最低价是多少,那个数字要等收盘后复盘才知道。你等于让策略提前偷看了答案。

更隐蔽的版本是用整段数据算出来的统计量去交易当天。比如你用「全年均值」做了某种标准化,再拿来判断「今天偏离均值多少」——可全年均值里包含了今天之后才发生的数据,这就是变相偷看未来。财务数据也常踩这个坑:一季度的财报往往要到四月才公布,但很多人回测时直接把它「贴」在三月底用了。

🚧 避坑

坑:策略里悄悄用了未来信息,自己却没发现。 怎么避:严格区分「决策时刻能拿到什么」和「事后复盘才知道什么」。任何用到当天收盘价、当期未公布财报、全样本统计量的逻辑,都要打个问号。一个朴素的自检——把策略改成只能用「截至昨天收盘」的信息做今天的决策,如果改完收益大幅下滑,说明原来就在偷看未来。

二、幸存者偏差:你只测了活下来的那些

假设你想验证「买入沪深 300 成分股里市盈率最低的 10 只」这套规则,于是你拉了「今天的沪深 300 成分股名单」,回测过去十年。听起来没问题,其实已经踩坑了。

今天还在指数里的公司,是过去十年「活下来并且表现够好」才留在名单上的。那些退市的、被剔除的、暴雷的公司,根本没进你的样本。你测的是一群已知的幸存者,难怪结果好看——你提前把会出事的都剔除了。这就是幸存者偏差(survivorship bias)。

它在基金业绩统计里也很典型:清盘的基金会从数据库里消失,于是「行业平均收益」永远被那些活下来的好基金拉高。

🚧 避坑

坑:用「今天的名单」去测「过去的表现」。 怎么避:回测要用「带退市/剔除记录的完整历史样本」,也就是数据要包含那些后来消失的标的,并且在它们存在的那段时间里如实参与模拟。能不能拿到这种数据,往往是业余和专业的分水岭。

三、忽略交易成本、滑点和冲击成本

回测里买卖经常是「零成本瞬间成交」:你想在 10 块买,它就在 10 块成交,不收佣金、不交印花税、买多少都不影响价格。现实里这三样都不存在。

  • 佣金和税费:每笔交易都要给券商和国家分一杯羹。
  • 滑点:你下单时看到的价格和真正成交的价格之间的差。市场在动,你的单子也要排队。
  • 冲击成本:当你的单子相对市场足够大,你自己的买入就会把价格推高、卖出会把价格压低。

这些成本对低频策略影响有限,但对高频策略是致命的。一个一天换手好几次的策略,回测里年化 80%,把千分之几的来回成本老老实实扣进去,可能瞬间变成负的。换手越频繁,这一刀砍得越狠。

🚧 避坑

坑:回测假设零成本、瞬间成交。 怎么避:在回测里按实际情况扣佣金、印花税,给成交价加上保守的滑点假设,并诚实评估你的下单量会不会冲击价格。一个判断标准——如果一套策略只有在「忽略成本」时才赚钱,那它在现实里就是不赚钱。

四、过拟合:参数调到完美贴合历史

这是新手最容易自我陶醉的陷阱。你有个策略,初版年化 20%。你开始调参数:均线从 20 日改成 18 日,止损从 5% 改成 4.3%,再加个过滤条件……每改一次回测都好看一点,最后你调出了年化 87%、回撤 4% 的「圣杯」。

你以为你在优化策略,其实你在做一件事:让规则去死记硬背这段历史的每一个细节。 这就是过拟合(overfitting)。参数越多、调得越细,曲线就越贴合过去——但贴合的是历史的噪声,不是可以重复的规律。等换一段没见过的数据,立刻原形毕露。

打个比方:一个学生把往年考卷的标准答案全背下来,模拟考次次满分,可一旦换一套新题就考砸了。回测里那条完美曲线,往往就是这种「背答案」的成绩。过拟合是回测最大的系统性骗局,下一节 过拟合:把噪声当规律 会专门讲怎么识别和防范它。

🚧 避坑

坑:以为参数调得越细、曲线越好就是策略越强。 怎么避:参数尽量少、含义尽量朴素;把数据切成「样本内」(用来定参数)和「样本外」(只用来检验、绝不回头调参)两段,只认样本外的成绩。样本外一垮,再好看的样本内曲线都是自欺。

五、数据窥探:反复试到好看为止

这个陷阱比过拟合更难察觉,因为它发生在「策略之间」而不是「参数之间」。

你试了策略 A,不行;试了 B,不行;试了 C、D、E……一直试到第 38 个策略,终于跑出一条漂亮曲线,你高兴地宣布「我找到了一个有效策略」。但你忽略了一件事:哪怕这 38 个策略全是抛硬币般的随机规则,纯靠运气,也总会有那么一两个在某段历史上碰巧表现优异。这叫数据窥探(data snooping)或多重检验问题。

你看到的是那个「幸运儿」,看不到的是背后 37 个被你默默丢掉的失败品。整个搜索过程本身,就让「找到一个好看结果」几乎成了必然——和它有没有真本事无关。

🚧 避坑

坑:在同一份数据上反复试,挑出最好看的那个当作发现。 怎么避:先想清楚策略背后的逻辑(为什么这条规则该有效),再去测,而不是漫无目的地海量试错;老实记下你一共试了多少个想法,试得越多,对单个好结果就要打越大的折扣。

六、极端行情样本不足

历史就那么长,而真正的极端行情——千股跌停、流动性枯竭、政策急转、海外黑天鹅——在数据里是稀疏的几个点。如果你的回测区间恰好是一段风平浪静的牛市,那它根本没机会暴露策略在崩盘时的脆弱。

很多策略平时看着稳,是因为它们本质上是在「赌平静会持续」。一旦遇上 2015 年那种连续跌停、想卖都卖不掉的极端环境,回测里假设的「随时能按价成交」直接失效,真实亏损会远超回测显示的最大回撤。回测里的「最大回撤」只是历史这段样本里最惨的一次,不是未来可能最惨的那次。

⚠️ 风险提示

回测覆盖的历史里没出现过的极端情况,不等于未来不会出现。回测显示的最大回撤是「过去最惨」,绝不是「未来最惨的上限」。 真正能要命的风险,往往是样本里压根没见过的那种。涉及杠杆、衍生品时,这一点会被放大数倍,详见 风险管理卷R

为什么回测会系统性地高估未来

把上面六个陷阱放一边,就算你全部规避得干干净净,回测对未来表现仍然有一种「向上的偏向」。原因藏在更底层的地方。

第一,历史不会原样重演。 回测的全部前提是「过去的规律会延续」,可市场不是一台稳定运转的机器,它是无数人博弈的结果。结构在变、参与者在变、规则在变。过去十年管用的规律,在接下来十年可能只是历史的注脚。

第二,规律一旦被发现就会失效。 假设真有一条规律能稳定赚钱,当越来越多人发现它、都去这么做的时候,这条规律就被「交易没了」——大家都抢着买,价格提前涨上去,超额收益被抹平。这叫策略拥挤。回测里的收益来自一个还没人知道的规律,而你能看到它,往往说明它已经不那么有效了。

第三,你看到的回测,本身是幸存者。 网上晒出来的、写进教程的,几乎都是回测好看的。那些跑出难看曲线的策略,作者悄悄删了,你永远看不到。于是你接触到的所有回测,整体上都是被筛选过的「成功样本」,这又是一层幸存者偏差——只不过这次发生在「你看到的内容」这个层面。

这三条叠加起来的结论很朴素:回测告诉你的是一个被多重偏差向上美化过的、关于过去的故事;而你要面对的是一个会变化、会拥挤、充满未知的未来。 两者之间隔着一道你无法用任何历史数据填平的鸿沟。

一张表:回测能回答和不能回答的问题

回测能帮你做的 回测做不到的
排除连过去都跑不赢的明显坏策略 证明一个策略未来会赚钱
检验交易规则的逻辑能不能跑通、有没有 bug 预测明天、下个月、明年的收益
给出历史区间里的收益、回撤、夏普做参考 给出未来的最大回撤上限
暴露策略对参数是否过度敏感(稳健性) 替你承担规律失效、策略拥挤的风险
提供一个和别的策略横向比较的基准 替代真金白银的小仓位实盘验证

记住表格左右两栏的分界:回测是个排除工具,不是预测工具。它能告诉你「这个大概率不行」,但永远没法告诉你「这个一定行」。

正确的态度:把回测当筛子,不当水晶球

讲了这么多陷阱,不是让你不做回测——不做回测、凭感觉上策略更危险。而是想让你换一个心态去用它。

健康的用法是这样的:你先有一个讲得通的逻辑(为什么这条规则该有效),用回测去验证它没有明显漏洞、没有 bug、对参数不至于太敏感;如果连回测都过不了,直接淘汰。过了回测,也只是拿到了「值得用小仓位真实试一试」的资格,绝不是「可以重仓梭哈」的许可证。回测之后,永远还有样本外检验、模拟盘、小资金实盘这几道关,一道都不能省。

更进一步说,比起追求一条多漂亮的曲线,一个成熟的做法是反过来想:这套策略最糟会怎样?它靠什么赚钱,这个来源会不会消失?什么情况下它会爆掉? 能把这些想清楚,比一个好看的夏普比率值钱得多。

⚠️ 风险提示

再强调一次底线:回测好 ≠ 未来赚钱。 本节所有内容都只讲方法和原理,不构成任何投资建议、买卖信号或收益承诺。任何拿一条回测曲线向你推销策略、保证收益的人,都该被你高度警惕。投资有风险,量化也不例外——它只是把风险藏在了代码和漂亮的曲线背后。完整风险提示见 /disclaimer/

小结

  • 回测是用历史数据重放交易规则,作用是检验规则在过去是否有效,本质是个排除坏策略的筛子。
  • 六个让曲线虚高的陷阱:前视偏差(偷看未来)、幸存者偏差(只测活下来的)、忽略交易成本、过拟合(背答案)、数据窥探(试到好看为止)、极端行情样本不足。
  • 即使规避了所有陷阱,回测仍会系统性高估未来——历史不会原样重演、规律被发现就失效、你看到的回测本身经过幸存者筛选。
  • 正确态度:回测是筛子不是水晶球,过了回测只是拿到「小仓位验证」的资格,回测好绝不等于未来赚钱

下一节 过拟合:把噪声当规律 会专门拆解六个陷阱里最系统性的那个——为什么参数调得越完美,往往越危险。想补底层的数学直觉,可以去 原理库 看「为什么样本越多结论越可信、为什么过去的均值不代表未来」;涉及杠杆和极端风险的部分,务必先读 风险管理卷R

📄 来源 / 自校链接

本文为投资教育整理,关键数据与结论请结合下列权威来源验证。

内容有错、看不懂、或想看下一篇?告诉我们 →

本文为投资教育整理,不构成任何投资建议;不荐个股/基金、不预测点位、不承诺收益。关键数据与结论请结合权威来源自行验证,并见风险免责声明