夏普比率:从头推导
从第一性原理完整推导夏普比率:算术均值与几何均值、期望值、方差、Lo 的偏差修正,以及为什么年化很重要。如果你不知道夏普比率从哪里来,就很容易用错它。
每个量化研究员都知道这个公式。但大多数人推不出标准误,解释不了为什么几何均值夏普和算术均值夏普不同,也说不清自己报告的“夏普 2.3”为什么可能被高估了 15%。这篇文章把整件事推一遍。
我们从一组收益率开始,逐步构造夏普比率;然后在非正态条件下推导它的期望和方差,处理偏差修正,最后说明年化的依据。看完后,你会知道公式里的每一项对应什么,也会明白报告夏普为 1.5,不等于真实夏普就是 1.5。
定义
设 是时点 的简单收益率,。算术平均收益率为:
样本标准差为:
按照 William Sharpe 最初在 1966 年给出的定义,夏普比率是:
公式就这么多。两个数相除。本文剩下的内容,讲的是你从有限样本中取出这两个数并据此下结论时,会出什么问题。
算术均值与几何均值:容易被忘掉的那一项
大多数实现使用算术平均收益率。几何平均收益率,也就是能正确反映复利的那个收益率,是:
在收益率和方差都较小时,这个近似成立。第二项 是方差拖累。对年化波动率为 10% 的策略来说,拖累是 ,也就是每年 50 个基点。对波动率为 20% 的策略来说,拖累就是 200 个基点。这就是把均值估错的代价。
如果你用算术均值计算夏普,就等于把几何均值里的方差拖累算到了自己头上。这是行业里的标准做法,但严格说并不诚实。更诚实的计算方式是使用几何均值,得到复合意义下的夏普比率:
对高波动策略来说,算术夏普和几何夏普之间的差距并不小。年化波动率为 30% 时,算术夏普 2.0 会变成几何夏普 1.85。大多数报告系统会把这点藏起来。López de Prado 的 Advances in Financial Machine Learning(2018,第 14 章,ISBN 978-1-119-48208-6)在策略报告的语境下讨论了这一点。
夏普估计量的期望值
假设收益率是独立同分布的,均值为 ,方差为 ,偏度为 ,超额峰度为 。样本均值 是无偏的:。样本方差 也是无偏的:。
但比值 有偏。原因在于 是对 的含噪估计,而比值的分布并不等于期望值的比值。
用 delta method 在 附近展开 ,可以推导这个偏差。定义 。在 附近做一阶泰勒展开:
取期望:
第一个期望为零。第二个是 。由于小样本下 向下有偏(卡方分布平方根的期望会向下偏),这个值为负。保留首阶项:
所以 。代入后:
偏差为正,而且与 成正比。对 (一年的日频数据)来说,偏差大约是 ,也就是相对真实夏普的 0.1%。对 (一年的周频数据)来说,偏差是 ,也就是 0.4%。对很短的样本,这个偏差还会和多重检验偏差(见“去膨胀夏普比率”一文)以及自相关偏差(见“Haircut Sharpe”一文)叠加。
夏普估计量的方差
在原假设 下, 的方差是检验夏普比率的基础。还是从刚才的泰勒展开出发,但这次计算二阶矩:
对独立同分布的收益率,有 、,并且 (保留首阶项)。因此:
当 较小时,方差约等于 。这是教材里的结果:在零均值原假设下,样本夏普的方差是 ,标准误是 。
但这个结果只对高斯收益率成立。加入偏度和超额峰度后,方差会多出一些项。包含非正态修正的完整公式是:
这是 Bailey 和 López de Prado(2014)在《The Deflated Sharpe Ratio: Correcting for Selection Bias, Non-Normality, and Multiple Testing》中给出的公式,López de Prado 也在 Advances in Financial Machine Learning(2018,第 14.7.2 节)中重现了它。
非正态修正不能忽略。偏度为负的策略(空波动率策略通常如此),其夏普方差会大于均值和标准差相同的高斯策略。直觉上,这是因为少数几个巨大的负收益给均值估计带来的噪声,比标准差能够抵消的更多。一个偏度 、夏普为 1 的典型空波动率策略,其夏普方差大约是参数相同的高斯策略的 1.5 倍。
Lo 的偏差修正
Andrew Lo(2002)在《The Statistics of Sharpe Ratios》中推导了一个更精细的偏差修正,它还考虑了收益率的自相关。修正后的夏普比率为:
等等。Lo(2002)更常被引用的修正其实简单一些:它调整夏普比率的标准误,以反映序列相关性。不过,他推导的夏普比率本身的偏差修正大致是:
其中 是收益率的一阶自相关。第一项是标准的小样本偏差。第二项来自正自相关:正自相关会降低有效样本量,从而抬高夏普比率。“Haircut Sharpe”一文会详细推导这一点。
夏普比率的年化
年化公式很简单,但实际中经常用错。如果收益率的观测频率是 (日频取 ,周频取 ,月频取 ),年化夏普为:
依据是:方差随时间线性增长,标准差按 增长,而夏普是均值除以标准差。如果把时间放大 倍,方差放大 倍,标准差放大 倍,夏普也就放大 倍。
但这假设各期收益率相互独立。对股票策略的月度收益率来说,这个假设大致合理。对有明显自相关的日收益率来说,假设就不成立了。对强均值回归的高频收益率来说,偏差会很严重。
还有一个问题是该用什么频率。用 把日频夏普年化是惯例,但这样会掩盖样本偏差。5 年的日频回测有 ,偏差为 。5 年的月频回测有 ,偏差为 。后者的偏差大 20 倍。标准误也不同:日频夏普为 0.1 时,标准误是 ;月频夏普为 0.1(用 年化)时,标准误是 。
实际含义很直接:能用日频数据就用日频数据。偏差更小,标准误更小,抽样分布也更接近高斯分布(中心极限定理)。
一个完整例子
考虑一个有 5 年日频收益率的策略(),日均收益率 ,日标准差 ,没有偏度、超额峰度和自相关。样本夏普为:
年化后:。
零值原假设下的标准误:(日频)。年化后:。
所以,真实年化夏普的 95% 置信区间大约是 。
这个区间包含零,也包含 1.0,还包含“你根本没有优势”这种可能性。如果在 0.79 的夏普旁边加一颗星号,就会误导读者。
import numpy as np
T = 1260
mu, sigma = 0.0005, 0.01
sr_daily = mu / sigma
sr_annual = sr_daily * np.sqrt(252)
se_daily = 1.0 / np.sqrt(T)
se_annual = se_daily * np.sqrt(252)
print(f"Daily Sharpe: {sr_daily:.4f}")
print(f"Annual Sharpe: {sr_annual:.4f}")
print(f"95% CI (annual): [{sr_annual - 1.96*se_annual:.3f}, {sr_annual + 1.96*se_annual:.3f}]")
5 年回测得到 0.79 的夏普,看起来还不错。但置信区间才说明了真实情况。这也是为什么下一篇文章介绍的概率夏普比率(PSR),比单独报告一个夏普更适合总结回测结果。
报告夏普时,这些信息都要给
如果你报告夏普比率,至少还应报告:
- 样本量 和收益率频率。
- 偏差修正方法(Lo 或 AFML 公式)。
- 考虑非正态性的标准误(使用 和 )。
- 置信区间,而不只是点估计。
- 使用的是算术均值还是几何均值。
没有置信区间的“夏普 2.0”不算信息,只算营销。这个模块的下一篇文章会推导概率夏普比率,它用一个数字概括:相对于某个基准,你应该对报告出来的夏普有多大把握。
信息比率是一个特例
信息比率(IR)就是把夏普比率应用到主动收益率上,也就是组合相对于基准的收益率:
推导过程完全一样。只需要把 替换成平均主动收益率,把 替换成主动收益率的标准差,偏差、方差和标准误公式都可以直接使用。
假设一个组合的跟踪误差为 5%,主动收益为 3%,则 IR 为 0.6。高斯假设下,标准误约为 (IR 与收益率使用相同频率)。如果 5 年的月度主动收益率有 个样本,标准误为 。95% 置信区间为 。
IR 和夏普一样,也有多重检验问题。搜索很多主动策略后,总会有一个策略碰巧得到很高的 IR。去膨胀信息比率(与 DSR 对应)就是用来修正这个问题的。
稳定帕累托分布下的夏普比率
大多数金融收益率序列都有厚尾。高斯假设用起来方便,但通常不完全正确。稳定帕累托分布(或 -stable 分布)是它的一种推广,可以包含厚尾情形。
对特征指数为 的 -stable 分布( 时是高斯分布, 时有厚尾),夏普比率仍然定义为 ,但标准误公式会改变。
当 时,方差可能是无穷的(事实上只要 就可能如此)。夏普比率仍然可以定义,但基于方差的标准误会失效。替代做法是使用稳定分布的尺度参数。
实际回测大多假设收益率服从高斯分布或接近高斯分布,然后使用基于方差的夏普。这在尾部厚度中等时大致可行。对尾部风险极端的策略(例如危机期间的空波动率策略),高斯近似就很差。
不同收益率定义下的夏普比率
收益率的定义会影响夏普比率。常见定义包括:
简单收益率:。大多数股票策略都用它。
对数收益率:。理论推导常用它;收益率较小时,它和简单收益率近似相等。
超额收益率:。用于相对于无风险利率评估策略。
主动收益率:。用于相对于基准评估主动组合管理。
在小收益率条件下(比如 ),这四种定义得到的夏普比率都相近。对大收益率(加密货币、杠杆 ETF、杠杆外汇)来说,差异就不能忽略了。
对数收益率的聚合性质更好:对数收益率可以沿时间相加,简单收益率不行。计算多期收益率的夏普时,更适合使用对数收益率。
作为频率学派估计量的夏普比率
夏普比率估计量是数据的一个函数。在假设的数据生成过程中,它有自己的抽样分布。上面推导出的偏差、方差和渐近正态性,都是这个估计量的性质。
贝叶斯方法会把夏普比率当成一个带有先验分布的参数,再用数据更新先验,得到后验分布。频率学派的夏普比率估计量,可以看成平坦先验下的后验均值。
对夏普比率来说,选择频率学派还是贝叶斯视角,主要是哲学上的选择。两者会给出相近的点估计,但量化不确定性的方式不同:置信区间、可信区间,或者超过某个基准的后验概率。
对大多数量化研究场景,频率学派框架已经够用。如果你对策略类别有很强的先验信息,贝叶斯框架会更有用。比如:“我们所有的动量策略,夏普都在 [0.3, 1.5] 之间。”
对夏普比率的批评
人们对夏普比率有几类批评:
批评 1:会惩罚上行波动。 夏普比率把上行和下行波动一视同仁。一个正收益很大、负收益很小的策略,可能比均值相同但绝对波动更小的策略得到更低的夏普。Sortino 比率使用下行偏差,可以处理这个问题。
批评 2:忽略路径依赖。 一个收益稳定的策略,和一个中间波动很大但最终复合到相同终点的策略,可能有相同的夏普。Calmar 比率使用最大回撤,可以补充这一点。
批评 3:对异常值不稳健。 一个极端收益就可能主导夏普比率的计算。稳健估计量,例如中位数绝对偏差和缩尾标准差,可以缓解这个问题。
批评 4:非平稳时会出现病态行为。 如果收益率分布随时间变化,一个总体夏普就会产生误导。滚动夏普可以处理这个问题。
这些批评在特定场景下都成立。对平稳、近似对称的收益率分布,夏普是一个有用的总结统计量。对非平稳或不对称的分布,还应同时看其他指标,比如 Sortino、Calmar 和条件夏普。
夏普比率与资本配置
如果你相信回测夏普就是真实夏普(这是一个很强的假设),Kelly 准则会给出最优资本配置:
对夏普为 1.0、波动率为 15% 的策略,。所以,应该把 6.67% 的资本配置给这个策略。实际中为了保守,通常使用半 Kelly 或四分之一 Kelly,也就是 1.67% 到 3.33%。
Kelly 仓位应该使用 Haircut Sharpe,而不是报告出来的夏普。如果报告夏普为 1.5,而 Haircut Sharpe 是 1.3,那么用 1.5 算出来的 Kelly 仓位会高配 15%。
大多数量化团队不会直接使用 Kelly。他们使用基于风险的配置方法,例如目标波动率为 10% 时,仓位大小就是 。夏普比率会影响配置,但不会直接决定配置。
关于计算夏普的最后一点提醒
实际实现时,有几个问题要留意:
-
能用日收益率就用日收益率。 月频或周频收益率的偏差和标准误更大。对流动性较好的策略,日频是标准做法。
-
谨慎去均值。 如果你使用超额收益率()计算夏普,就要始终一致地减去无风险利率。无风险利率有时算进去、有时不算,会得到毫无意义的结果。
-
处理缺失数据。 如果某些日子没有交易(节假日、半日市),收益率是 0,不是缺失值。把零收益日放进夏普计算,会降低均值并抬高标准差。是否纳入这些日期,要提前决定。
-
正确年化。 日频夏普乘 得到年化夏普;周频乘 ;月频乘 。不要混用频率。
-
报告样本量。 60 个日收益率算出来的夏普,和 1260 个日收益率算出来的夏普,可信度完全不是一回事。始终报告 。
遵守这五条,你报告的夏普才经得起追问。否则就经不起。
状态切换下的夏普比率
真实金融收益率往往来自多个状态的混合:高波动、低波动、趋势和均值回归。跨状态计算的夏普比率,是各状态夏普的加权结果:
其中, 是状态 的概率, 和 是该状态的均值和标准差, 是状态之间的相关系数。
考虑一个两状态模型。高波动状态的参数为 、、;低波动状态的参数为 、、:
年化后:。这个策略看起来有 1.27 的夏普,但它主要由低波动状态贡献。在高波动状态下,策略的预期收益为零。如果未来高波动状态出现得比回测期间更频繁,策略的真实夏普就会更低。
对状态切换策略来说,诚实的夏普应该按状态概率加权,同时明确说明状态概率本身的不确定性。大多数报告系统会把这一点藏起来。
多资产策略的夏普比率
对由多个资产或策略组成的组合,夏普比率取决于协方差矩阵:
其中, 是权重向量, 是平均收益率向量, 是协方差矩阵。
使夏普比率最大的组合是切点组合:
其最大夏普为:
这是均值-方差组合理论的基础结果(Markowitz,1952)。任何其他组合的夏普都不会超过 。
实践中, 和 都是从数据中估计的,因此会有估计误差。实现出来的夏普通常低于估计出的最大夏普。收缩估计量(Ledoit-Wolf)是降低估计误差的标准方法。
夏普比率与诺贝尔奖
William Sharpe 在 1990 年获得诺贝尔经济学奖,与 Harry Markowitz 和 Merton Miller 共同获奖,获奖工作涉及资本资产定价模型和夏普比率。夏普比率至今仍是金融领域最常用的风险调整后收益指标。
诺贝尔奖主要表彰的是 CAPM,夏普比率是其中的一部分。CAPM 本身已经被大量检验,实证证据大体上否定了它。夏普比率之所以留下来,是因为即使 CAPM 不成立,它仍然是一个有用的描述性统计量。
夏普比率一直被沿用,不是因为它是最好的指标,而是因为它简单、直观,只需要一条收益率序列就能计算。更好的指标确实存在,比如 Sortino、Calmar 和条件夏普,但它们需要更多数据或更多假设。夏普比率是总结风险调整后收益时成本最低的办法。
实务中的夏普比率
在行业里,夏普比率常用于:
- 跨资产类别比较策略。
- 风险预算和资本配置。
- 业绩归因。
- 营销材料和投资者报告。
每一种用途都有自己的前提:
- 策略比较:要修正自相关(Haircut)、多重检验(DSR)和非正态性。
- 风险预算:要使用 Haircut Sharpe,而不是报告出来的夏普。
- 业绩归因:要把夏普拆解到各个信号成分。
- 营销和报告:要给出置信区间和统计诊断。
一份严肃的研究报告会把这些都交代清楚。营销报告通常只给出一个裸夏普。差别就在于:前者是在做诚实的研究,后者是在做不诚实的营销。
最后一句
夏普比率是一个有用的风险调整后收益总结指标,但它并不完美。它假设正态性、独立性和平稳性,而真实金融收益率不可能完全满足这些假设。
诚实使用夏普比率的人会:
- 报告样本量和收益率频率。
- 报告经过非正态修正的标准误。
- 报告置信区间。
- 修正自相关(Haircut)。
- 修正多重检验(DSR)。
- 计算相对于基准显著性的 PSR。
- 计算样本量是否足够的 MBL。
- 计算过拟合风险的 PBO。
只做其中一项都不完整。把这些放在一起,才是完整的判断。诚实的夏普比率是一个由多个数字组成的统计量,不是一个单独的数字。
参考文献
- Sharpe, W. F. (1966). “Mutual Fund Performance.” Journal of Business, 39(1), 119–138.
- Lo, A. W. (2002). “The Statistics of Sharpe Ratios.” Financial Analysts Journal, 58(4), 36–52.
- 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.
- López de Prado, M. (2018). Advances in Financial Machine Learning, Ch. 4 and 13. Wiley. ISBN 978-1-119-48208-6.