这次我们来探索2个问题:时序动量和截面动量的比较,和波动率/成交量标准化后的特征是否能提高预测能力?推特上一位老哥列出了各种动量指标在加密货币市场的表现排序,指标和次日收益率的相关性越高,越排在前面。其中,布林带值(这里是zscore标准化后的收盘价,下文统一称之为时序动量)和次日收益率的相关性最高,其次是突破类指标,而EMA后的收盘价相关性最低。也就是说在次日收益率的预测上,时序动量是最佳选择,最差的选择是EMA后的收盘价。我们先用时序动量,和未来1日对数收益率做线性回归,并绘制出散点图和影响图。(左侧是散点图,x轴为时序动量,y轴为未来1日的对数收益率;右侧为影响图,可以观察残差和杠杆值的大小,来判断异常值对模型拟合情况的影响。)从散点图来看,x和y的关系是模糊的一团,并不清晰。我们再做进一步加工:把x分成100个等数量的区间,再对每个区间内做去极值处理,然后做出去除极值后的每个区间的平均值(这一步相当于把x做了一个分箱处理)。这样看上去x和y的关系就清晰多了,它们大致呈现一个正相关关系。
我们再来看看截面动量(cross section momentum)与未来一个周期对数收益率的线性回归。现在我们对比时序动量和截面动量对未来收益率的预测能力,从线性回归的系数b1可以看出,虽然截面动量对未来收益率有预测力度,但是比起时序动量来说,还是弱了一点。我们再对两者做多元回归,看它们分别对未来收益率的贡献度。
啧。在时序动量的存在下,截面动量对预测未来收益率的贡献......微乎其微。我们比较一下截面动量策略、时序动量策略和双动量策略的净值表现,果不其然,单看截面动量还好,但时序动量明显领先于截面动量,且两者叠加后和时序动量不相上下——时序动量大获全胜。2 是否经过波动率/成交量标准化后的特征,能提升表现?下一个探讨的问题是,特征要不要做波动率或者成交量的标准化处理呢?处理过后的特征能不能显著提升成绩?
我们来对比看看原始特征、波动率标准化后的特征和成交量标准化后的特征。这里的原始特征就用简单粗暴的累积对数收益率。
original_feature = talib.SUM(z['ret'],25)
波动率标准化后的特征为过去25天累积对数收益率再除以其标准差,代码:
vol_adjusted_ret = talib.SUM(z['ret'],25)/talib.STDDEV(z['ret'],25)
成交量标准化后的特征为考虑到成交量的加权对数收益率再除以标准差,代码:
term_1 = talib.SUM((z['volume']*z['ret']),25)/talib.SUM(z['volume'],25)
term_2 = talib.STDDEV(z['volume'],25)
volume_adjusted_ret = term_1/term_2
这里的原始特征是收益率,2种标准化方式相当于把收益率这个基本特征做了波动率和成交量的标准化,这2种标准化方式也可以用于其他特征上。
把这三种特征分别和未来1个周期的对数收益率做回归,得到截距和斜率的P-value:结论非常明显,相比于原始特征,波动率或者成交量调整后的特征预测能力更强,因为它们和未来收益率回归后的p-value显著小于原始特征。经过波动率或者成交量标准化后,几乎每个动量特征的表现都有提升: