← 返回文章列表
July 9, 2026
5 分钟阅读

诚实的负面结果:数万次回测、五大主流币,没有稳健优势

诚实的负面结果:数万次回测、五大主流币,没有稳健优势
#算法交易
#回测
#过拟合
#折损夏普比率
#PBO
#负面结果
#验证
🎯
Part 9 of 9 · Collection
Backtesting Without Fooling Yourself

"回测无幻觉"系列文章。

我们不想要的那个结果

这个系列已经用了好几篇文章来打造捕捉谎言的仪器:前视偏差靠一根 K 线的泄漏凭空制造出夏普比率 15,Deflated Sharpe Ratio 给搜索选出的赢家定价,回测过拟合概率给搜索本身定价。那些文章在某种意义上都是彩排。这一篇是正式演出:我们把整套仪器对准一个我们真心想拿去交易的策略族,让它给出它生来就该给出的裁决——哪怕这个裁决是"不行"。

先把诚实的结局摆在前面。我们在五个主流币上跑了数万次回测,覆盖双时间框架和三时间框架配置,去寻找一个稳健的优势。**我们没有找到。**不是"我们找到了一个小优势,然后缩减了仓位"。我们找到的是没有任何东西能扛过与这套机器的接触——没有一个配置既能在多个品种上同时盈利,又能在多重检验校正之下站得住脚。这不是实验的失败。这正是实验的成功。

最诱人的部分——足以让一支仪器不够完备的团队投入资本的部分——在于朴素的读数看起来真的很好:

阶段 我们看到的 它实际是什么
单品种搜索(ETHUSDT,双时间框架) 样本外测试 +16.35%,未触碰的留出窗口 +2.62% 诱人的赢家
Deflated Sharpe,约 37,000 次试验 DSR = 0.00 噪声中的最优
跨品种,5 个主流币,双时间框架 DSR 0.24 / PBO 0.264 不通过
跨品种,5 个主流币,三时间框架 DSR 0.14 / PBO 0.327 不通过

请像我们第一次读它那样去读第一行:一个移动平均线交叉策略,在 ETHUSDT 上沿着双时间框架网格调参,在搜索期间从未见过的数据上打出 +16.35%,又在我们完全隔离的第二个窗口上守住了正的 +2.62%。如果你停在这里——绝大多数公开发表的回测都停在这里——你就会把它上线。这篇文章余下的部分,就是那套告诉我们不要上线的机器,以及它为什么是对的。

第一幕——诱人的赢家

一座泛着红橙色光芒、高耸诱人的样本内权益高峰,一个移动平均线交叉赢家从数千条被丢弃的策略曲线组成的淡淡扇面中被单独拎出——任何折损校正之前那个诱人的噪声最优结果

这个策略族刻意选得平平无奇:Hull 移动平均线交叉,在已收盘的 K 线上求值,配一个诚实的成交模型(在第 i 根 K 线收盘时做决策,在第 i+1 根开盘时成交——本系列绝不妥协的一根 K 线纪律)。"双时间框架"是指信号要经过一个更慢时间框架的趋势闸门;"三时间框架"再加一个更慢的。每多一个时间框架就多一批自由参数,而自由参数恰恰是搜索用来兑换成表面业绩的原料。

单品种研究在 ETHUSDT 上进行。协议本身已经是好的那种:滚动 walk-forward 切分(一个预热窗口、若干个样本内折、一个样本外测试窗口),外加一个直到最后都禁止搜索触碰的留出窗口。Sobol/QMC 搜索探索了参数空间;幸存者是 walk-forward 得分最高的那个配置,它被带上留出窗口一次——只有一次。

幸存者看上去就像一个优势:

  • +16.35%,在样本外测试窗口上——这些数据只用来给配置打分,从不用来拟合它们。
  • +2.62%,在未触碰的留出窗口上——第二道墙,也翻过去了。

