跳到正文

概率夏普比率(PSR):从中心极限定理到置信度

PSR 表示真实夏普比率超过某个基准的概率,它由中心极限定理推导而来。本文给出包含非正态修正的完整推导,以及报告夏普是否具有统计意义的正确方法。

第 2 篇 · 共 12 篇 约 16 分钟

报告一个 1.5 的夏普,并不能告诉读者这个数字有多可信。概率夏普比率可以。它只回答一个问题:给定手头的数据,真实夏普超过某个基准 SRbSR_b 的概率是多少?

本文从中心极限定理推导 PSR。推导不长,最后得到的统计量适合写进报告:它能说明回测结果在统计上有没有足够证据。

PSR 实际计算的是什么

定义:

PSR(SRb)=P(true SR>SRb)PSR(SR_b) = P(\text{true } SR > SR_b)

这是一个关于真实夏普的概率陈述。它不是回测结果能够复现的概率,也不是策略在生产环境中跑赢的概率。它更像一个后验概率:在估计夏普围绕真实夏普呈正态分布的前提下,估计结果超过基准的概率。

基准 SRbSR_b 就是你想超过的标准。常见选择包括:0(没有能力)、0.5(典型的主动股票策略)、1.0(足以吸引机构资本)。PSR 让你可以说:“我们有 95% 的把握,真实夏普超过 0.5”,或者:“我们有 60% 的把握,真实夏普超过 1.0。”这两种说法都有用。

基于中心极限定理的推导

夏普比率估计量 SR^\widehat{SR} 的均值是 SRSR(真实夏普),方差是 σSR2\sigma_{SR}^2。上一篇文章已经推导过方差:

σSR2=1T−1(1−γ3SR^+γ4−14SR^2)\sigma_{SR}^2 = \frac{1}{T-1}\left(1 - \gamma_3 \widehat{SR} + \frac{\gamma_4 - 1}{4} \widehat{SR}^2\right)

这是 AFML / Bailey-López de Prado 的方差公式。非正态修正来自收益率的三阶和四阶中心矩。1/(T−1)1/(T-1) 则是 Bessel 修正。

当 TT 足够大时,中心极限定理成立。标准化后的夏普近似服从标准正态分布:

Z=SR^−SRσSR→dN(0,1)Z = \frac{\widehat{SR} - SR}{\sigma_{SR}} \xrightarrow{d} \mathcal{N}(0, 1)

我们要计算 P(SR>SRb)P(SR > SR_b)。整理不等式:

P(SR>SRb)=P(SR^−SRσSR<SR^−SRbσSR)P(SR > SR_b) = P\left(\frac{\widehat{SR} - SR}{\sigma_{SR}} < \frac{\widehat{SR} - SR_b}{\sigma_{SR}}\right)

在中心极限定理下,左边的标准化量服从标准正态分布,因此:

P(SR>SRb)=Φ(SR^−SRbσSR)=Φ(z∗)P(SR > SR_b) = \Phi\left(\frac{\widehat{SR} - SR_b}{\sigma_{SR}}\right) = \Phi(z^*)

其中,z∗=(SR^−SRb)/σSRz^* = (\widehat{SR} - SR_b) / \sigma_{SR},Φ\Phi 是标准正态分布的累积分布函数。

这就是 PSR。从中心极限定理出发,四行就能得到它。

PSR(SRb)=Φ(SR^−SRbσSR)PSR(SR_b) = \Phi\left(\frac{\widehat{SR} - SR_b}{\sigma_{SR}}\right)

为什么基准很重要

固定数据后,PSR 随 SRbSR_b 单调下降。基准越高,PSR 越低。选择 SRbSR_b,其实就是在选择“什么才算成功”。

对多空股票策略来说,SRb=0SR_b = 0 通常太容易。如果策略净多股票,抛硬币都可能跑赢 SRb=0SR_b = 0。SRb=0.3SR_b = 0.3 到 0.50.5 更诚实。对市场中性策略,SRb=0.5SR_b = 0.5 到 0.70.7 比较合理。对低延迟 HFT 策略,SRb=2.0SR_b = 2.0 才是相关的门槛。

