之前两篇文章对若干资产配置模型进行了回测分析,本文重点关注风险平价模型及其优化,考察优化后的效果。
01
风险平价
再次对风险平价(Risk Parity)模型理论进行推导,过程与前文类似,跳过不影响悦读。
02
改进思路
风险平价策略通常用方差来衡量风险,最简单的方式是用样本协方差作为总体协方差的估计量,这也是之前回测时的方法。这样求得的协方差估计量存在诸多问题,另一种常用的估计量是Ledoit&Wolf(2014)提出的压缩估计量。这种估计方法常用的主要原因在于python中有现成的函数,不用自己写,当然效果也不错,不然就不会有人用了,因子加权中对比了简单估计量和压缩估计量的差别,可以看出,在因子加权中用压缩估计量比简单估计量好非常多。
更细致的分析协方差,协方差是资产波动率和资产间相关系数的乘积。大量研究表明,资产间相关系数在短期会因市场波动不稳定,但具有长期关联性,长期会因为均值回复而趋于稳定。 波动率方面,资产的波动率序列具有自相关性,因此过去的波动率对于未来会有指示作用,可以用历史数据预测作为未来资产协方差的估计量。但同时,自相关性具有衰减性的特点【1】【2】,离得越近的数据,包含的信息越多,指示意义更强。基于此,可以考虑对波动率进行衰减加权,实质上也就是对协方差的衰减加权。
具体操作为,假如用过去1一年的数据估计协方差,可以将数据分为4个季度,分别估计各组的协方差,按照时间赋予不同的权重,距离越近的,权重越大。
除此外,另一种考虑方式是,风险的度量不止包括方差,还有多种指标,方差是将高于期望收益和低于期望收益的偏离都视为风险,但实际上投资者可能更关注低于期望收益的偏离,下行波动率用来修正方差的这一局限。因此,也用下行波动率作为风险的度量优化风险平价模型。
综上,给出了三种优化方法:协方差的压缩估计量、协方差的衰减加权估计量、下行波动率,后面回测也尝试对这三种方式进行组合。
03
回测说明
资产选择
- 权益:中证全指 000985
- 债券:中证全债 H11001
- 商品:中证商品 H11061
- 全球指数:日经225 N225.GI,标普500 SPX.GI
回测区间:数据200601-201812,回测从2007年1月开始
调仓频率:年度
协方差估计方式:滚动
衰减权重:[0.1,0.2,0.3,0.4]
结果评价指标:年化收益率、年化波动率、夏普比
04
代码
代码与前文基本一致,这里只给出有差异的部分,详细代码和参考报告后台回复“代码”。
衰减加权
代码语言:javascript复制def getSigma(datas,method = 'Simple'):
asset = datas.columns
datas['n'] = np.arange(datas.shape[0])
datas['group'] = pd.qcut(datas.n,4,labels = False)
if method == 'Simple':
sigma_1 = datas.loc[datas.group==0,asset].cov()
sigma_2 = datas.loc[datas.group==1,asset].cov()
sigma_3 = datas.loc[datas.group==2,asset].cov()
sigma_4 = datas.loc[datas.group==3,asset].cov()
sigma = 0.1*sigma_1 sigma_2*0.2 sigma_3*0.3 sigma_4*0.4
elif method =='Ledoit':
sigma_1,a = ledoit_wolf(datas.loc[datas.group==0,asset])
sigma_2,a = ledoit_wolf(datas.loc[datas.group==1,asset])
sigma_3,a = ledoit_wolf(datas.loc[datas.group==2,asset])
sigma_4,a = ledoit_wolf(datas.loc[datas.group==3,asset])
sigma = 0.1*sigma_1 sigma_2*0.2 sigma_3*0.3 sigma_4*0.4
sigma = pd.DataFrame(sigma)
elif method == 'DW':
datas[datas>0] = 0
datas['n'] = np.arange(datas.shape[0])
datas['group'] = pd.qcut(datas.n,4,labels = False)
sigma_1 = datas.loc[datas.group==0,asset].cov()
sigma_2 = datas.loc[datas.group==1,asset].cov()
sigma_3 = datas.loc[datas.group==2,asset].cov()
sigma_4 = datas.loc[datas.group==3,asset].cov()
sigma = 0.1*sigma_1 sigma_2*0.2 sigma_3*0.3 sigma_4*0.4
else:
pass
return sigma
method='Simple'时直接计算样本协方差,‘Ledoit’时计算协方差的压缩估计量,'DW'时计算下行波动率。
05
部分模型结果
资产走势(以2006年1月1日为1000点)
不画中证全指
各资产相关系数
RP-简单估计量
RP-压缩估计量
RP-衰减加权
RP-衰减加权-压缩估计量
(这里legend标错了)
RP-下行波动率
RP-下行波动率-衰减加权
净值对比
从净值曲线对比可以看出
- RP-和RP-衰减加权-压缩估计量的效果最好;
- 使用下行波动率度量风险的RP前期优于RP,但2017年后出现明显回撤(橙色线和暗红色线);
- RP-衰减加权与RP走势基本一致,表明衰减估计并没有明显优化效果,但压缩估计量RP有明显提升。
06
结果分析
所有方法对比来看,对于本文给定的五种资产
- 使用压缩估计量能明显提高RP的年化收益率,但也会增大波动率,夏普比小;
- 使用衰减加权的RP年化收益基本不变,整体走势也与RP基本一致。
07
参考文献
- 20170918-天风证券-天风证券金工专题报告:基于半衰主成分风险平价模型的全球资产配置策略研究
- 20171117-天风证券-天风证券资产配置策略研究之二:引入衰减加权和趋势跟踪的主成分风险平价模型研究