这是决定一个研究流程究竟是诚实还是表演的时刻。样本外的盈利在狭义上是真实的:数字没有伪造,也没有前视泄漏——我们查过。但"数字真实、没有泄漏"是一个比"真实优势"低得的门槛。横在两者之间的,正是这整个系列讨论的东西:选择。我们不是评估了一个策略、发现它赚了 16%。我们评估了海量的策略,然后汇报了其中最好那个的 16%。样本外窗口没有前视污染,但它没有躲过选择的污染——因为我们挑选赢家时,部分依据的就是它在那里的表现。唯一能把这两个故事区分开的仪器,是一台知道我们看了多少次的仪器。

第二幕——折损:约 37,000 次试验,DSR = 0.00

Deflated Sharpe Ratio 在计入数万次试验后,把一座高耸的红橙色样本内高峰压塌成一条几乎归零的翠绿色扁平柱,虚假策略定理的噪声上限升到零上方好几个标准差,吞没了表面上的优势

数一数我们看了多少次。把各个折、时间框架组合和参数网格全部算上,双时间框架搜索评估了量级在 37,000 个不同配置的策略。它们每一个都是从策略空间里抽出的一签,而搜索保留了最大值。完整推导在 Deflated Sharpe Ratio 那篇文章里,但这里你只需要一个事实——虚假策略定理(False Strategy Theorem,Bailey & López de Prado):N真实优势为零的策略,其最大夏普比率的期望随 N 增长。在 N ≈ 30,000 时,纯噪声中的最优仅凭选择效应就会站在零上方约四个标准差处。四西格玛看起来像一个重大发现。它只是搜索投下的影子。

所以正确的问题不是"赢家的夏普比率是不是正的?"——当然是正的,你挑的就是最大值。正确的问题是"赢家的夏普比率有没有超过 37,000 个抛硬币者里最走运的那一个能打出的成绩?"这正是 DSR 计算的东西:它把基准从零抬高到试验次数所隐含的噪声上限,然后报告真实夏普比率越过那条线的概率。

ETHUSDT 赢家的样本外记录对应约 0.19 的日频夏普比率。单独看,长窗口上 0.19 的日频 SR 是一个完全体面的数字。对约 37,000 次试验折损之后,它蒸发了:

DSR(SR^=0.19daily,  N37,000)=0.00\text{DSR}\big(\hat{SR}=0.19\,\text{daily},\; N\approx 37{,}000\big) = \mathbf{0.00}

零。不是"边缘水平",也不是"0.4,留意一下"。DSR 说的是:考虑到我们搜索得有多狠,0.19 的日频夏普比率与纯噪声中的最优抽签无法区分。样本外的 +16.35% 和留出窗口的 +2.62%,在这个检验能分辨的精度之内,与一个毫无优势、只是在 37,000 张彩票的抽奖中中了奖的策略完全一致。

有一个细节值得标注出来,因为我们不想夸大折损的力度:参数网格上相邻的点几乎是彼此的复制品,所以原始试验计数会高估独立观察的次数。我们的闸门用的是有效试验数——在折损之前先用 ONC(López de Prado & Lewis)按收益相关性对试验做聚类——正是为了不因为记账口径的原因错杀一个真实优势。即便把这层校正算进去,ETHUSDT 的赢家也活不下来。当一个结果读作 DSR 0.00 时,有效试验数的细微差别救不了它;它深陷在噪声之中。

故事本可以到此为止。一个品种、一次搜索、折损归零。但 DSR 在单一品种上不通过,会留下一个执着的优化者总会试图钻的空子:*也许 ETHUSDT 只是一个难做的品种,这个配置在别处是真的。*要堵上这个空子,你必须换一条检验的轴。

第三幕——决定性检验:稳健性存在于跨品种之间

五个主流加密品种通过一个要求全才的跨品种中位数目标函数被同时评估,分散的分品种样本外结果里只有一个品种在零线上方发出翠绿色的光,另外四个以红橙色跌落零线之下——没有跨品种稳健性

单品种搜索即便在其他方面都完美,也有一个结构性弱点:它唯一的样本外轴是时间。它能告诉你这个配置在 ETHUSDT 靠后的一段窗口上撑住了——但它无法告诉你,这个配置学到的是关于市场的东西,还是关于 ETHUSDT 本身的东西。对单一品种的过拟合,在一个从不离开该品种的检验面前是隐形的。