PSR 不会告诉你该不该投入资本。它告诉你,测出来的夏普能否在统计上与某个基准区分开。这个区别是否足以影响资本配置,是另一个问题。

高斯分布的特殊情况

如果收益率服从高斯分布,那么 γ3=0\gamma_3 = 0,γ4=3\gamma_4 = 3。方差简化为:

σSR2=1T−1(1+SR22)\sigma_{SR}^2 = \frac{1}{T-1}\left(1 + \frac{SR^2}{2}\right)

当 SRSR 较小时(比如 SR<1SR < 1),SR2/2SR^2/2 这一项可以忽略,σSR2≈1/(T−1)\sigma_{SR}^2 \approx 1/(T-1)。这时 PSR 变成:

PSR≈Φ((SR^−SRb)T−1)PSR \approx \Phi\left((\widehat{SR} - SR_b)\sqrt{T-1}\right)

这是最干净的形式。假设 T=252T = 252、SR^=0.5\widehat{SR} = 0.5,那么 PSR(SRb=0)=Φ(0.5⋅251)=Φ(7.92)≈1.0PSR(SR_b = 0) = \Phi(0.5 \cdot \sqrt{251}) = \Phi(7.92) \approx 1.0。当 SRb=0.4SR_b = 0.4 时,PSR=Φ(0.1⋅251)=Φ(1.58)≈0.943PSR = \Phi(0.1 \cdot \sqrt{251}) = \Phi(1.58) \approx 0.943。也就是说,一年回测、夏普为 0.5 时,我们有 94.3% 的把握认为真实夏普超过 0.4。

听起来不错。但脱离上下文,这句话很容易误导。单个策略一年回测得到 0.5 的夏普,结果其实很脆弱。下一年的收益率很可能让夏普估计值减半。PSR 不涉及未来,它只是在描述你现在已经拿到的数据。

完整例子:非高斯收益率

考虑一个空波动率策略。它的日收益率偏度为 γ3=−1.5\gamma_3 = -1.5,超额峰度为 γ4=6\gamma_4 = 6,均值 μ=0.001\mu = 0.001,标准差 σ=0.012\sigma = 0.012,样本量 T=1260T = 1260(5 年日频数据)。夏普为:

SR^daily=0.001/0.012=0.0833\widehat{SR}_{daily} = 0.001 / 0.012 = 0.0833

年化后:0.0833⋅252=1.3230.0833 \cdot \sqrt{252} = 1.323。

包含非正态修正的标准误:

σSR,daily2=11259(1−(−1.5)(0.0833)+6−14(0.0833)2)\sigma_{SR,daily}^2 = \frac{1}{1259}\left(1 - (-1.5)(0.0833) + \frac{6-1}{4}(0.0833)^2\right) =11259(1+0.125+0.0087)=1.1341259=0.000901= \frac{1}{1259}(1 + 0.125 + 0.0087) = \frac{1.134}{1259} = 0.000901

所以 σSR,daily=0.0300\sigma_{SR,daily} = 0.0300。年化后:0.0300⋅252=0.4760.0300 \cdot \sqrt{252} = 0.476。

相对于基准 0 的 PSR:

PSR(0)=Φ(1.323/0.476)=Φ(2.78)=0.997PSR(0) = \Phi(1.323 / 0.476) = \Phi(2.78) = 0.997

看起来很好。但注意:非正态修正让标准误增加了 13.4%。如果忽略这个修正而使用高斯公式,标准误会是 1/1259⋅252=0.4491/\sqrt{1259} \cdot \sqrt{252} = 0.449。对应的 PSR 会是 Φ(2.95)=0.998\Phi(2.95) = 0.998。差异看起来很小,但经过修正的版本才是数据真正支持的结果。

相对于基准 0.5:

PSR(0.5)=Φ((1.323−0.5)/0.476)=Φ(1.73)=0.958PSR(0.5) = \Phi((1.323 - 0.5) / 0.476) = \Phi(1.73) = 0.958

相对于基准 1.0:

PSR(1.0)=Φ((1.323−1.0)/0.476)=Φ(0.68)=0.752PSR(1.0) = \Phi((1.323 - 1.0) / 0.476) = \Phi(0.68) = 0.752

