阅读约 9 分钟· 发布于 July 19, 2026

回测过拟合:当漂亮的结果成了陷阱

曲线拟合、幸存者偏差、前视偏差,以及一个新出现的:记住了测试期的 LLM。如何识别被夸大的结果,并验证那些真能熬过实盘的策略。

作者 Florent Poux
审校 Benjamin Sultan
回测过拟合:当漂亮的结果成了陷阱

一次回测能做的最危险的事,就是成功。回测过拟合,指的是一个策略学会了某一段特定历史的噪声,而不是学到任何关于市场的真东西,从而画出一条美得惊人、却什么都预测不了的权益曲线。量化界与它搏斗了几十年。智能体时代又添了一个新花样:语言模型可能早已读过你正拿来测试它的那段历史。本文覆盖经典的机制、至今仍在坑人的老偏差、新出现的 LLM 记忆型失败模式,以及把可信结果与讨巧结果分开的那些防线。

回测过拟合为何发生:自由度

策略里每一个可调的选择,都是一个自由度,而自由度正是噪声被拟合进去的通道。看它如何层层叠加。一个均线交叉从两个参数起步:快线和慢线的长度。加一个 RSI 过滤,你就有了四个:周期加阈值。再加一个时段窗口、一个止损距离和一个止盈目标,你就到了七八个。给每个都测十个看似合理的取值,这个空间里就藏着数千万种组合。其中某处,总有一个配置纯属巧合地完美贴合你的测试期。优化器会替你把它找出来。

那种直觉,是抛硬币比赛。让一万个人在一个房间里抛硬币,十轮之后大约有十个人每次都抛出正面。他们看上去像天才。其实是中彩票的。参数搜索跑的是同一场比赛,参赛者换成了策略变体,而一场足够大的搜索的赢家,几乎必然是一次侥幸。随之而来的是一条让人不适的规则:你试过的配置越多,那个最优者的表现就越没有意义。从试了三个想法中得到的 2.0 的 Sharpe 比率是有意思的。同样的数字若来自五万次的扫描,那多半只是在度量这场扫描有多大。

经典偏差:幸存者偏差与前视偏差

有两桩更古老的罪,不需要任何优化器就能把回测吹大。

幸存者偏差意味着拿今天的赢家来测试。把一个策略跑在某个股指当前的成分股上,你就悄悄剔除了一路上被退市、被折价收购或破产的每一家公司;你的策略本会持有的那些输家,在数据里不见了。加密更糟:成千上万个已死的代币干脆从大多数数据集里消失,于是一个建立在幸存币种上的“按市值买前 50”回测,测的是一个没人当初能知道该去持有的组合。修正的办法是使用反映每个日期上实际可交易品种的时点数据(point-in-time),以及在拿不到这种数据时保持怀疑。

前视偏差意味着在信息还不存在时就据其行动。最直白的版本:用一根 K 线自己的收盘价去交易这根 K 线。更隐蔽的版本无处不在:用后来修订过、而非首次公布的经济数据,用整段样本窗口算出来的指标,或者给基本面盖上财报期的日期、而非它更晚被公布的日期。这些泄漏,任何一个都把明天的报纸漏进了今天的决策,而回测会奖励这种泄漏。

回测过拟合:当漂亮的结果成了陷阱

新的失败模式:你的 LLM 早已读过答案

智能体策略引入了一种任何数据卫生检查清单都抓不到的前视,因为泄漏就在模型内部。一个用截至比如 2024 年的数据训练出来的大语言模型,已经吞下了覆盖其截止日之前每一次剧烈市场波动的财经新闻、行情评论和事后复盘。让它去“决定”2020 年 3 月该交易什么,它不是在预测。它是在回忆。

这里的研究说得很不客气。“Can LLM-based Financial Investing Strategies Outperform the Market?”(arXiv:2505.07078, 2025)表明,LLM 策略的回测被记忆和前视所夸大:训练数据与测试窗口重叠的模型能回忆起代码、日期和价格走势,一旦评估移到样本外,表现常常退化。一项后续的记忆受控基准(arXiv:2605.28359, 2026)从另一个方向得出同样的裁定:与模型知识截止日重叠的长回测,会让被记住的市场历史漏进它的“预测”里,而对记忆加以控制之后,表面上的技巧会急剧减少。一个在 2020—2023 上看着才华横溢的智能体,可能不过是一份非常昂贵的、记录 2020—2023 发生了什么的指数。

实际后果说起来很简单。如果一个 LLM 在你循环里的任何位置做决策,就把该模型训练截止日之前的任何回测窗口视为受污染的,并把证据的权重压在截止日之后。更好的做法是干脆把 LLM 排除在预测路径之外:用它把你的意图翻译成明确的规则,再把这些确定性规则对着历史重放,那里没有任何东西可供记忆去抓。语言模型与确定性引擎之间更宽泛的分工,在 LLM 用于交易里有讲。