于是我们改了目标函数。跨品种狩猎要的不再是"在 ETHUSDT 样本外上最好",而是全才:在许多品种上同时表现良好的配置。协议如下:

  • 五个高流动性主流币:ETHUSDT、BTCUSDT、SOLUSDT、BNBUSDT、XRPUSDT——每个约 1.18 million 根 1 分钟 K 线,一个共享的日历窗口,一套共享的切分(预热 → K 个样本内折 → 测试 → 一个未触碰的留出窗口)。
  • 一个稳健的目标函数:对每个配置,先在每个品种上算出 walk-forward 结果,再按跨品种中位数排序。中位数正是关键——一个在一个币上惊艳、在四个币上糟糕的配置,无法靠单个离群值买到入场券。要被选中,它至少得在大多数品种上表现中等偏上
  • 供闸门使用的组合收益矩阵:每次试验的日收益是五个品种的等权组合(每个占 1/S 的资金),由此得到 DSRPBO-CSCV 闸门所消费的 T×N 业绩矩阵。
  • 留出窗口只被触碰一次,且只由每种模式的稳健冠军触碰。

这是一个比单品种严格更难的检验,而且是刻意为之。一个配置可以靠利用某个币的特质赢下 ETHUSDT 搜索;它没法用同样的方式赢下五品种中位数搜索。如果这个策略族里存在稳健优势,这就是能找到它的实验设置。如果不存在,这也是会毫不退缩把话说明白的那个设置。

第四幕——裁决:两种时间框架都没过闸门

我们在两种配置下都跑了跨品种狩猎,并对每个稳健冠军过闸。闸门就是标准的那两道:DSR ≥ 0.95(按有效试验数折损)和 PBO ≤ 0.2(来自业绩矩阵上的 CSCV)。这就是完整的裁决,如实呈上:

模式 DSR(有效试验数) PBO(CSCV) 闸门:DSR ≥ 0.95 闸门:PBO ≤ 0.2 裁决
双时间框架 0.24 0.264 不通过 不通过 无稳健优势
三时间框架 0.14 0.327 不通过 不通过 无稳健优势

两种模式、两道闸门,全部不通过。请用前几篇文章建立的标尺来读每一个数字,因为两道闸门说的是不同的事情,而它们的结论一致:

  • DSR 0.24(双)、0.14(三)。 DSR 是真实夏普比率超过搜索所隐含噪声上限的概率。我们要求 0.95。我们得到的是 0.24 和 0.14——在计入尝试过的配置数量之后,这个优势哪怕只是为的概率,也只有勉强四分之一和七分之一。加上第三个时间框架让结果变得更差而不是更好:参数更多,拟合样本的方式更多,能泛化的东西更少。这种反转本身就是过拟合的指纹。

  • PBO 0.264(双)、0.327(三)。 回忆一下关于 PBO 人人都会看错的那个事实(完整论述在这里):它的零假设值是 0.5,不是 1。 PBO 是样本内赢家落到样本外后一半的概率。可信的选择流程接近 0;纯粹的抛硬币是 0.5。我们的 0.264 和 0.327 低于 0.5——选择不完全是抛硬币,里面有一丝微弱的信号——但都远高于我们要求的 0.2,够不上"选择可靠"的标准。而且三时间框架(0.327)又一次比双时间框架(0.264)更靠近抛硬币线:复杂度更高,泛化更差。

这两台仪器是正交的——DSR 是参数化的,给赢家定价;PBO 是非参数的,给流程定价——而它们从相反的方向收敛到同一个答案。这张表无论怎么读,两个策略都过不了线。开启这整场狩猎的那个 +16.35%,没有一个稳健的跨品种亲戚。它是一个币和一次搜索的属性。

第五幕——跟着冠军走,一个品种一个品种看

聚合闸门告诉你一个策略失败了;分品种拆解告诉你它是怎么失败的,而这个"怎么"是整个研究里最有教益的部分。拿三时间框架冠军——五品种中位数目标函数实际加冕的那个配置——看看它在每个品种的样本外测试窗口上做了什么:

品种 三时间框架冠军,样本外测试
ETHUSDT −0.39%
BTCUSDT −0.38%
SOLUSDT +14.74%
BNBUSDT −8.58%
XRPUSDT −4.13%

整个幻觉就在这里,五行摆得明明白白。冠军在五个品种里恰好只有一个盈利——SOLUSDT,一个扎眼的 +14.74%——而在另外四个上全是负的。它不是一个碰巧有短板的全才。它是一个披着组合外衣的 SOL 专才。那一个大的正收益扛起了全部业绩;中位数目标函数把它排在原始 ETHUSDT 赢家之下,恰恰因为中位数拒绝被单个离群值愚弄,但即便是中位数选出的冠军,拆开一看也几乎完全靠一个币撑着。

留出窗口——谁都不许对着它优化的那段数据——从最干净的视角讲了同一个故事:在五个主流币上,冠军的留出收益只在 5 个品种中的 1 个上为正。如果这是策略族里的真实优势,它至少会隐隐约约地出现在不止一个品种的未触碰数据上。它只出现在一个上。这是"学会了一个品种、而不是学会了市场"的配置的签名。

这就是为什么跨品种这条轴是决定性检验,而不只是锦上添花。单品种 DSR 已经把 ETHUSDT 折损到零。但要诊断这次失败——证明表面优势从一开始就没有分布在多个品种上,它只是搜索在那一轮碰巧过拟合到的某个币的属性——靠的是五品种中位数的设计。在 ETHUSDT 搜索里,它属于 ETHUSDT;在中位数狩猎里,它迁移到了 SOLUSDT。优势会挪窝。真实的优势不会这样挪窝。

为什么负面结果才是正确的结果

一个被严谨确立并公开发表的负面结果,化作一座翠绿色灯塔,把一束经过验证的接受零假设之光投向埋葬着文件抽屉研究的黑暗海面,光束穿透一个诱人样本内赢家逐渐消退的红橙色光晕

值得把我们在主张什么、没在主张什么说清楚,因为"我们没找到优势"很容易被误读成假意谦虚或者承认无能。两者都不是。

我们不是在主张 HMA 交叉永远不可能有效,不是在主张这五个币不可预测,也不是在主张不存在任何双/三时间框架策略。我们主张的是一件更窄也更强的事:*在这个策略族之内、在这份数据之上、在这个搜索强度之下,不存在任何一个配置,其表面业绩能扛过对尝试次数的校正。*所有看起来像优势的东西,都落在纯噪声最优的置信带之内。这是一个精确、可证伪、站得住的陈述——也是正确的可发表结论。

这套机器击败的诱惑是巨大的,而且它在其他每个领域都有名字:文件抽屉问题(file-drawer problem)。负面结果被埋掉;正面结果被写成文章。在交易里,这个激励还要更锋利,因为你没有做折损校正的那个正面结果不只是一篇糟糕的论文——它是部署在噪声之上的资本,是真金白银付着真实手续费,去交易一张你误当成信号的彩票。前视偏差那篇文章展示了一次泄漏如何凭空制造出夏普比率 15;DSR 那篇文章展示了一次没有任何泄漏的搜索如何从纯噪声里凭空制造出 1.63 的夏普比率。这篇文章展示的,是当这些仪器对准你自己最心爱的想法、并被要求说实话时的样子。这套装置——DSR、PBO/CSCV、有效试验数聚类、跨品种选择——存在的目的不是为你的策略祝福。它存在的目的是阻止你把噪声中的最优当成 alpha 拿去上线,而它有效的唯一证据,就是它有时会说"不"。

一支没有这套装置的团队会把那个 +16.35% 上线。他们会有一份看起来干净的 walk-forward、一个为正的留出窗口、检测不到的前视泄漏,还有一个说得通的故事。他们会是错的,而且在实盘 P&L 开始偏离之前不会知道自己错了——那道回测与实盘的鸿沟,一个诚实的负面结果永远不需要去解释,因为它从未上线。一个严谨的"不",其价值要用你从未承受过的回撤来衡量。

溯源