真实夏普超过 1.0 的概率是 75.2%。这个结果还行,值得继续查。

PSR 没有捕捉到的东西

有三件事 PSR 不会处理,而且都很重要。

不修正自相关。 有正自相关的收益率,真正独立的观测数少于名义上的 TT。标准误应该更大。本模块的“Haircut Sharpe”一文会推导这个修正。

不修正多重检验。 PSR 假设你只测试了这一个策略。如果你测了 100 个策略,然后挑最好的那个,PSR 会向上偏。“去膨胀夏普比率”一文会解决这个问题。

不修正非平稳性。 PSR 假设数据生成过程是稳定的。如果回测期间发生了状态变化,PSR 会把各个状态平均在一起,标准误也会算错。

import numpy as np
from scipy.stats import norm

# Parameters
T = 1260
mu, sigma = 0.001, 0.012
gamma3, gamma4 = -1.5, 6.0
sr_daily = mu / sigma
sr_annual = sr_daily * np.sqrt(252)

# Standard error with non-normality correction
se_daily = np.sqrt((1/(T-1)) * (1 - gamma3*sr_daily + (gamma4-1)/4 * sr_daily**2))
se_annual = se_daily * np.sqrt(252)

# PSR for various benchmarks
for benchmark in [0.0, 0.5, 1.0]:
    psr = norm.cdf((sr_annual - benchmark) / se_annual)
    print(f"PSR(SR_b = {benchmark}): {psr:.4f}")

PSR 是一种类似贝叶斯的表述

严格说,PSR 属于频率学派。但读起来很像贝叶斯后验:“给定数据,真实夏普超过基准的概率是多少?”在对 SRSR 使用平坦先验时,频率学派的置信区间和贝叶斯可信区间会重合。PSR 就是这个问题的单侧版本。

这让 PSR 很容易沟通。“我们有 95% 的把握,真实夏普超过 0.5”,比“95% 置信下界是 0.51”或者“在 α=0.05\alpha = 0.05 下拒绝 H0:SR≤0.5H_0: SR \le 0.5”更容易理解。数学是同一套,表达方式会影响沟通效果。

选择合适的基准

根据实务经验,有三条经验法则:

规则 1:基准要反映机会成本。 如果你评估的是多空股票策略,基准应该是 60/40 组合能带来的收益。若评估的是 HFT 策略,基准应该是你的延迟优势理论上应带来的收益。

规则 2:相对于多个基准报告 PSR。 一个数字会掩盖取舍。给出 SRb∈{0,0.3,0.5,0.7,1.0,1.5,2.0}SR_b \in \{0, 0.3, 0.5, 0.7, 1.0, 1.5, 2.0\} 对应的一组 PSR,比只报告 PSR(0)=0.97PSR(0) = 0.97 更完整。

规则 3:诚实说明 PSR 没有捕捉到什么。 如果你测了 50 个策略,最优策略的 PSR 被高估了。如果收益率有自相关,PSR 被高估了。如果数据生成过程在回测中途发生变化,PSR 就没有意义。

正确的报告标准

对任何回测报告,最低标准应该是:

  1. 报告夏普,同时给出收益率频率和样本量。
  2. 给出经过非正态修正的标准误。
  3. 至少给出三个基准下的 PSR(通常是 0、0.5、1.0)。
  4. 针对自相关给出修正后的夏普(Haircut)。
  5. 针对多重检验给出去膨胀夏普。

PSR 是第二项。它区分了两种说法:“我们的夏普是 1.3”,以及“我们的夏普是 1.3,而且真实值超过 1.0 的把握是 75%。”后一句才是信息,前一句不是。

PSR 与 t 检验

如果你上过统计课,可能会觉得 PSR 公式就是单侧 t 检验。这个联系是准确的:

One-sided t-test=P(reject H0:μ≤μb∣data)\text{One-sided t-test} = P(\text{reject } H_0: \mu \le \mu_b | \text{data})

PSR 的写法是:

PSR(SRb)=P(true SR>SRb∣data)PSR(SR_b) = P(\text{true } SR > SR_b | \text{data})

在高斯收益率和原假设 H0:SR=SRbH_0: SR = SR_b 下,标准化夏普服从自由度为 T−1T-1 的 t 分布:

