虽然常常出的报告时不时就几千甚至上万字,但我依然对写作是感到害怕的。小时候语文老师让我以校门口的大树为题写个600字作文,我憋了足足一堂课的时间没写一个字,终于交卷了才冲忙写了一句:我们校门口没有树。所以你能明白,为啥这个博主那么懒,上一篇文章都是好几个月前的了。
——忙里偷闲的博主
Matlab的Financial ToolBox 提供了一些投资绩效指标的函数,并且说明文档还阐述得挺详细的。我在这里除了部分翻译和归纳以外,还在它的帮助文件基础之上做了些补充。策略啥的你就别问了,能告诉你的我都倾囊相授了。另外就是,关于比较基准的问题,那是另一个范畴的故事,有兴趣的读者可以参考文献1。
开始之前还是先做个说明,任何指标都是有缺陷的。然而没有这些指标,你无从比较投资绩效的好坏。好坏不分,提高收益便无从谈起了。所以说在用这些指标的时候,你不仅需要了解指标如何能算得上好,还需要了解它为何如此表现,再要弄清改善绩效的根本。
(查看Mathworks提供的投资绩效指标的帮助文档可点击这里)
本文阐述了以下5种类型的投资绩效指标
下面将逐一讲述这些指标的具体定义以及如何使用
第一类指标,也被称为“经典”指标,它们多少都与CAPM模型有些关联。这些指标包括夏普比率、信息比率、跟踪误差。把这些投资绩效指标称作“绝对”,可能只是因为翻译的问题,它们可以用于比较不同策略的表现。
1. 夏普比率(Sharpe Ratio)
Matlab函数:sharpe
本文介绍到的所有其他指标都不会比夏普比率有更高的知名度。它的公式非常简单,就是策略的年化收益与无风险利率的差,除以策略的年化波动率。夏普比率的优缺点都是广为人知的,但是它的实用性也是业界所认可的。它在众多指标中的地位就好比于BSM之于期权定价模型中的地位。
它的缺陷几乎和它自身一样闻名遐迩。对它的批评集中在以下几点。首先,无风险利率的选择是非常重要的。比如某项策略的收益6%,而无风险利率3%,但是融资利率高达6%的时候,策略实际上是无利可图。其次,夏普比率极度依赖于过去的历史表现(似乎没有哪个是不依赖的?)一个策略在过去表现如何,不代表它的将来一定会表现得怎样。再次,夏普比率基于均值方差理论,它实际上要求资产的投资回报率服从正态分布。然而实际情况并非如此。而且波动率估计本身就存在误差,基于其计算的夏普比率也有估计误差的问题。最后,究竟是使用账户规模还是占用资金来计算会产生极大不同。
2. 信息比率(Information Ratio)
Matlab函数:Inforatio
信息比率是从主动管理的角度描述风险调整后收益。夏普比率中的分母是策略回报率的标准差,或者说反映策略本身的绝对风险。而信息比率是使用超额收益率的标准差,仅反映策略相对大盘(Benchmark)的超额风险。信息比率越高,该基金表现持续优于大盘的程度越高。
当B是无风险资产,信息比率就会变成夏普比率。所以夏普比率是信息比率的一个特例。现实中无风险资产本身,也是有波动的,所以实际上这里的夏普比率还是会和信息比率有差异。夏普比率更多用于比较指数的被动投资策略好坏,而信息比率衡量的是主动管理型基金偏离基准承担额外一单位的风险而获得的收益。
3. 跟踪误差(Tracking Error)
Matlab函数:Inforatio
跟踪误差一般用于指数基金管理绩效的比较,它是二者收益率时间序列之差的标准差。如果跟踪误差越小,那么基金经理管理水平能力越高。
第二类相对投资绩效指标被称为风险调整后收益指标。这个分类并不太严谨,比如前面的夏普比率也可用来衡量风险调整后的收益。而像信息比率,也能用来表示相对投资绩效。所以二者差异并非太明显,这样的分类仅仅为了方便记忆。
相对投资绩效指标可使用Matlab函数portalpha来得到。Matlab提供了多个参数,参考下面表格。
1. 事后Alpha(即詹森α,Jensen's Alpha)
事后Alpha就是用事后证券市场线(SML)作为业绩评价的基准。假设在事前就知道,资产的期望收益率是线性函数,无风险收益率加上风险溢价乘以资产的系统风险值β,风险溢价就是市场组合收益超过无风险收益的部分。也就是说
但是这些参数你在事前是不可能知道的,只能通过事后对数据的拟合来得到参数值大小。具体来说就是,如果给定资产的收益率、市场指数的收益率以及无风险利率,那么通过简单的线性回归就可以得到事后的期望收益率。将上面的CAPM等式改写一下就会变成
这里的αA就是回归的截距项,由于参数估计都是事后的,所以被称作事后α。它可以被解释为,在某个期间内资产A的收益与其承受系统性风险所必要补偿的差值。基金经理的水平可以用事后α来衡量。
2. M^2值(Modigliani and Modigliani Risk-Adjusted Return)
和夏普比率类似,M^2也是使用标准差对风险计量,并以事后CML为基础。模型假设可以通过无风险利率进行借贷,构造一个与市场组合同等风险大小的投资组合,那么这个投资组合的收益率与市场组合收益率的差值就是M^2。M^2衡量的是假设某资产风险和市场组合风险一样时的收益率。也就是
括号里面的公式恰恰是夏普比率。因此M^2的指标评价会和夏普比率效果相同。
3. GH方法(Graham-Harvey measures,点击这里查看帮助)
M^2的方法实际上是夏普比率的一个转换形式。而M^2所假设的前提是有问题的。只有当无风险利率代表的资产具有0方差的时候,才能简单用直线来调整收益风险的大小。然而现实世界中,哪怕被认为无风险资产代表的国债,和利率、债券之间相关性也不为0,自身的价格波动也不为0。因此John Graham 和 Campbell Harvey在他们的基础之上,引入了市场有效前沿的假设,重新定义了M^2指标,分别是GH1和GH2。
首先解释下GH1。利用无风险资产和市场组合可以构造市场有效前沿曲线,通过调整配置可构造在前沿曲线上的某投资组合。当这一构造投资组合具有和资产A同样的风险大小时,二者收益之差就是GH1。
而GH2的方法与GH1类似。但现在并非利用市场组合构造有效前沿,而是用资产A和无风险资产构造有效边界。在有效边界上移动组合,使构造的组合与市场组合具有同样的风险大小,两者之间的差值就是GH2。
这里用几何图形来解释会更直观。如下两图所示。
图中的前沿曲线并非直线,虽然它们看起来很像直线。这是和M2最大的区别。如果要计算GH1和GH2的值,则需要先计算出前沿曲线,使对比的点在曲线上移动。
夏普比率同时考虑了策略的收益率和波动率。但是波动率本身并非绝对坏的东西。对于高波动率带来的收益,是我们乐于看到的。我们所关心的仅仅是下跌时候的波动率水平。夏普比率把上涨和下跌的波动率置于平等的位置,简单用于比较会很容易得到错误的结论。
比如下面A、B两个策略。其中A策略对数收益由两个独立随机变量分布构成,其中之一收益为0标准差1.5%,另外之一收益30%标准差10%。而B策略对数收益具有10%均值,10%标准差的正态分布。从直观上理解,A策略在收益的分布上具有更大的不确定性,然而它在右端具有明显的厚尾,那意味着A策略赚大钱大概率要高于B,但是结果的不确定性也大。如果单纯比较夏普比率,B策略反而拥有更高的夏普比率,但图上非常明确告诉了我们,A策略更优。原因其实很简单,A策略虽然不确定性高,但是它赚大钱的概率要高于B。而夏普比率把A的所有不确定性都考虑进风险项,结果导致较低的夏普比率。
从上面这个例子可以看到,夏普比率对于非正态的收益率分布曲线无能为力,而且会显著低估或者高估策略的表现。有见及此,一个简单的修正方法便是,使用下偏矩来作为风险度量方法。下偏的意思很简单,就是只考虑收益率为负或者低于基准参考指标的值,计算它们的矩大小,便可以得到下偏矩。用数学公式写出来就是
其中,τ表示业绩参考指标,比如指数收益率或者无风险利率。n是阶数,它是非负的整数。如果n=0,那么LPM(0)表示的是收益率低于τ的时间占比。如果n=1,那这个就表示低于目标水平τ的平均偏离程度。当n=2,τ是平价收益率时候,LPM(2)就是半方差。
按相反的思路,便可以得到上偏矩的表达式。
运用夏普比率是回报和风险比值的这一逻辑,可以得到不同的比率指标。Matlab的lpm函数说明给出了其中的三种,分别是Omega ratio、Sortino ratio以及UPR ratio。它们的计算公式分别如下
数学公式 |
Matlab 表达式 |
Omega = lpm(-Data, -MAR, 1) / lpm(Data, MAR, 1) |
|
Sortino = (mean(Data) - MAR) / sqrt(lpm(Data, MAR, 2)) |
|
Upside = lpm(-Data, -MAR, 1) / sqrt(lpm(Data, MAR, 2)) |
国内很多程序化或者量化策略都喜欢用最大回撤来衡量风险,并简单用收益除以最大回撤值来计算风险调整收益。先不讨论这种方法对不对,最大回撤在行业内也有着非常广泛的应用。
所谓最大回撤,意思是某资产的净值曲线在某一时刻与前面最高净值之差(或负收益)的最大值是多少。即从净值曲线上某一时刻出发,下跌的最大幅度。这一指标的重要性显而易见,只要一次较大的回撤,那么不管此前积累多少财富,策略都可能陷入失败。如果你决定将量化交易作为终身事业来对待,那么除了最大回撤以外,最长回撤期也是非常重要的。最长回撤期衡量的是,当某项策略开始回撤时,再返回到前高或者创新高的时间需要多久。最大回撤和最长回撤期是两个不相干的指标,从图上就可以看到二者没有必然的联系。在开始建立你的算法交易前,必须先要想清楚,自己能承受的最大风险以及最长的回撤期是多少。
同样与夏普比率类似,如果以超额收益去除以最大回撤,就能得到Calmar比率。另外,如果是超额收益除以过去三年最大年度回撤与10%(一个随意选取的量)的差值,就得到Sterling比率。有时候也使用最大的5次回撤平均值。由于采用平均值,能避免受到奇异值的影响。而极端事件在实际中并不会经常发生,因此平均值更优。
Matlab的Financial Toolbox工具箱中用来计算最大回撤以及最久回撤期的函数是maxdrawdown,用法也很简单,输入变量只需要净值曲线就可以了。
业绩的可持续性是非常重要的。相比于比较收益大小,比较可持续性将会是更好的选择。一个策略如果稳定,净值曲线足够平滑,那么只要加上杠杆就能得到任意想要的收益。虽然实现可持续性比较困难,但是我们还是希望至少能找到某种测算方法,实现对持续性的监控。
国内的程序化多用R方来做指标,认为R方越高可持续性越好。然而R方衡量的是收益和时间的线性关系。如果遇上类似前面的有偏分布,遇到净值偶发性大幅上升的情形,那么R方同样会失效。而简单地比较连续两段时间段内的净值曲线,行情可能会突然以意向不到的方式展开,也可能瞬间结束,所以也不可能产生任何统计上的显著结果。
虽然Hurst指数尚未成为市场标准化。但是行业内已有不少针对Hurst指数的择时策略。Hurst指数大于0.5就说明业绩具备可持续性,小于0.5就说明存在反持续性或均值回复特征。Hurst指数是基于图形的自相似特征。只要数据本身满足分形特性,就可利用Hurst指数来计算持续性特征。
首先需要理解重标极差法(R/S分析)。R/S分析是由英国水文学家Hurst在1951年提出,并由Mandelbrot和Peters等人将R/S分析推广到证券市场,分析股票走势的变化。其中Peters把这种方法作为其分形市场假说最重要的研究工具进行了详细的讨论和发展,并做了很多实证研究。
对于某时间序列{x(t)},定义偏差序列
其中D(t,N)为第N个周期的累计偏差,M(N)为第N个周期的均值,那么第N个周期的极差被定义为
而S的含义是第N个周期的标准差,即
那么就可以得到第N个周期的重标极差(rescaled range),即R/S(N)。再令
便可以得到时间长度为n的重标极差。根据Hurst的实证公式
两边同时取对数
利用最小二乘法便可以得到H的估计值。正如一开始所说,当H=1/2时,{x(t)}服从随机游走;当H>1/2时,{x(t)}具有可持续性;当H<1/2时,{x(t)}具有反转特性。
遗憾的是,Matlab自身没有计算Hurst的函数。但是国内郑志勇编著的《金融数量分析——基于Matlab编程》有专门介绍Hurst的一节。编写Hurst并不复杂,VBA代码也很简单,读者可尝试一下。其中可能要用到Matlab的reshape和repmat函数。
这个图是使用沪深300指数对数收益率计算的242个交易日滚动Hurst指数以及沪深300走势的对比图。从图上看出,沪深300的Hurst指数都运行在0.5的上方,下边界是0.55,上边界是0.65。它可用来做交易策略,但这里并不打算展开。
[1] 菲利普·劳顿,托德·扬科夫斯基编,潘席龙等译.《投资绩效测评——评估和结果呈报》-机械工业出版社出版。这是CFA协会投资系列丛书中的一本。本文的内容有部分参考或摘选自第一章。而同样的章节内容也可以在丛书另一本《投资组合管理——动态过程》里面找到。
[2] 关于夏普比率的优缺点以及sortino比率、Hurst指数,我是参考了尤安·辛克莱(Euan Sinclair)著、董斌等译、上海交通大学出版社出版的《波动率交易》。这本书本来是讲期权交易的,但是后面提到交易评估时不可避免提到业绩指标的问题。题外话,这个书对于掌握期权交易非常有帮助,已经很久没读到这么好的书了。这个系列的另外一本书《对冲基金手册》也写得很好,里面也有一些指标的介绍。
[3] 关于最大回撤和最长回撤期的指标,在量化交易里面用的比较多,可以参考欧内斯特·陈(Ernest P.Chen)著、商诺奇等译、东北财经大学出版社出版的《量化交易》。这个书用喝一杯咖啡的时间就能看完,非常简单的一本书。
[4] 杨爱军、孟德锋的《基于下偏矩风险度量的我国开放式基金业绩评价》,这个文章可以在百度上面找得到,有关下偏矩及其他比率的介绍可以在这个文章里面找到。作者还用了主成分分析来构建几个因子,为基金评分。
[5] 关于GH指标,主要参考了这个blog里面的内容http://people.duke.edu/~charvey/performance_eval/lettab1.htm
[6] Hurst指数的编写可以去看郑志勇的《金融数量分析——基于Matlab编程》。这个书适合Matlab的初学者,尤其是从事金融行业的人员。我的版本是09年的了,不知道后来有没有更新。有些内容可以在作者的博客上面找到。