这篇文章里的每一个数字都能追溯到代码,而不是叙事。跨品种优势狩猎——五品种数据加载、共享切分、跨品种中位数目标函数、喂给闸门的等权组合矩阵——位于回测器仓库的 scripts/edge_hunt_multitf.py(提交 acd84e8)。它调用的统计闸门——概率化与折损后的夏普比率、最短业绩记录长度、经由 ONC 聚类的有效试验数、以及通过 CSCV 计算的 PBO,全部对照一手文献在 NumPy/SciPy 上从零实现,而不是黑盒库——在 scripts/overfit_gates.py(提交 7b966e1)里,它自带一个自检:在纯噪声中植入一个已知优势,确认闸门放行优势、拒绝噪声。产出那个诱人 +16.35% 的单品种 ETHUSDT 研究,来自狩猎脚本以只读方式导入的更早的 bench_search_multitf 测试台。这里没有任何手算出来的数字;无论答案是"是"还是"否",闸门走的都是同一条代码路径。

要点

  1. **我们在五个主流币上跑了数万次回测,覆盖双、三时间框架,没有找到稳健优势——而这正是这套机器被造出来要产出的那种结果。**一个被严谨确立的负面结果是一项发现,不是一次失败。
  2. 一个看起来干净的样本外数字不是优势。 ETHUSDT 赢家打出了样本外 +16.35%、未触碰留出窗口 +2.62%,且没有前视泄漏——但在数完背后约 37,000 次试验之后,折损到 DSR 0.00。样本外洗掉的是前视;只有折损才能洗掉选择。
  3. **原因就是虚假策略定理。**在约 30,000 次试验下,纯噪声中的最优仅凭选择效应就站在零上方约四西格玛处。0.19 的日频夏普比率恰恰就是那张彩票的派彩。你必须拿你的赢家和噪声上限比较,永远不要和零比较。
  4. **稳健性存在于跨品种之间,而不只是跨时间。**按五个品种的中位数来选择,把一个单币幻觉变成了一个可诊断的幻觉:双时间框架 DSR 0.24 / PBO 0.264,三时间框架 DSR 0.14 / PBO 0.327——两者都过不了两道闸门,且三时间框架(参数更多)在每一项指标上都比双时间框架更差。
  5. **在信任冠军之前先把它拆开。**三时间框架的"组合"冠军只在 5 个品种中的 1 个上盈利(SOL +14.74%;ETH −0.39%、BTC −0.38%、BNB −8.58%、XRP −4.13%),留出窗口上也只在 5 个中的 1 个为正。一个只活在一个品种上、重新搜索一次就挪窝的优势不是优势——它是披着组合外衣的过拟合。
  6. **把负面结果发表出来。**这套反过拟合装置——DSR、PBO/CSCV、有效试验数、跨品种选择——之所以值得拥有,恰恰因为它有时会告诉你"不",而纪律就是在它这么说的时候听它的。

我们最希望它成功的策略没有成功。我们为抓住这一点而打造的仪器,在任何一美元冒险之前,用四种彼此独立的方式把这件事告诉了我们。这就是整个系列的意义所在,而这一篇是这个意义兑现的地方:这套机器挣到自己身价的那一天,是它拦住你的那一天——不是它奉承你的那一天。

免责声明:本文提供的信息仅用于教育和参考目的,不构成财务、投资或交易建议。加密货币交易涉及重大损失风险。

Authors

Eugen Soloviov
Eugen Soloviov

Trading-systems engineer

Trading-systems engineer building bots since 2017: cross-exchange arbitrage (connected up to 30 venues), cointegration-based pairs arbitrage across spot and futures, scalping, news and sentiment-driven strategies, trend algorithms, and portfolio management and balancing algorithms. Also builds sub-millisecond order execution, big-data warehouses, backtesting engines, AI agents, and trading interfaces (incl. open-source profitmaker.cc). Stack: JS/TS, Python, Rust/Zig/Go, DevOps, backend, frontend, architecture.

Newsletter

紧跟市场步伐

订阅我们的时事通讯,获取独家 AI 交易见解、市场分析和平台更新。

我们尊重您的隐私。您可以随时退订。