SR^−SRbσ^SR∼tT−1\frac{\widehat{SR} - SR_b}{\hat{\sigma}_{SR}} \sim t_{T-1}

当 T≥30T \ge 30 时,t 分布已经可以用标准正态分布很好地近似。因此:

PSR(SRb)=TT−1(SR^−SRbσ^SR)PSR(SR_b) = T_{T-1}\left(\frac{\widehat{SR} - SR_b}{\hat{\sigma}_{SR}}\right)

其中,TT−1T_{T-1} 是自由度为 T−1T-1 的 t 分布累积分布函数。AFML 中的 PSR 公式使用的是 Φ\Phi(正态分布累积分布函数),它相当于 T→∞T \to \infty 的极限。TT 有限时,t 分布更准确。

当 T≥60T \ge 60 时,Φ\Phi 和 TT−1T_{T-1} 的差异很小。T=30T = 30 时,PSR 的差异大约为 1%。典型回测通常有 T≥250T \ge 250,这时差异可以忽略。除非回测少于 100 个观测,否则使用 Φ\Phi 就够了。

PSR 的统计功效分析

统计功效是指真实夏普为某个值 SRtrueSR_{true} 时,PSR 超过 1−α1 - \alpha 的概率。功效函数为:

Power(SRtrue)=P(Φ(SR^−SRbσ^SR)≥1−α)\text{Power}(SR_{true}) = P\left(\Phi\left(\frac{\widehat{SR} - SR_b}{\hat{\sigma}_{SR}}\right) \ge 1 - \alpha\right)

把内部概率设为 α\alpha:

Φ(SR^−SRbσ^SR)≥1−α  ⟺  SR^−SRbσ^SR≥Φ−1(1−α)=z1−α\Phi\left(\frac{\widehat{SR} - SR_b}{\hat{\sigma}_{SR}}\right) \ge 1 - \alpha \iff \frac{\widehat{SR} - SR_b}{\hat{\sigma}_{SR}} \ge \Phi^{-1}(1-\alpha) = z_{1-\alpha}

当 SRtrue>SRbSR_{true} > SR_b 时,检验统计量的期望值是:

E[SR^−SRbσ^SR]=SRtrue−SRbσ^SRE\left[\frac{\widehat{SR} - SR_b}{\hat{\sigma}_{SR}}\right] = \frac{SR_{true} - SR_b}{\hat{\sigma}_{SR}}

功效就是一个均值为上式的正态随机变量超过 z1−αz_{1-\alpha} 的概率:

Power(SRtrue)=Φ(SRtrue−SRbσ^SR−z1−α)\text{Power}(SR_{true}) = \Phi\left(\frac{SR_{true} - SR_b}{\hat{\sigma}_{SR}} - z_{1-\alpha}\right)

当 α=0.05\alpha = 0.05 时,z1−α=1.645z_{1-\alpha} = 1.645。假设 SR^=1.5\widehat{SR} = 1.5、SRb=0.5SR_b = 0.5、T=1260T = 1260、σ^SR=0.5\hat{\sigma}_{SR} = 0.5:

Power=Φ(1.5−0.50.5−1.645)=Φ(2−1.645)=Φ(0.355)=0.639\text{Power} = \Phi\left(\frac{1.5 - 0.5}{0.5} - 1.645\right) = \Phi(2 - 1.645) = \Phi(0.355) = 0.639

所以,在这些参数下,PSR 在 α=0.05\alpha = 0.05 的显著性水平下拒绝 SR≤0.5SR \le 0.5 这一原假设的功效是 64%。不算高。要达到 80% 的功效,信噪比 (SRtrue−SRb)/σ^SR(SR_{true} - SR_b)/\hat{\sigma}_{SR} 至少要达到 0.841+1.645=2.4860.841 + 1.645 = 2.486。当 SRtrue−SRb=1.0SR_{true} - SR_b = 1.0 时,这要求 σ^SR≤0.402\hat{\sigma}_{SR} \le 0.402。对于 TT 个独立同分布的高斯收益率观测,σ^SR≈1/T\hat{\sigma}_{SR} \approx 1/\sqrt{T}。所以 T≥1/0.4022≈6.2T \ge 1/0.402^2 \approx 6.2。不过,这里的单位是收益率频率下的夏普。

