过拟合检验:去膨胀 Sharpe、PBO、置换检验与稳定性

Senzoukria 会衡量一次回测结果能否经得起所试配置数量的修正:概率性与去膨胀 Sharpe 比率、回测过拟合概率(CSCV)、符号翻转置换检验、顺序打乱的回撤分布,以及参数稳定性检查。它们全部在自动回测之后于本地计算。

Senzoukria · 文档 · 更新于 2026 年 9 月


位置

位置
回放 → 自动回测 → 结果 → Gauntlet 区块,以及前推分析中的“去膨胀 Sharpe —— 优势为真的概率”一行
参考文献
PSR/DSR 见 Bailey 与 López de Prado(2014);PBO 见 Bailey、Borwein、López de Prado 与 Zhu(2015)
置换次数
10,000 次抽取,种子为 0,结果确定
PBO
默认 16 个连续区块,≥ 8 个交易日,≥ 2 种配置

每项检验回答什么

Gauntlet 区块中显示的统计量、它们的输入序列以及解读阈值
统计量输入与方法阈值
PSR所选路径的每日盈亏;真实 Sharpe 大于 0 的概率,已按样本长度、偏度和峰度修正;观测少于 5 个时为 0仅供参考
DSR同一序列,但基准是无优势情况下 N 种配置中最佳者预期达到的 Sharpe,并按网格 Sharpe 的方差进行缩放> 0.95 才通过(淘汰性)
p 值每笔盈亏;随机翻转每笔交易的符号 10,000 次;p =(1 + 不劣于观测值的次数)/(1 + n)< 0.05 才通过(淘汰性)
PBO交易日 × 配置 矩阵;对 16 个区块的每一种对半划分,计算样本内最佳配置在样本外的排名< 0.5 才通过(参考性)
已试配置数网格组合的数量(N),是整个扫描,而不仅是被保留的那些用于计算 DSR
回撤,95 % 的排列结果更好每笔盈亏重新打乱 10,000 次;最大回撤的第 5 百分位仅供参考
参数稳定性所选配置的网格 Sharpe 与在某一维度上相差一步的邻居相比平台:中位比值 ≥ 0.7 且无负值邻居;尖峰:< 0.4 或存在负值邻居

前推分析中的那一行

独立于 Gauntlet,前推分析的结果带有自己的去膨胀 Sharpe(lib/quant/overfit.ts),在样本外交易上计算。它把每笔 Sharpe 与仅凭选择在所试配置数和样本外交易数下所产生的阈值相比较,并用一个词给出概率:≥ 0.95 为稳健,0.5 与 0.95 之间为脆弱,低于 0.5 为噪声。

两套实现有意不同。前推那一行基于每笔收益率,并以各折中所试全部 Sharpe 的标准差作为离散度。Gauntlet 基于交易日盈亏,离散度取自完整周期网格。没有扫描的运行 N = 1 且方差为零,因此 DSR 退化为对零的 PSR —— 在什么都没有被选择时,本就应当如此。

如何使用

  • 先看 p 值:如果符号翻转检验无法把 Sharpe 与偶然区分开,其余都无从谈起。
  • 然后看 DSR:原始 Sharpe 很高而 DSR 低于 0.95,说明配置数量解释了结果的相当一部分。请收窄扫描或延长周期。
  • PBO 接近 0.5 就是偶然;高于它时,挑选样本内最佳配置反而会在样本外造成损害。
  • 在稳定性图表中,平台优于尖峰:一条在其参数周围都有效的规则,才能挺过市场自行挪动一步。

局限与陷阱

这些检验只在你所提供的样本内部,对选择效应和非正态性作出修正。它们看不到从未加载过的数据、在一次糟糕结论之后被修改的策略,或在同一批 K 线上跑的第二轮扫描。每一次重跑都是计数器并不知晓的又一次抽取。

退化的盈亏序列(少于两笔交易或标准差为零)会返回 p 值 1 和 Sharpe 0。每日观测少于五个时 PSR = 0。这些是拒绝下结论,而不是对一套糟糕策略的衡量。

通过所有检验是对一个样本作出的陈述;它不是对实盘结果的承诺。

其他语言版本

常见问题

为什么 PBO 显示为“—”?
网格中只有一种配置,或者矩阵可用的交易日少于 8 天。PBO 至少需要两种配置,以及足以对半划分的连续区块数。
为什么 DSR 低于 PSR?
PSR 以零为基准;DSR 以 N 种随机配置中最佳者所能达到的 Sharpe 为基准。试验次数越多,或网格 Sharpe 的离散度越大,这个基准就越高,DSR 也就越低。
置换结果可复现吗?
可以。生成器与自营公司引擎使用的是同一个 mulberry32,默认种子为 0,因此同一批交易每次运行都会得到相同的 p 值和百分位。