01
序
本文是对海通证券报告《系统风险集中度在行业轮动中的应用》的复制,不保证正确性,欢迎指正。
背景什么的我就不写了,直接贴报告图
报告认为,系统性风险集中度越高,各种类型的风险越统一,故而市场分散风险的能力越弱,受到负面影响时更容易受到冲击,反之系统风险集中度越低,表明资产内部分散化效果越好,防御能力越强,出现负面消息时不易趋同产生崩塌。
综上报告认为这个因子应该是负向的,但个人感觉逻辑上可能有点问题,因为这里只考虑了负向信息的影响,没有考虑正向信息的影响。如果风险集中度高,那么正向信息的冲击也会越强。总之这里需要细想一想。
02
系统性风险集中度刻画
关于系统性风险集中度的定义,这篇报告参考了Kritzman, Li, Page 与Rigobon在文献《Principal Components as a Measure of Systemic Risk》中提出的吸收比例(Absorption ratio)。
计算方式如下
这里的吸收比率是根据主成分分析定义的,听上去很高端,但是后来想了一下,这东西不就是主成分分析中的方差解释度吗,AR画一张图不就是碎石图吗,所以也不是什么新的概念。
但这里用主成分分析的方法比较有新意,主成分分析的原理是对原数据的协方差矩阵进行旋转,找使方差最大的方向。旋转之后的各个主成分都是正交的,不相关。所以如果固定个数的主成分可以解释的方差比率越高,表明市场中的信息一致性越好,固定个数的主成分可以解释的方差比率越小,表明市场比较混乱,可以解释的信息有限。
报告计算了每个中信行业的吸收比率作为因子,进行行业轮动的测试。
本文首先复制了这部分内容,此外,去查了前面提到的那篇英文文献,文献中指出除了前一种吸收比率的计算方法,也可以计算Herfindahl指数,不过效果没有吸收比率好,所以也测试了Herfindahl指数进行行业轮动的效果。
Herfindahl指数定义如下,分母和吸收比率是一样的,分子上有细微差异,可以简单理解为吸收比率的分子度量的是方差的一阶距离,Herfindahl指数度量的是方差的二阶距离
03
回测说明
本文基于米筐平台,使用中信一级行业进行测试(申万一级行业的测试结果见聚宽同名文章)。
同报告参数,月度调仓,每月末提取各行业的当期成分股,用过去100个交易日的收益率数据计算吸收比率和Herfindahl指数,计算月度IC和分层测试结果。
获取参考文献和代码后台回复“吸收比率”
04
回测结果
先任意取一个行业,看看行业指数和因子值的情况,以食品饮料为例,收盘价和两个因子的指标值对比如下
再把每个指标按照过去三年的值进行标准化,结果如下
没有明显规律,不太能看出来什么,月度IC、ICIR结果如下
累积IC如下
首先,确实是负向的因子,而且absorb的效果要比Herfindahl好一点。
其次,标准化之后效果没有变好,说明标准化的方法有些问题,不知道报告里是怎么标准化的。
最后,absorb大概是再2018年二三月之后突然反转了,而这篇报告的发布日期是
好巧不巧。
分层结果如下,只给出IC最高的absorb的
周度没有测试,算因子太慢了,但毕竟是量价的因子,也许会更好一些吧,有兴趣可以试试。
05
其他说明
如果要优化absorb,可以考虑加上方向性。此外,前文提到的英文文献的作者新发了一篇文章,基于AR构造交易中心度C,也许可以借鉴,之后会尝试测试一下,看看结果。
06
代码
只给出关键的计算两个因子的函数,全部代码文件自取。
def getHerfindahl(x,n):
pca = PCA(n_components = n)
pca.fit(x)
H_up = ((pca.explained_variance_**2).sum())**0.5
H_down = x.var(ddof = 1,axis = 0).sum()
H = H_up/H_down
return H
def getAR(x,n):
# x = indret.iloc[:500,:].values;n = 29
pca = PCA(n_components = n)
pca.fit(x)
AR = pca.explained_variance_ratio_.sum()
return AR
参考文献
[1]20180301-海通证券-金融工程专题报告:系统风险集中度在行业轮动策略中的应用
[2]Kritzman M , Li Y , Page, Sébastien, et al. Principal Components as a Measure of Systemic Risk[J]. The Journal of Portfolio Management, 2011, 37(4):112-126.