年化时,f=252f = 252:

σ^SR,annual=1Tf=252T\hat{\sigma}_{SR,annual} = \frac{1}{\sqrt{T}} \sqrt{f} = \frac{\sqrt{252}}{\sqrt{T}}

令它等于 0.402,可得 T≥252/0.4022=1559T \ge 252/0.402^2 = 1559 天,也就是大约 6.2 年。

因此,即使夏普差距有 1.0,达到 80% 功效也需要 6 年以上的日频数据。夏普差距越小,需要的数据越多。这也是 MBL(最短回测长度)有用的原因:它会提前告诉你,回测的统计功效够不够。

非零基准下的 PSR

基准 SRbSR_b 不一定是零。常见选择有:

SRb=0SR_b = 0(能力与无能力的比较):检验策略是否有任何正优势。这个检验很弱,几乎所有带有多头偏置的策略都能超过 0。

SRbSR_b = 无风险利率 / 波动率:检验策略是否超过无风险利率。这里隐含的夏普,是相对于无风险资产的信息比率。

SRbSR_b = 同类策略中位数:检验策略是否进入相似策略的前 50%。这需要同类策略的基准数据。

SRbSR_b = 策略特定门槛:检验策略是否达到商业上的要求,例如机构委托要求夏普为 1.0。

对每个基准,PSR 回答的问题都不一样。一个策略可能通过 PSR(0)=0.99PSR(0) = 0.99,却没通过 PSR(0.5)=0.30PSR(0.5) = 0.30。前者说“你的策略超过了噪声”,后者说“你的策略很可能跑不赢夏普为 0.5 的基准”。两句话都对,只是关心的点不同。

实际报告时,基准要和你的投资决策匹配。如果你在决定是否配置资本,就应该使用能反映这笔资本其他用途的基准。

带贝叶斯先验的 PSR

如果你对真实夏普有先验分布,就可以计算 SR>SRbSR > SR_b 的贝叶斯后验概率:

P(SR>SRb∣data)=∫SRb∞p(data∣SR)p(SR)dSR∫−∞∞p(data∣SR)p(SR)dSRP(SR > SR_b | \text{data}) = \frac{\int_{SR_b}^\infty p(\text{data} | SR) p(SR) dSR}{\int_{-\infty}^\infty p(\text{data} | SR) p(SR) dSR}

如果先验是高斯分布 p(SR)=N(SR0,σ02)p(SR) = \mathcal{N}(SR_0, \sigma_0^2),似然也是高斯分布(夏普可以用中心极限定理作近似),那么后验同样是高斯分布:

P(SR∣data)=N(μpost,σpost2)P(SR | \text{data}) = \mathcal{N}(\mu_{post}, \sigma_{post}^2)

其中:

μpost=SR^/σ^SR2+SR0/σ021/σ^SR2+1/σ02,σpost2=11/σ^SR2+1/σ02\mu_{post} = \frac{\widehat{SR}/\hat{\sigma}_{SR}^2 + SR_0/\sigma_0^2}{1/\hat{\sigma}_{SR}^2 + 1/\sigma_0^2}, \qquad \sigma_{post}^2 = \frac{1}{1/\hat{\sigma}_{SR}^2 + 1/\sigma_0^2}

SR>SRbSR > SR_b 的后验概率为:

P(SR>SRb∣data)=Φ(μpost−SRbσpost)P(SR > SR_b | \text{data}) = \Phi\left(\frac{\mu_{post} - SR_b}{\sigma_{post}}\right)

当先验是平坦先验(σ0→∞\sigma_0 \to \infty)时,μpost→SR^\mu_{post} \to \widehat{SR},σpost→σ^SR\sigma_{post} \to \hat{\sigma}_{SR}。后验概率就退化为 PSR。因此,PSR 就是平坦先验下的贝叶斯后验概率。

非平坦先验可以加入事先掌握的知识。如果你观察了 20 年间的 100 个量化策略,先验夏普均值为 0.3、先验标准差为 0.4,那么后验会把报告出来的夏普向 0.3 拉回去。这是一种收缩。

