报告一个 1.5 的夏普,并不能告诉读者这个数字有多可信。概率夏普比率可以。它只回答一个问题:给定手头的数据,真实夏普超过某个基准 S R b SR_b S R b 的概率是多少?
本文从中心极限定理推导 PSR。推导不长,最后得到的统计量适合写进报告:它能说明回测结果在统计上有没有足够证据。
PSR 实际计算的是什么
定义:
P S R ( S R b ) = P ( true S R > S R b ) PSR(SR_b) = P(\text{true } SR > SR_b) P S R ( S R b ) = P ( true S R > S R b )
这是一个关于真实夏普的概率陈述。它不是回测结果能够复现的概率,也不是策略在生产环境中跑赢的概率。它更像一个后验概率:在估计夏普围绕真实夏普呈正态分布的前提下,估计结果超过基准的概率。
基准 S R b SR_b S R b 就是你想超过的标准。常见选择包括:0(没有能力)、0.5(典型的主动股票策略)、1.0(足以吸引机构资本)。PSR 让你可以说:“我们有 95% 的把握,真实夏普超过 0.5”,或者:“我们有 60% 的把握,真实夏普超过 1.0。”这两种说法都有用。
基于中心极限定理的推导
夏普比率估计量 S R ^ \widehat{SR} S R 的均值是 S R SR S R (真实夏普),方差是 σ S R 2 \sigma_{SR}^2 σ S R 2 。上一篇文章已经推导过方差:
σ S R 2 = 1 T − 1 ( 1 − γ 3 S R ^ + γ 4 − 1 4 S R ^ 2 ) \sigma_{SR}^2 = \frac{1}{T-1}\left(1 - \gamma_3 \widehat{SR} + \frac{\gamma_4 - 1}{4} \widehat{SR}^2\right) σ S R 2 = T − 1 1 ( 1 − γ 3 S R + 4 γ 4 − 1 S R 2 )
这是 AFML / Bailey-López de Prado 的方差公式。非正态修正来自收益率的三阶和四阶中心矩。1 / ( T − 1 ) 1/(T-1) 1/ ( T − 1 ) 则是 Bessel 修正。
当 T T T 足够大时,中心极限定理成立。标准化后的夏普近似服从标准正态分布:
Z = S R ^ − S R σ S R → d N ( 0 , 1 ) Z = \frac{\widehat{SR} - SR}{\sigma_{SR}} \xrightarrow{d} \mathcal{N}(0, 1) Z = σ S R S R − S R d N ( 0 , 1 )
我们要计算 P ( S R > S R b ) P(SR > SR_b) P ( S R > S R b ) 。整理不等式:
P ( S R > S R b ) = P ( S R ^ − S R σ S R < S R ^ − S R b σ S R ) P(SR > SR_b) = P\left(\frac{\widehat{SR} - SR}{\sigma_{SR}} < \frac{\widehat{SR} - SR_b}{\sigma_{SR}}\right) P ( S R > S R b ) = P ( σ S R S R − S R < σ S R S R − S R b )
在中心极限定理下,左边的标准化量服从标准正态分布,因此:
P ( S R > S R b ) = Φ ( S R ^ − S R b σ S R ) = Φ ( z ∗ ) P(SR > SR_b) = \Phi\left(\frac{\widehat{SR} - SR_b}{\sigma_{SR}}\right) = \Phi(z^*) P ( S R > S R b ) = Φ ( σ S R S R − S R b ) = Φ ( z ∗ )
其中,z ∗ = ( S R ^ − S R b ) / σ S R z^* = (\widehat{SR} - SR_b) / \sigma_{SR} z ∗ = ( S R − S R b ) / σ S R ,Φ \Phi Φ 是标准正态分布的累积分布函数。
这就是 PSR。从中心极限定理出发,四行就能得到它。
P S R ( S R b ) = Φ ( S R ^ − S R b σ S R ) PSR(SR_b) = \Phi\left(\frac{\widehat{SR} - SR_b}{\sigma_{SR}}\right) P S R ( S R b ) = Φ ( σ S R S R − S R b )
为什么基准很重要
固定数据后,PSR 随 S R b SR_b S R b 单调下降。基准越高,PSR 越低。选择 S R b SR_b S R b ,其实就是在选择“什么才算成功”。
对多空股票策略来说,S R b = 0 SR_b = 0 S R b = 0 通常太容易。如果策略净多股票,抛硬币都可能跑赢 S R b = 0 SR_b = 0 S R b = 0 。S R b = 0.3 SR_b = 0.3 S R b = 0.3 到 0.5 0.5 0.5 更诚实。对市场中性策略,S R b = 0.5 SR_b = 0.5 S R b = 0.5 到 0.7 0.7 0.7 比较合理。对低延迟 HFT 策略,S R b = 2.0 SR_b = 2.0 S R b = 2.0 才是相关的门槛。
PSR 不会告诉你该不该投入资本。它告诉你,测出来的夏普能否在统计上与某个基准区分开。这个区别是否足以影响资本配置,是另一个问题。
高斯分布的特殊情况
如果收益率服从高斯分布,那么 γ 3 = 0 \gamma_3 = 0 γ 3 = 0 ,γ 4 = 3 \gamma_4 = 3 γ 4 = 3 。方差简化为:
σ S R 2 = 1 T − 1 ( 1 + S R 2 2 ) \sigma_{SR}^2 = \frac{1}{T-1}\left(1 + \frac{SR^2}{2}\right) σ S R 2 = T − 1 1 ( 1 + 2 S R 2 )
当 S R SR S R 较小时(比如 S R < 1 SR < 1 S R < 1 ),S R 2 / 2 SR^2/2 S R 2 /2 这一项可以忽略,σ S R 2 ≈ 1 / ( T − 1 ) \sigma_{SR}^2 \approx 1/(T-1) σ S R 2 ≈ 1/ ( T − 1 ) 。这时 PSR 变成:
P S R ≈ Φ ( ( S R ^ − S R b ) T − 1 ) PSR \approx \Phi\left((\widehat{SR} - SR_b)\sqrt{T-1}\right) P S R ≈ Φ ( ( S R − S R b ) T − 1 )
这是最干净的形式。假设 T = 252 T = 252 T = 252 、S R ^ = 0.5 \widehat{SR} = 0.5 S R = 0.5 ,那么 P S R ( S R b = 0 ) = Φ ( 0.5 ⋅ 251 ) = Φ ( 7.92 ) ≈ 1.0 PSR(SR_b = 0) = \Phi(0.5 \cdot \sqrt{251}) = \Phi(7.92) \approx 1.0 P S R ( S R b = 0 ) = Φ ( 0.5 ⋅ 251 ) = Φ ( 7.92 ) ≈ 1.0 。当 S R b = 0.4 SR_b = 0.4 S R b = 0.4 时,P S R = Φ ( 0.1 ⋅ 251 ) = Φ ( 1.58 ) ≈ 0.943 PSR = \Phi(0.1 \cdot \sqrt{251}) = \Phi(1.58) \approx 0.943 P S R = Φ ( 0.1 ⋅ 251 ) = Φ ( 1.58 ) ≈ 0.943 。也就是说,一年回测、夏普为 0.5 时,我们有 94.3% 的把握认为真实夏普超过 0.4。
听起来不错。但脱离上下文,这句话很容易误导。单个策略一年回测得到 0.5 的夏普,结果其实很脆弱。下一年的收益率很可能让夏普估计值减半。PSR 不涉及未来,它只是在描述你现在已经拿到的数据。
完整例子:非高斯收益率
考虑一个空波动率策略。它的日收益率偏度为 γ 3 = − 1.5 \gamma_3 = -1.5 γ 3 = − 1.5 ,超额峰度为 γ 4 = 6 \gamma_4 = 6 γ 4 = 6 ,均值 μ = 0.001 \mu = 0.001 μ = 0.001 ,标准差 σ = 0.012 \sigma = 0.012 σ = 0.012 ,样本量 T = 1260 T = 1260 T = 1260 (5 年日频数据)。夏普为:
S R ^ d a i l y = 0.001 / 0.012 = 0.0833 \widehat{SR}_{daily} = 0.001 / 0.012 = 0.0833 S R d ai l y = 0.001/0.012 = 0.0833
年化后:0.0833 ⋅ 252 = 1.323 0.0833 \cdot \sqrt{252} = 1.323 0.0833 ⋅ 252 = 1.323 。
包含非正态修正的标准误:
σ S R , d a i l y 2 = 1 1259 ( 1 − ( − 1.5 ) ( 0.0833 ) + 6 − 1 4 ( 0.0833 ) 2 ) \sigma_{SR,daily}^2 = \frac{1}{1259}\left(1 - (-1.5)(0.0833) + \frac{6-1}{4}(0.0833)^2\right) σ S R , d ai l y 2 = 1259 1 ( 1 − ( − 1.5 ) ( 0.0833 ) + 4 6 − 1 ( 0.0833 ) 2 )
= 1 1259 ( 1 + 0.125 + 0.0087 ) = 1.134 1259 = 0.000901 = \frac{1}{1259}(1 + 0.125 + 0.0087) = \frac{1.134}{1259} = 0.000901 = 1259 1 ( 1 + 0.125 + 0.0087 ) = 1259 1.134 = 0.000901
所以 σ S R , d a i l y = 0.0300 \sigma_{SR,daily} = 0.0300 σ S R , d ai l y = 0.0300 。年化后:0.0300 ⋅ 252 = 0.476 0.0300 \cdot \sqrt{252} = 0.476 0.0300 ⋅ 252 = 0.476 。
相对于基准 0 的 PSR:
P S R ( 0 ) = Φ ( 1.323 / 0.476 ) = Φ ( 2.78 ) = 0.997 PSR(0) = \Phi(1.323 / 0.476) = \Phi(2.78) = 0.997 P S R ( 0 ) = Φ ( 1.323/0.476 ) = Φ ( 2.78 ) = 0.997
看起来很好。但注意:非正态修正让标准误增加了 13.4%。如果忽略这个修正而使用高斯公式,标准误会是 1 / 1259 ⋅ 252 = 0.449 1/\sqrt{1259} \cdot \sqrt{252} = 0.449 1/ 1259 ⋅ 252 = 0.449 。对应的 PSR 会是 Φ ( 2.95 ) = 0.998 \Phi(2.95) = 0.998 Φ ( 2.95 ) = 0.998 。差异看起来很小,但经过修正的版本才是数据真正支持的结果。
相对于基准 0.5:
P S R ( 0.5 ) = Φ ( ( 1.323 − 0.5 ) / 0.476 ) = Φ ( 1.73 ) = 0.958 PSR(0.5) = \Phi((1.323 - 0.5) / 0.476) = \Phi(1.73) = 0.958 P S R ( 0.5 ) = Φ (( 1.323 − 0.5 ) /0.476 ) = Φ ( 1.73 ) = 0.958
相对于基准 1.0:
P S R ( 1.0 ) = Φ ( ( 1.323 − 1.0 ) / 0.476 ) = Φ ( 0.68 ) = 0.752 PSR(1.0) = \Phi((1.323 - 1.0) / 0.476) = \Phi(0.68) = 0.752 P S R ( 1.0 ) = Φ (( 1.323 − 1.0 ) /0.476 ) = Φ ( 0.68 ) = 0.752
真实夏普超过 1.0 的概率是 75.2%。这个结果还行,值得继续查。
PSR 没有捕捉到的东西
有三件事 PSR 不会处理,而且都很重要。
不修正自相关。 有正自相关的收益率,真正独立的观测数少于名义上的 T T T 。标准误应该更大。本模块的“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 属于频率学派。但读起来很像贝叶斯后验:“给定数据,真实夏普超过基准的概率是多少?”在对 S R SR S R 使用平坦先验时,频率学派的置信区间和贝叶斯可信区间会重合。PSR 就是这个问题的单侧版本。
这让 PSR 很容易沟通。“我们有 95% 的把握,真实夏普超过 0.5”,比“95% 置信下界是 0.51”或者“在 α = 0.05 \alpha = 0.05 α = 0.05 下拒绝 H 0 : S R ≤ 0.5 H_0: SR \le 0.5 H 0 : S R ≤ 0.5 ”更容易理解。数学是同一套,表达方式会影响沟通效果。
选择合适的基准
根据实务经验,有三条经验法则:
规则 1:基准要反映机会成本。 如果你评估的是多空股票策略,基准应该是 60/40 组合能带来的收益。若评估的是 HFT 策略,基准应该是你的延迟优势理论上应带来的收益。
规则 2:相对于多个基准报告 PSR。 一个数字会掩盖取舍。给出 S R b ∈ { 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\} S R b ∈ { 0 , 0.3 , 0.5 , 0.7 , 1.0 , 1.5 , 2.0 } 对应的一组 PSR,比只报告 P S R ( 0 ) = 0.97 PSR(0) = 0.97 P S R ( 0 ) = 0.97 更完整。
规则 3:诚实说明 PSR 没有捕捉到什么。 如果你测了 50 个策略,最优策略的 PSR 被高估了。如果收益率有自相关,PSR 被高估了。如果数据生成过程在回测中途发生变化,PSR 就没有意义。
正确的报告标准
对任何回测报告,最低标准应该是:
报告夏普,同时给出收益率频率和样本量。
给出经过非正态修正的标准误。
至少给出三个基准下的 PSR(通常是 0、0.5、1.0)。
针对自相关给出修正后的夏普(Haircut)。
针对多重检验给出去膨胀夏普。
PSR 是第二项。它区分了两种说法:“我们的夏普是 1.3”,以及“我们的夏普是 1.3,而且真实值超过 1.0 的把握是 75%。”后一句才是信息,前一句不是。
PSR 与 t 检验
如果你上过统计课,可能会觉得 PSR 公式就是单侧 t 检验。这个联系是准确的:
One-sided t-test = P ( reject H 0 : μ ≤ μ b ∣ data ) \text{One-sided t-test} = P(\text{reject } H_0: \mu \le \mu_b | \text{data}) One-sided t-test = P ( reject H 0 : μ ≤ μ b ∣ data )
PSR 的写法是:
P S R ( S R b ) = P ( true S R > S R b ∣ data ) PSR(SR_b) = P(\text{true } SR > SR_b | \text{data}) P S R ( S R b ) = P ( true S R > S R b ∣ data )
在高斯收益率和原假设 H 0 : S R = S R b H_0: SR = SR_b H 0 : S R = S R b 下,标准化夏普服从自由度为 T − 1 T-1 T − 1 的 t 分布:
S R ^ − S R b σ ^ S R ∼ t T − 1 \frac{\widehat{SR} - SR_b}{\hat{\sigma}_{SR}} \sim t_{T-1} σ ^ S R S R − S R b ∼ t T − 1
当 T ≥ 30 T \ge 30 T ≥ 30 时,t 分布已经可以用标准正态分布很好地近似。因此:
P S R ( S R b ) = T T − 1 ( S R ^ − S R b σ ^ S R ) PSR(SR_b) = T_{T-1}\left(\frac{\widehat{SR} - SR_b}{\hat{\sigma}_{SR}}\right) P S R ( S R b ) = T T − 1 ( σ ^ S R S R − S R b )
其中,T T − 1 T_{T-1} T T − 1 是自由度为 T − 1 T-1 T − 1 的 t 分布累积分布函数。AFML 中的 PSR 公式使用的是 Φ \Phi Φ (正态分布累积分布函数),它相当于 T → ∞ T \to \infty T → ∞ 的极限。T T T 有限时,t 分布更准确。
当 T ≥ 60 T \ge 60 T ≥ 60 时,Φ \Phi Φ 和 T T − 1 T_{T-1} T T − 1 的差异很小。T = 30 T = 30 T = 30 时,PSR 的差异大约为 1%。典型回测通常有 T ≥ 250 T \ge 250 T ≥ 250 ,这时差异可以忽略。除非回测少于 100 个观测,否则使用 Φ \Phi Φ 就够了。
PSR 的统计功效分析
统计功效是指真实夏普为某个值 S R t r u e SR_{true} S R t r u e 时,PSR 超过 1 − α 1 - \alpha 1 − α 的概率。功效函数为:
Power ( S R t r u e ) = P ( Φ ( S R ^ − S R b σ ^ S R ) ≥ 1 − α ) \text{Power}(SR_{true}) = P\left(\Phi\left(\frac{\widehat{SR} - SR_b}{\hat{\sigma}_{SR}}\right) \ge 1 - \alpha\right) Power ( S R t r u e ) = P ( Φ ( σ ^ S R S R − S R b ) ≥ 1 − α )
把内部概率设为 α \alpha α :
Φ ( S R ^ − S R b σ ^ S R ) ≥ 1 − α ⟺ S R ^ − S R b σ ^ S R ≥ Φ − 1 ( 1 − α ) = z 1 − α \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} Φ ( σ ^ S R S R − S R b ) ≥ 1 − α ⟺ σ ^ S R S R − S R b ≥ Φ − 1 ( 1 − α ) = z 1 − α
当 S R t r u e > S R b SR_{true} > SR_b S R t r u e > S R b 时,检验统计量的期望值是:
E [ S R ^ − S R b σ ^ S R ] = S R t r u e − S R b σ ^ S R E\left[\frac{\widehat{SR} - SR_b}{\hat{\sigma}_{SR}}\right] = \frac{SR_{true} - SR_b}{\hat{\sigma}_{SR}} E [ σ ^ S R S R − S R b ] = σ ^ S R S R t r u e − S R b
功效就是一个均值为上式的正态随机变量超过 z 1 − α z_{1-\alpha} z 1 − α 的概率:
Power ( S R t r u e ) = Φ ( S R t r u e − S R b σ ^ S R − z 1 − α ) \text{Power}(SR_{true}) = \Phi\left(\frac{SR_{true} - SR_b}{\hat{\sigma}_{SR}} - z_{1-\alpha}\right) Power ( S R t r u e ) = Φ ( σ ^ S R S R t r u e − S R b − z 1 − α )
当 α = 0.05 \alpha = 0.05 α = 0.05 时,z 1 − α = 1.645 z_{1-\alpha} = 1.645 z 1 − α = 1.645 。假设 S R ^ = 1.5 \widehat{SR} = 1.5 S R = 1.5 、S R b = 0.5 SR_b = 0.5 S R b = 0.5 、T = 1260 T = 1260 T = 1260 、σ ^ S R = 0.5 \hat{\sigma}_{SR} = 0.5 σ ^ S R = 0.5 :
Power = Φ ( 1.5 − 0.5 0.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 Power = Φ ( 0.5 1.5 − 0.5 − 1.645 ) = Φ ( 2 − 1.645 ) = Φ ( 0.355 ) = 0.639
所以,在这些参数下,PSR 在 α = 0.05 \alpha = 0.05 α = 0.05 的显著性水平下拒绝 S R ≤ 0.5 SR \le 0.5 S R ≤ 0.5 这一原假设的功效是 64%。不算高。要达到 80% 的功效,信噪比 ( S R t r u e − S R b ) / σ ^ S R (SR_{true} - SR_b)/\hat{\sigma}_{SR} ( S R t r u e − S R b ) / σ ^ S R 至少要达到 0.841 + 1.645 = 2.486 0.841 + 1.645 = 2.486 0.841 + 1.645 = 2.486 。当 S R t r u e − S R b = 1.0 SR_{true} - SR_b = 1.0 S R t r u e − S R b = 1.0 时,这要求 σ ^ S R ≤ 0.402 \hat{\sigma}_{SR} \le 0.402 σ ^ S R ≤ 0.402 。对于 T T T 个独立同分布的高斯收益率观测,σ ^ S R ≈ 1 / T \hat{\sigma}_{SR} \approx 1/\sqrt{T} σ ^ S R ≈ 1/ T 。所以 T ≥ 1 / 0.402 2 ≈ 6.2 T \ge 1/0.402^2 \approx 6.2 T ≥ 1/0.40 2 2 ≈ 6.2 。不过,这里的单位是收益率频率下的夏普。
年化时,f = 252 f = 252 f = 252 :
σ ^ S R , a n n u a l = 1 T f = 252 T \hat{\sigma}_{SR,annual} = \frac{1}{\sqrt{T}} \sqrt{f} = \frac{\sqrt{252}}{\sqrt{T}} σ ^ S R , ann u a l = T 1 f = T 252
令它等于 0.402,可得 T ≥ 252 / 0.402 2 = 1559 T \ge 252/0.402^2 = 1559 T ≥ 252/0.40 2 2 = 1559 天,也就是大约 6.2 年。
因此,即使夏普差距有 1.0,达到 80% 功效也需要 6 年以上的日频数据。夏普差距越小,需要的数据越多。这也是 MBL(最短回测长度)有用的原因:它会提前告诉你,回测的统计功效够不够。
非零基准下的 PSR
基准 S R b SR_b S R b 不一定是零。常见选择有:
S R b = 0 SR_b = 0 S R b = 0 (能力与无能力的比较) :检验策略是否有任何正优势。这个检验很弱,几乎所有带有多头偏置的策略都能超过 0。
S R b SR_b S R b = 无风险利率 / 波动率 :检验策略是否超过无风险利率。这里隐含的夏普,是相对于无风险资产的信息比率。
S R b SR_b S R b = 同类策略中位数 :检验策略是否进入相似策略的前 50%。这需要同类策略的基准数据。
S R b SR_b S R b = 策略特定门槛 :检验策略是否达到商业上的要求,例如机构委托要求夏普为 1.0。
对每个基准,PSR 回答的问题都不一样。一个策略可能通过 P S R ( 0 ) = 0.99 PSR(0) = 0.99 P S R ( 0 ) = 0.99 ,却没通过 P S R ( 0.5 ) = 0.30 PSR(0.5) = 0.30 P S R ( 0.5 ) = 0.30 。前者说“你的策略超过了噪声”,后者说“你的策略很可能跑不赢夏普为 0.5 的基准”。两句话都对,只是关心的点不同。
实际报告时,基准要和你的投资决策匹配。如果你在决定是否配置资本,就应该使用能反映这笔资本其他用途的基准。
带贝叶斯先验的 PSR
如果你对真实夏普有先验分布,就可以计算 S R > S R b SR > SR_b S R > S R b 的贝叶斯后验概率:
P ( S R > S R b ∣ data ) = ∫ S R b ∞ p ( data ∣ S R ) p ( S R ) d S R ∫ − ∞ ∞ p ( data ∣ S R ) p ( S R ) d S R P(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 ( S R > S R b ∣ data ) = ∫ − ∞ ∞ p ( data ∣ S R ) p ( S R ) d S R ∫ S R b ∞ p ( data ∣ S R ) p ( S R ) d S R
如果先验是高斯分布 p ( S R ) = N ( S R 0 , σ 0 2 ) p(SR) = \mathcal{N}(SR_0, \sigma_0^2) p ( S R ) = N ( S R 0 , σ 0 2 ) ,似然也是高斯分布(夏普可以用中心极限定理作近似),那么后验同样是高斯分布:
P ( S R ∣ data ) = N ( μ p o s t , σ p o s t 2 ) P(SR | \text{data}) = \mathcal{N}(\mu_{post}, \sigma_{post}^2) P ( S R ∣ data ) = N ( μ p os t , σ p os t 2 )
其中:
μ p o s t = S R ^ / σ ^ S R 2 + S R 0 / σ 0 2 1 / σ ^ S R 2 + 1 / σ 0 2 , σ p o s t 2 = 1 1 / σ ^ S R 2 + 1 / σ 0 2 \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} μ p os t = 1/ σ ^ S R 2 + 1/ σ 0 2 S R / σ ^ S R 2 + S R 0 / σ 0 2 , σ p os t 2 = 1/ σ ^ S R 2 + 1/ σ 0 2 1
S R > S R b SR > SR_b S R > S R b 的后验概率为:
P ( S R > S R b ∣ data ) = Φ ( μ p o s t − S R b σ p o s t ) P(SR > SR_b | \text{data}) = \Phi\left(\frac{\mu_{post} - SR_b}{\sigma_{post}}\right) P ( S R > S R b ∣ data ) = Φ ( σ p os t μ p os t − S R b )
当先验是平坦先验(σ 0 → ∞ \sigma_0 \to \infty σ 0 → ∞ )时,μ p o s t → S R ^ \mu_{post} \to \widehat{SR} μ p os t → S R ,σ p o s t → σ ^ S R \sigma_{post} \to \hat{\sigma}_{SR} σ p os t → σ ^ S R 。后验概率就退化为 PSR。因此,PSR 就是平坦先验下的贝叶斯后验概率。
非平坦先验可以加入事先掌握的知识。如果你观察了 20 年间的 100 个量化策略,先验夏普均值为 0.3、先验标准差为 0.4,那么后验会把报告出来的夏普向 0.3 拉回去。这是一种收缩。
对大多数量化场景,平坦先验下的 PSR 已经够用。只有当你对策略类别有很强的先验信息时,贝叶斯版本才更有价值。
常见的 PSR 错误
实务中经常出现五种错误:
错误 1:用样本标准差代替夏普标准误。 夏普标准误应该使用上面推导的 σ ^ S R \hat{\sigma}_{SR} σ ^ S R 公式。若使用 σ ^ \hat{\sigma} σ ^ (收益率标准差),算出来的 PSR 会小 5 到 10 倍。这是最常见的错误。
错误 2:忘记非正态修正。 对偏度为负的策略,忽略 γ 3 \gamma_3 γ 3 会低估 σ ^ S R \hat{\sigma}_{SR} σ ^ S R ,从而高估 PSR。对典型的空波动率策略,修正幅度通常是 10% 到 30%。
错误 3:使用年化频率的夏普,却使用日频标准误计算 PSR。 f \sqrt{f} f 的缩放必须一致。如果 S R ^ \widehat{SR} S R 已经年化,σ ^ S R \hat{\sigma}_{SR} σ ^ S R 也必须年化。
错误 4:不说明基准就报告 PSR。 单独说“PSR = 0.95”是不完整的。基准是这句话的一半。始终报告 P S R ( S R b = X ) = 0.95 PSR(SR_b = X) = 0.95 P S R ( S R b = X ) = 0.95 。
错误 5:把 PSR 当成多重检验修正。 PSR 假设你只测试了一个策略。多重检验应该使用去膨胀夏普比率。m m m 个策略中最优策略的 PSR,大约会被 2 log m \sqrt{2 \log m} 2 log m 高估。
PSR 什么时候优于其他方法
有三种场景,PSR 是合适的工具:
单个、事先确定的策略 :你只有一个策略,没有搜索参数。PSR 回答“这个夏普在统计上能否和基准区分开?”
与非统计专业人士沟通 :PSR 读起来就是一个概率陈述,直观。置信区间和 p 值需要更多解释。
风险预算 :PSR 量化了夏普估计的不确定性。它可以帮助你确定仓位和风险限额。
多重检验使用 DSR,交叉验证诊断使用 PBO,参数优化诊断使用 Haircut Sharpe。PSR 只是工具箱中的一件工具。
PSR 与最短回测长度
下一篇文章中的最短回测长度(MBL)公式,正是通过反解 PSR 得到的:给定一个期望的 PSR 阈值,需要多大的 T T T ?两者的联系是:
M B L = arg min T [ P S R T ( S R b ) ≥ 1 − α ] MBL = \arg\min_T \left[PSR_T(SR_b) \ge 1 - \alpha\right] M B L = arg T min [ P S R T ( S R b ) ≥ 1 − α ]
这就是让 PSR 超过阈值的最小 T T T 。在大多数实际情况下(夏普差距为 0.5 到 1.0,α = 0.05 \alpha = 0.05 α = 0.05 ),MBL 是 3 到 15 年的日频数据。如果你的回测短于 MBL,PSR 就不可靠。你不能据此下结论说策略跑赢了基准。
关于 PSR 局限性的最后提醒
PSR 是一个有用的诊断工具,但它不是策略验证。PSR 为 0.99,表示测出来的夏普在统计上能和基准区分开。它不代表策略会在生产环境中表现良好,也不处理状态切换、容量限制或实现问题。PSR 只是整个诊断体系中的一块。
更诚实的表述是:PSR 告诉你是否值得进入下一步,比如样本外测试或模拟交易。它不会告诉你该不该投入资本。投入决策需要额外分析,PSR 本身无法给出答案。
PSR 与夏普置信区间
PSR 的一种替代方法是夏普比率置信区间:
C I 95 % = S R ^ ± z 0.975 ⋅ σ ^ S R CI_{95\%} = \widehat{SR} \pm z_{0.975} \cdot \hat{\sigma}_{SR} C I 95% = S R ± z 0.975 ⋅ σ ^ S R
对于基准 S R b SR_b S R b ,PSR 等价于检查 S R b SR_b S R b 是否位于 95% 置信区间内(单侧)。
假设 S R ^ = 1.3 \widehat{SR} = 1.3 S R = 1.3 、σ ^ S R = 0.45 \hat{\sigma}_{SR} = 0.45 σ ^ S R = 0.45 、T = 1260 T = 1260 T = 1260 (年化):
C I = [ 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] C I = [ 1.3 − 0.882 , 1.3 + 0.882 ] = [ 0.418 , 2.182 ]
相对于 S R b = 0 SR_b = 0 S R b = 0 的 PSR:Φ ( 1.3 / 0.45 ) = Φ ( 2.89 ) = 0.998 \Phi(1.3/0.45) = \Phi(2.89) = 0.998 Φ ( 1.3/0.45 ) = Φ ( 2.89 ) = 0.998 。95% 置信区间不包含 0。
相对于 S R b = 0.5 SR_b = 0.5 S R 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 Φ (( 1.3 − 0.5 ) /0.45 ) = Φ ( 1.78 ) = 0.962 。95% 置信区间不包含 0.5。
相对于 S R b = 1.0 SR_b = 1.0 S R 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 Φ (( 1.3 − 1.0 ) /0.45 ) = Φ ( 0.67 ) = 0.748 。95% 置信区间包含 1.0。
PSR 比置信区间更细致。置信区间说:“真实夏普在 0.418 到 2.182 之间。”PSR 说:“真实夏普超过 1.0 的把握是 75%。”两种说法都有效,但 PSR 更容易直接用于决策。
对单个基准,置信区间和 PSR 提供的信息相近。对多个基准,PSR 更紧凑,因为每个基准只需要一个数字。
短回测的 PSR
对短回测(T < 250 T < 250 T < 250 天),PSR 所依赖的中心极限定理近似较差。夏普估计量不服从正态分布,更适合使用 t 分布。
基于 t 分布的 PSR:
P S R t ( S R b ) = T T − 1 ( S R ^ − S R b σ ^ S R ) PSR_t(SR_b) = T_{T-1}\left(\frac{\widehat{SR} - SR_b}{\hat{\sigma}_{SR}}\right) P S R t ( S R b ) = T T − 1 ( σ ^ S R S R − S R b )
其中,T T − 1 T_{T-1} T T − 1 是自由度为 T − 1 T-1 T − 1 的 t 分布累积分布函数。
当 T = 60 T = 60 T = 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 Φ ( 1.6 ⋅ 59/252 ) = Φ ( 1.6 ⋅ 0.484 ) = Φ ( 0.774 ) = 0.781
t 分布 PSR:T 59 ( 0.774 ) = 0.779 T_{59}(0.774) = 0.779 T 59 ( 0.774 ) = 0.779
T = 60 T = 60 T = 60 时,差异还很小。T = 30 T = 30 T = 30 时,差异会更明显。
对非常短的回测(T < 30 T < 30 T < 30 ),Bootstrap 置信区间比正态或 t 分布近似都更可靠。
异方差下的 PSR
PSR 公式假设波动率恒定。如果回测期间波动率发生变化(异方差),标准误公式就需要调整。
对存在波动率聚集的策略,夏普标准误会大于独立同分布公式给出的结果,PSR 也会相应降低。
一个简单的调整方法是:使用每个子时期的实现波动率,计算加权夏普:
S R ^ h e t e r o = ∑ t r t / σ t 2 ∑ t 1 / σ t 2 \widehat{SR}_{hetero} = \frac{\sum_t r_t / \sigma_t^2}{\sqrt{\sum_t 1/\sigma_t^2}} S R h e t er o = ∑ t 1/ σ t 2 ∑ t r t / σ t 2
这就是“指数加权”夏普。标准误约为 1 / ∑ t 1 / σ t 2 1/\sqrt{\sum_t 1/\sigma_t^2} 1/ ∑ t 1/ σ t 2 。
如果需要更严格的处理,可以使用 GARCH(1,1) 条件方差。使用条件波动率计算的夏普,比无条件夏普更有效率,也就是方差更低。
生产环境中的 PSR
策略上线后,可以用实盘收益率计算 PSR。如果策略表现符合预期,实盘 PSR 应该和回测 PSR 接近。
如果实盘 PSR 明显低于回测 PSR,说明策略已经退化。可能的原因有:
容量:策略规模变大,更难执行。
状态:市场环境发生了变化。
拥挤:其他交易员也发现了这个策略。
衰减:优势已经被套利掉。
对已经上线的策略,要监控实盘 PSR。持续下降值得调查,单次下降可能只是噪声。
实际的 PSR 工作流
对一个研究项目,可以这样做:
运行回测,计算夏普。
计算相对于三个基准(0、0.5、1.0)的 PSR。
如果 PSR(0) < 0.9,就放弃。这个策略无法与噪声区分。
如果 PSR(0) > 0.9,但 PSR(0.5) < 0.5,说明策略超过了零基准,却没有超过典型主动策略。它处在边缘位置。
如果 PSR(0.5) > 0.9,但 PSR(1.0) < 0.5,说明策略超过了平均水平,却没有超过强基准。这个结果值得继续看。
如果 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 = ∑ j T j T = \sum_j T_j T = ∑ j T j 。
分时期的 PSR 可以揭示特定时期的风险。一个策略可能总体 PSR 很高,但在 2008–2012 年(金融危机期间)的 PSR 很低,这说明它有隐藏的状态风险。分时期 PSR 能把这个问题暴露出来。
PSR 与夏普检验统计量
有一个容易忽略的点:标准的夏普比率检验统计量是 t = T ⋅ S R ^ t = \sqrt{T} \cdot \widehat{SR} t = T ⋅ S R 。在 S R = 0 SR = 0 S R = 0 的原假设下,它近似服从标准正态分布。
PSR 是 Φ ( S R ^ / σ ^ S R ) \Phi(\widehat{SR} / \hat{\sigma}_{SR}) Φ ( S R / σ ^ S R ) 。代入 σ ^ S R ≈ 1 / T \hat{\sigma}_{SR} \approx 1/\sqrt{T} σ ^ S R ≈ 1/ T :
P S R = Φ ( S R ^ ⋅ T ) PSR = \Phi(\widehat{SR} \cdot \sqrt{T}) P S R = Φ ( S R ⋅ T )
如果 S R ^ = 0.05 \widehat{SR} = 0.05 S R = 0.05 (日频)、T = 252 T = 252 T = 252 :P S R = Φ ( 0.05 ⋅ 252 ) = Φ ( 0.794 ) = 0.786 PSR = \Phi(0.05 \cdot \sqrt{252}) = \Phi(0.794) = 0.786 P S R = Φ ( 0.05 ⋅ 252 ) = Φ ( 0.794 ) = 0.786 。
这是日频夏普相对于基准 0 的 PSR。年化后,S R ^ a n n u a l = 0.794 \widehat{SR}_{annual} = 0.794 S R ann u a l = 0.794 ,P S R ( 0 ) ≈ 1.0 PSR(0) \approx 1.0 P S R ( 0 ) ≈ 1.0 ,也就是几乎可以确定它超过 0。
但等等。σ ^ S R ≈ 1 / T \hat{\sigma}_{SR} \approx 1/\sqrt{T} σ ^ S R ≈ 1/ T 这个代入,只适用于独立同分布收益率且 S R ≈ 0 SR \approx 0 S R ≈ 0 的情况。对非零夏普,方差公式还包含夏普本身。
完整的 PSR 公式会处理 σ ^ S R \hat{\sigma}_{SR} σ ^ S R 对 S R ^ \widehat{SR} S R 的依赖。简化公式 Φ ( S R ^ ⋅ T ) \Phi(\widehat{SR} \cdot \sqrt{T}) Φ ( S R ⋅ 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。夏普方差公式的基础文献。