Deflated Sharpe Ratio 怎么算:试了几百组参数之后,夏普比率该打几折
在几百组参数里挑出的最高夏普必须按 E[max SR] 打折,这就是 Deflated Sharpe Ratio(DSR)做的事:把多重检验、样本长度、非正态三项代价从夏普里扣掉。本文给公式、有效试验次数的三种估法、两张可复算的数值表,以及一个 DSR 通过但与大盘相关系数 +0.97 的真实失败案例。
更新于 2026-08-01
你在参数网格上跑了三百组回测,挑出夏普最高的那组,报告说「这个策略夏普 1.8」。这句话有个隐含前提:1.8 是这个策略的夏普。实际上它是三百个带噪声的估计值里的最大值——即使这三百组的真实夏普全是零,最大值也不会是零。Deflated Sharpe Ratio(DSR)干的事,就是把「挑了很多次」这件事的代价从这个数字里扣掉。
为什么普通夏普在多重检验下会系统性虚高
夏普比率是估计量,有抽样误差。样本越短、收益分布越偏离正态,误差越大。单次实验里这只是噪声;一旦你在 M 个配置里取最大值,噪声就变成了系统性偏差,因为你做的是极值抽样,而不是一次独立观测。
这个偏差的量级超出多数人的直觉。Bailey、Borwein、López de Prado 与 Zhu 在《Notices of the AMS》2014 年 5 月号给的例子是:只要有 5 年数据,试 45 组配置就足以挑出一个样本内夏普为 1、样本外一塌糊涂的组合([Pseudo-Mathematics and Financial Charlatanism](https://www.davidhbailey.com/dhbpapers/backtest-pseudo.pdf))。学术界那边的对应结论来自 Harvey、Liu 与 Zhu 发表在《Review of Financial Studies》2016 年第 29 卷的因子普查:清点了 316 个因子之后,他们主张新因子的 t 值门槛应该抬到 3.0 以上,而不是习惯用的 2.0([论文页面](https://academic.oup.com/rfs/article/29/1/5/1843824))。
DSR 惩罚的到底是什么
DSR 建立在 Probabilistic Sharpe Ratio(PSR)之上。PSR 回答「真实夏普高于某个基准的概率有多大」,而 DSR 把这个基准从 0(或者你随手设的数)换成一个更难过的东西:假设所有试验的真实夏普都是 0,做 N 次试验,纯靠运气期望能挑出的最大夏普。
E[max SR] ≈ √V[SR] × ( (1−γ)·Z⁻¹[1−1/N] + γ·Z⁻¹[1−1/(N·e)] ),其中 γ ≈ 0.5772 为欧拉常数,Z⁻¹ 为标准正态分布的分位数函数。 DSR = Z[ (SR − SR₀)·√(n−1) / √(1 + ½SR² − γ₃·SR + (γ₄−3)/4·SR²) ],其中 SR₀ = E[max SR]。
V[SR] 是各次试验夏普的方差,n 是收益观测数,γ₃ 和 γ₄ 是收益序列的偏度与峰度。**γ₄ 取非超额峰度(正态分布等于 3)**,这一点务必看清:scipy.stats.kurtosis 和 pandas 的 .kurt() 默认返回的是超额峰度(正态等于 0),直接代进公式会把峰度惩罚算反,需要 +3 或传 fisher=False。三个惩罚项各管一件事:N 管试验次数,n 管样本长度,偏度峰度管分布形状。负偏加尖峰的序列被压得最狠——「平时小赚、偶尔巨亏」正是这种形状,这类策略的原始夏普往往好看得离谱。
| 有效试验次数 N | 试验间夏普标准差 0.3 | 标准差 0.5 | 标准差 1.0 |
|---|---|---|---|
| 10 | 0.47 | 0.79 | 1.58 |
| 50 | 0.68 | 1.14 | 2.28 |
| 100 | 0.76 | 1.27 | 2.53 |
| 500 | 0.92 | 1.53 | 3.05 |
| 1000 | 0.98 | 1.63 | 3.26 |
| 5000 | 1.11 | 1.84 | 3.69 |
N=1000、离散度 1.0 那一格是 3.26,与原论文给出的数字对得上:一千次独立试验,真实夏普全是零,最大值的期望仍有 3.26。这张表还说明惩罚力度主要由试验间的夏普离散度决定。同样一千次试验,如果配置之间差别很小、夏普都挤在一起(离散度 0.3),惩罚基准只有 0.98。
有效试验次数怎么估
这是整套方法最脆弱的一环。N 不是你跑了多少次回测,而是这些回测里有多少条独立信息。10 个窗口 × 5 个阈值 × 3 套进出场逻辑是 150 个配置,但若相邻窗口的收益曲线相关系数 0.9,它们远算不上 150 次独立试验。常见的三种估法,从粗到细:
- 按平均相关系数折算:N = ρ̄ + (1−ρ̄)·M,M 为配置总数。ρ̄=0 时 N=M,ρ̄=1 时 N=1。够快,但对 ρ̄ 的估计极其敏感。
- 对所有回测的收益序列做聚类,簇数当作 N。López de Prado 用的是 ONC 算法,层次聚类可以给出一个偏保守的下界。
- 谱方法:看配置间相关矩阵的特征值分布,用有效秩近似独立维度数。
绕不开的问题是:N 是自报的。同一份回测结果,声称试了 10 次和承认试了 200 次,DSR 能给出相反的结论。下面这张表是一个构造算例,其他条件全部固定,只改 ρ̄ 一个假设。
| 平均相关系数 ρ̄ | 有效试验 N | 惩罚基准 SR₀ | DSR |
|---|---|---|---|
| 不做惩罚(当作只试了一次) | 1 | 0 | 0.99 |
| 0.95 | 11 | 0.81 | 0.91 |
| 0.80 | 41 | 1.10 | 0.83 |
| 0.50 | 101 | 1.27 | 0.77 |
| 0.00 | 200 | 1.38 | 0.71 |
不做惩罚时 DSR 是 0.99,看着像铁证;一旦承认试了 200 组、并假设它们中度相关,就掉到 0.83,过不了通常采用的 0.95 门槛。所以 DSR 的可信度上限等于你回测日志的诚实程度。跑完几百组之后再回头补一个 N,等于自己给自己发准考证。
一个 DSR 通过、策略却无效的实例
我们对一只大盘股做过日内信号测试,两年 5 分钟数据,回归和动量两个方向各跑一遍,DSR 惩罚和对抗验证都挂上。回归方向直接失败。动量方向通过了全部关卡,看上去可以进入下一阶段。
然后我们做了一件本该更早做的事:把信号收益与同期大盘走势求相关系数,结果是 +0.97。这个信号没有捕捉到任何日内规律,它只是换了种方式表达趋势。剔除 45 个事件驱动的交易日重跑仍然亏损,而同期简单买入持有反倒是正的。这一轮我们多烧了两周,原因是把 DSR 当成了终点站。
教训可以写得很短:DSR 回答「这个数字是不是运气」,不回答「这个数字是不是 beta」。两个问题正交,过了前一关不代表后一关也过。
DSR 管不到的三件事
- 管不到口径注水。DSR 对喂进去的收益序列照单全收。我们有一批信号,按「次日开盘买入、次日收盘卖出」计算平均 +0.56%,按「信号日收盘起算、卖价取次日最高与收盘的均值」计算平均 −0.28%,差 0.84 个百分点而且正负翻面,差别全在隔夜跳空算不算进来。同一批交易,两条收益序列,两个 DSR,两个都「算对了」。
- 管不到 beta 暴露。补救办法只能放在 DSR 之外:算与宽基指数、与市值因子的相关性,再换基准重估超额。我们复现过一个标称命中率 61.6% 的模型,改用全市场前复权数据、把区间拉到 2.5 年之后只剩 56.6%;换中证 500 和中证 1000 做基准,样本外超额转为 −0.3% 到 −0.5%,正收益基本来自小盘市值暴露。
- 管不到数据本身会变。前复权因子从当前时点往回推,每次分红送股都要重算全部历史价格,同一段前复权数据半年后取出来数值不同,回测结果自然跟着变。DSR 是对一条固定收益序列的统计量,序列会漂移这件事不在它射程内。
这里要交代一条边界:上面那次复现本身跑在前复权数据上,而本文正好在讲前复权结果不可严格复现——所以这组数字按我们自己的标准也是不可严格复现的。保留它是因为结论(差约 5 个百分点、扣费后转负、换市值匹配的基准后超额转负)在量级上不依赖复权方式,但精确到小数点的数值不应该被再引用。
落地清单
- 1从第一次跑回测就记日志:配置、数据区间、完整收益序列全存下来。事后重建的试验次数没有可信度。
- 2试验间夏普的标准差用你实际跑出来的那堆配置去算,别拿经验值顶替,它直接决定惩罚力度。
- 3报 DSR 必须同时报 N 的取值和估法,以及偏度、峰度、观测数。孤零零一个 0.97 没有信息量。
- 40.95 是常用门槛(对应 5% 的显著性水平),不是及格证书。
- 5通过之后再做三项正交检验:与基准指数的相关性、剔除事件驱动交易日重跑、换一个市值风格的基准重算超额。
- 6最后仍然要留真正的样本外区间。DSR 是对样本内统计的校正,替代不了样本外验证。
本文所有公式引自 Bailey 与 López de Prado (2014) 及后续文献,两张表的数值为按公式的本站计算;带百分比的实测数据来自本站自有回测。全文讨论统计方法,不构成投资建议,也不指向任何具体证券。
参考文献
- Bailey, D. H., & López de Prado, M. (2014). The Deflated Sharpe Ratio: Correcting for Selection Bias, Backtest Overfitting and Non-Normality. Journal of Portfolio Management. [SSRN 页面](https://papers.ssrn.com/sol3/papers.cfm?abstract_id=2460551)
- Bailey, D. H., Borwein, J. M., López de Prado, M., & Zhu, Q. J. (2014). Pseudo-Mathematics and Financial Charlatanism: The Effects of Backtest Overfitting on Out-of-Sample Performance. Notices of the AMS, 2014 年 5 月号。[PDF](https://www.davidhbailey.com/dhbpapers/backtest-pseudo.pdf)
- Harvey, C. R., Liu, Y., & Zhu, H. (2016). … and the Cross-Section of Expected Returns. Review of Financial Studies, 29(1), 5–68. [论文页面](https://academic.oup.com/rfs/article/29/1/5/1843824)
- Quantdare 对 DSR 公式与有效试验次数近似式的整理:[Deflated Sharpe Ratio: how to avoid been fooled by randomness](https://quantdare.com/deflated-sharpe-ratio-how-to-avoid-been-fooled-by-randomness/)