对大多数量化场景,平坦先验下的 PSR 已经够用。只有当你对策略类别有很强的先验信息时,贝叶斯版本才更有价值。

常见的 PSR 错误

实务中经常出现五种错误:

错误 1:用样本标准差代替夏普标准误。 夏普标准误应该使用上面推导的 σ^SR\hat{\sigma}_{SR} 公式。若使用 σ^\hat{\sigma}(收益率标准差),算出来的 PSR 会小 5 到 10 倍。这是最常见的错误。

错误 2:忘记非正态修正。 对偏度为负的策略,忽略 γ3\gamma_3 会低估 σ^SR\hat{\sigma}_{SR},从而高估 PSR。对典型的空波动率策略,修正幅度通常是 10% 到 30%。

错误 3:使用年化频率的夏普,却使用日频标准误计算 PSR。 f\sqrt{f} 的缩放必须一致。如果 SR^\widehat{SR} 已经年化,σ^SR\hat{\sigma}_{SR} 也必须年化。

错误 4:不说明基准就报告 PSR。 单独说“PSR = 0.95”是不完整的。基准是这句话的一半。始终报告 PSR(SRb=X)=0.95PSR(SR_b = X) = 0.95。

错误 5:把 PSR 当成多重检验修正。 PSR 假设你只测试了一个策略。多重检验应该使用去膨胀夏普比率。mm 个策略中最优策略的 PSR,大约会被 2log⁡m\sqrt{2 \log m} 高估。

PSR 什么时候优于其他方法

有三种场景,PSR 是合适的工具:

  1. 单个、事先确定的策略:你只有一个策略,没有搜索参数。PSR 回答“这个夏普在统计上能否和基准区分开?”

  2. 与非统计专业人士沟通:PSR 读起来就是一个概率陈述,直观。置信区间和 p 值需要更多解释。

  3. 风险预算:PSR 量化了夏普估计的不确定性。它可以帮助你确定仓位和风险限额。

多重检验使用 DSR,交叉验证诊断使用 PBO,参数优化诊断使用 Haircut Sharpe。PSR 只是工具箱中的一件工具。

PSR 与最短回测长度

下一篇文章中的最短回测长度(MBL)公式,正是通过反解 PSR 得到的:给定一个期望的 PSR 阈值,需要多大的 TT?两者的联系是:

MBL=arg⁡min⁡T[PSRT(SRb)≥1−α]MBL = \arg\min_T \left[PSR_T(SR_b) \ge 1 - \alpha\right]

这就是让 PSR 超过阈值的最小 TT。在大多数实际情况下(夏普差距为 0.5 到 1.0,α=0.05\alpha = 0.05),MBL 是 3 到 15 年的日频数据。如果你的回测短于 MBL,PSR 就不可靠。你不能据此下结论说策略跑赢了基准。

关于 PSR 局限性的最后提醒

PSR 是一个有用的诊断工具,但它不是策略验证。PSR 为 0.99,表示测出来的夏普在统计上能和基准区分开。它不代表策略会在生产环境中表现良好,也不处理状态切换、容量限制或实现问题。PSR 只是整个诊断体系中的一块。

更诚实的表述是:PSR 告诉你是否值得进入下一步,比如样本外测试或模拟交易。它不会告诉你该不该投入资本。投入决策需要额外分析,PSR 本身无法给出答案。

PSR 与夏普置信区间

PSR 的一种替代方法是夏普比率置信区间:

CI95%=SR^±z0.975⋅σ^SRCI_{95\%} = \widehat{SR} \pm z_{0.975} \cdot \hat{\sigma}_{SR}

对于基准 SRbSR_b,PSR 等价于检查 SRbSR_b 是否位于 95% 置信区间内(单侧)。

假设 SR^=1.3\widehat{SR} = 1.3、σ^SR=0.45\hat{\sigma}_{SR} = 0.45、T=1260T = 1260(年化):

CI=[1.3−0.882,1.3+0.882]=[0.418,2.182]CI = [1.3 - 0.882, 1.3 + 0.882] = [0.418, 2.182]