真正管用的防线

这些防线没有一个是奇招。它们的力量,在于你爱上一个结果之前就用上它们。

留出数据,并尊重这份留出。 把历史切开,只在较早的那一部分上调参,把较近的一段保持原封不动,直到设计冻结。每个策略只看一次留出集。反复偷看、每看一次就调一下,留出集就悄悄变成了训练数据。

向前滚动测试(Walk-forward)。 与其用一次静态切分,不如在一个窗口上优化,在下一片上测试,向前滚动,再重复。拼接起来的这些样本外片段,展示了策略在必须持续对着从未见过的数据工作时的表现,而那正是它真正的岗位职责。

行情覆盖。 一个测试窗口是一个论据,而狭窄的论据很弱。跨越 2018 的加密熊市、2020 年 3 月的崩盘、2021 的融涨和 2022 的磨底,你就能知道那份优势是市场的一个属性,还是一件行情的戏服。一篇关于 LLM 交易智能体的综述(arXiv:2408.06361, 2024)把测试窗口过短和标的池过小标记为该领域普遍的弱点,而散户的回测很少更好。

要参数高原,而非尖峰。 让每个参数围绕它选定的取值变动,看看会发生什么。假设 RSI 入场阈值取 30 回测出 1.4 的 Sharpe,但取 25 给出 0.3、取 35 给出 0.4:那道针尖般的尖峰,是被拟合的噪声的标志,因为真实的市场效应不会那么精确。如果从 25 到 40 的一切都落在 0.9 到 1.2 之间,你就站在一片高原上,而高原远比尖峰更常能挪到实盘去。宁可选一片宽阔高原的中央,也别选一座陡峭尖峰的顶端,哪怕尖峰的数字更好看。

这也是工具要么帮忙、要么悄悄添乱的地方,所以挑选回测软件时要选那种让诚实变得省事的。在 Obside 上,一次回测在几分钟内重放数年历史,滑点假设已内建其中,这就让那个既便宜又守纪律的动作——在信任任何东西之前,带着真实成本跨行情测试——成了阻力最小的路径,而不是一件苦差事。针对智能体的具体工作流,在如何回测一个 AI 交易智能体里有一步步的讲解。

回测过拟合:当漂亮的结果成了陷阱

把简单当作先验,把纸面交易当作期末考

当两个策略回测得差不多时,选那个活动部件更少的,并且在看到任何结果之前就抱定这份偏好。每加一条规则或一个参数,都必须靠在样本外活下来来交房租,而不是仅仅靠改善样本内曲线——增加复杂度几乎总能免费做到后者。一个只有两条规则、在四种行情里 Sharpe 为 0.9 的策略,比一个有九个参数、在单一牛市里显示 1.8 的构造更值得信任。复杂不等于精妙。在回测里,它多半只是供噪声抓握的表面积。

接着来的,是唯一无法被污染的考试:未来。纸面交易让你那个确切的智能体对着实盘市场运行、不冒任何资金风险,用的是你设计策略时还不存在的数据。没有优化器见过它,也没有语言模型记住过它。关于这次毕业,最要紧的一点是:智能体在过渡途中不发生任何改变。在 Obside 上,被回测过的那份智能体定义原封不动地进入纸面模式,条件与风控完全一致,于是纸面运行测的是你验证过的那个策略,而不是它被手抄出来的近似版本。三到四周与回测相呼应的纸面结果,是散户验证能拿出的最有力证据。

从这里往哪走

把每一次漂亮的回测都当作一项需要接受敌意审查的主张,并按这个顺序去审:搜索过多少种配置、数据是否无幸存者偏差且为时点数据、循环里的任何 LLM 是否可能记住过这个窗口、结果是站在高原上还是尖峰上,以及它是否熬过了你留出的数据。然后让纸面交易给出裁定。如果你想让这份纪律内建在工作流里、而非事后拧上去,Obside 会跑完整条阶梯:把滑点内建其中的跨行情回测,然后纸面,然后实盘,全都在同一份不变的智能体定义上。

仅供教育参考,不构成投资建议。交易存在风险,可能导致本金损失。

FAQ

就是一个策略被调参——无论有意还是无意——直到它贴合了某一段历史的随机噪声,而不是某种可重复的市场行为。回测看着极好,是因为策略实际上已经把那一片历史背了下来。实盘市场产生新的噪声,被背下的模式无法重现,表现随之崩塌。最能说明问题的症状,是一个策略在测试里看着远好于任何朴素的经济逻辑所能解释的程度。

相关文章

在你的投资组合上试用 Obside

连接你的券商,一句话构建你的投资组合。

开始