相对于 SRb=0SR_b = 0 的 PSR:Φ(1.3/0.45)=Φ(2.89)=0.998\Phi(1.3/0.45) = \Phi(2.89) = 0.998。95% 置信区间不包含 0。

相对于 SRb=0.5SR_b = 0.5 的 PSR:Φ((1.3−0.5)/0.45)=Φ(1.78)=0.962\Phi((1.3-0.5)/0.45) = \Phi(1.78) = 0.962。95% 置信区间不包含 0.5。

相对于 SRb=1.0SR_b = 1.0 的 PSR:Φ((1.3−1.0)/0.45)=Φ(0.67)=0.748\Phi((1.3-1.0)/0.45) = \Phi(0.67) = 0.748。95% 置信区间包含 1.0。

PSR 比置信区间更细致。置信区间说:“真实夏普在 0.418 到 2.182 之间。”PSR 说:“真实夏普超过 1.0 的把握是 75%。”两种说法都有效,但 PSR 更容易直接用于决策。

对单个基准,置信区间和 PSR 提供的信息相近。对多个基准,PSR 更紧凑,因为每个基准只需要一个数字。

短回测的 PSR

对短回测(T<250T < 250 天),PSR 所依赖的中心极限定理近似较差。夏普估计量不服从正态分布,更适合使用 t 分布。

基于 t 分布的 PSR:

PSRt(SRb)=TT−1(SR^−SRbσ^SR)PSR_t(SR_b) = T_{T-1}\left(\frac{\widehat{SR} - SR_b}{\hat{\sigma}_{SR}}\right)

其中,TT−1T_{T-1} 是自由度为 T−1T-1 的 t 分布累积分布函数。

当 T=60T = 60 时,t 分布的尾部比正态分布更厚。同一组数据下,PSR 会更低。假设 60 天回测的夏普为 0.1(年化后为 1.6),基准为 0:

  • 正态 PSR:Φ(1.6⋅59/252)=Φ(1.6⋅0.484)=Φ(0.774)=0.781\Phi(1.6 \cdot \sqrt{59/252}) = \Phi(1.6 \cdot 0.484) = \Phi(0.774) = 0.781
  • t 分布 PSR:T59(0.774)=0.779T_{59}(0.774) = 0.779

T=60T = 60 时,差异还很小。T=30T = 30 时,差异会更明显。

对非常短的回测(T<30T < 30),Bootstrap 置信区间比正态或 t 分布近似都更可靠。

异方差下的 PSR

PSR 公式假设波动率恒定。如果回测期间波动率发生变化(异方差),标准误公式就需要调整。

对存在波动率聚集的策略,夏普标准误会大于独立同分布公式给出的结果,PSR 也会相应降低。

一个简单的调整方法是:使用每个子时期的实现波动率,计算加权夏普:

SR^hetero=∑trt/σt2∑t1/σt2\widehat{SR}_{hetero} = \frac{\sum_t r_t / \sigma_t^2}{\sqrt{\sum_t 1/\sigma_t^2}}

这就是“指数加权”夏普。标准误约为 1/∑t1/σt21/\sqrt{\sum_t 1/\sigma_t^2}。

如果需要更严格的处理,可以使用 GARCH(1,1) 条件方差。使用条件波动率计算的夏普,比无条件夏普更有效率,也就是方差更低。

生产环境中的 PSR

策略上线后,可以用实盘收益率计算 PSR。如果策略表现符合预期,实盘 PSR 应该和回测 PSR 接近。

如果实盘 PSR 明显低于回测 PSR,说明策略已经退化。可能的原因有:

  • 容量:策略规模变大,更难执行。
  • 状态:市场环境发生了变化。
  • 拥挤:其他交易员也发现了这个策略。
  • 衰减:优势已经被套利掉。

对已经上线的策略,要监控实盘 PSR。持续下降值得调查,单次下降可能只是噪声。

实际的 PSR 工作流

对一个研究项目,可以这样做:

  1. 运行回测,计算夏普。
  2. 计算相对于三个基准(0、0.5、1.0)的 PSR。
  3. 如果 PSR(0) < 0.9,就放弃。这个策略无法与噪声区分。
  4. 如果 PSR(0) > 0.9,但 PSR(0.5) < 0.5,说明策略超过了零基准,却没有超过典型主动策略。它处在边缘位置。
  5. 如果 PSR(0.5) > 0.9,但 PSR(1.0) < 0.5,说明策略超过了平均水平,却没有超过强基准。这个结果值得继续看。
  6. 如果 PSR(1.0) > 0.9,说明策略有较强的统计支持,可以进入样本外测试。

这些 PSR 阈值只是惯例,不同团队使用的 cutoff 不同。保守决策可以用 PSR > 0.95;早期研究则可以接受 PSR > 0.80。

多段回测报告中的 PSR

如果策略有多个回测区间(例如 2008–2012、2013–2017、2018–2022),应分别报告每个区间的 PSR,以及合并后的 PSR。

合并 PSR 使用所有收益率的拼接结果。PSR 公式可以直接使用,此时 T=∑jTjT = \sum_j T_j。

分时期的 PSR 可以揭示特定时期的风险。一个策略可能总体 PSR 很高,但在 2008–2012 年(金融危机期间)的 PSR 很低,这说明它有隐藏的状态风险。分时期 PSR 能把这个问题暴露出来。

PSR 与夏普检验统计量

有一个容易忽略的点:标准的夏普比率检验统计量是 t=T⋅SR^t = \sqrt{T} \cdot \widehat{SR}。在 SR=0SR = 0 的原假设下,它近似服从标准正态分布。

PSR 是 Φ(SR^/σ^SR)\Phi(\widehat{SR} / \hat{\sigma}_{SR})。代入 σ^SR≈1/T\hat{\sigma}_{SR} \approx 1/\sqrt{T}:

PSR=Φ(SR^⋅T)PSR = \Phi(\widehat{SR} \cdot \sqrt{T})

如果 SR^=0.05\widehat{SR} = 0.05(日频)、T=252T = 252:PSR=Φ(0.05⋅252)=Φ(0.794)=0.786PSR = \Phi(0.05 \cdot \sqrt{252}) = \Phi(0.794) = 0.786。

这是日频夏普相对于基准 0 的 PSR。年化后,SR^annual=0.794\widehat{SR}_{annual} = 0.794,PSR(0)≈1.0PSR(0) \approx 1.0,也就是几乎可以确定它超过 0。

但等等。σ^SR≈1/T\hat{\sigma}_{SR} \approx 1/\sqrt{T} 这个代入,只适用于独立同分布收益率且 SR≈0SR \approx 0 的情况。对非零夏普,方差公式还包含夏普本身。

完整的 PSR 公式会处理 σ^SR\hat{\sigma}_{SR} 对 SR^\widehat{SR} 的依赖。简化公式 Φ(SR^⋅T)\Phi(\widehat{SR} \cdot \sqrt{T}) 只在夏普较小时准确。

最后的思考

对于“我的夏普在统计上能否与基准区分开?”这个问题,PSR 是正确的工具。对于“我该不该部署这个策略?”,PSR 就不是正确的工具了,后者需要额外分析。

在研究报告中,PSR 只是许多数字中的一个。完整的诊断体系包括:PSR(显著性)、Haircut Sharpe(自相关)、DSR(多重检验)、MBL(样本量)、PBO(过拟合)、CPCV(交叉验证)、容量分析(规模)和状态分析(稳定性)。

一个策略如果通过了所有这些检查,才算真正完成验证。只通过一部分,说明还需要继续做。一个都没通过,就该放弃。

诚实的量化研究员会把 PSR 当成多个输入之一。不诚实的量化研究员只报告 PSR,然后宣布胜利。

参考文献

  • Bailey, D. H. and López de Prado, M. (2014). “The Deflated Sharpe Ratio: Correcting for Selection Bias, Non-Normality, and Multiple Testing.” Journal of Portfolio Management, 40(5), 94–107. §2 推导了 PSR。
  • López de Prado, M. (2018). Advances in Financial Machine Learning, §14.7.2. Wiley. ISBN 978-1-119-48208-6。
  • Lo, A. W. (2002). “The Statistics of Sharpe Ratios.” Financial Analysts Journal, 58(4), 36–52。夏普方差公式的基础文献。