12.2 MATLAB实现
下文中的测试数据如无特殊说明,均来自Wind金融平台。在具体实践中进行交易品种的相关性分析时,对于给定的两个交易品种的价格序列,可以直接使用价格来计算品种的相关性,也可以使用价格的对数收益时间序列来计算品种的相关性。在MATLAB中可以使用tick2ret函数计算对数收益率,其语法如下:
[RetSeries,Retlntervals)=tick2ret(TickSeries,TickTimes,Method)
其中,TickSeries为输入的价格序列,RetSeries为输出的收益序列,Method为指定计算收益序列的方法。当Method为'Simple'时,返回的RetSeries为简单收益率,即RetSeries(i)=TickSeries(i+1)/TickSeries(i)-1;当Metho为'Continuous'时,返回的RetSeries为对数收益率,即RetSeries(i)=log[TickSeries(i+1)/TickSeries(i)]。
这里以商品期货豆油(Y)和棕榈油(P)主力连续合约为例进行测试。豆油(Y)和棕榈油(P)主力连续合约的价格序列和对数收益率序列展示如图12-1所示。

在进行相关性分析之前需要注意两点。首先,计算品种之间的相关性使用的是历史在进行相关性分析之前需要注意两点。数据,而这里的"历史"是一个具体的时间,历史相关性意味着资产之间是一种过去关系,相同的关系在未来并不一定成立,即使历史会重演,也不会简单重复,这是所有做量化投资的人士必须正视的问题。事实上,金融相关性会随着时间发生改变,并且这些波动性可能会相当大,这一点会从后面的测试中看到。其次,必须要强调的是,相关性分析得到的仅仅是两个变量之间的线性关系的信息,如两个变量的历史相关性可能为零,但二者并不是相互独立的,还可能存在非线性关系。
在实际中进行相关性分析时,会遇到以下一些细节问题需要处理。
12.2.1 计算相关性的时间长度和时间周期的选择
假如需要计算两个交易品种(资产)之间的相关性,我们分别有这两个品种足够长的每日价格数据,那么需要向后回溯多远计算相关性呢?事实上,可以设定时间窗口的长度,像计算移动平均线一样滑动这个窗口,这样可以计算两个品种的相关性时间序列来具体观察相关性如何随时间发生变化。
以商品期货豆油(y)和棕榈油(p)主力连续合约为例,分别使用价格序列和价格对数收益率序列计算豆油和棕榈油的相关性,在不同的移动窗口长度下观察相关性随时间的变化,具体如图12-2所示。

通过分析图12-2,可以得到以下信息:
(1) 品种之间的相关性会随着时间的变化而变化,而且在某些时间段内的波动幅度会很大。
(2) 使用价格的对数收益率序列计算的相关性比单纯使用价格序列计算的相关性更加稳定,在实际投资中更具有可操作性。
(3) 在不同长度的移动窗口下,相关性的时间序列的波动性不同,移动窗口的长度越长,相关性的时间序列波动性越小,即相关性的波动区域较稳定。
所以在计算相关性时,对于时间长度选择这个问题并没有非常确定的一个数值答案,如果关注的是两个品种的长期相关性水平的变化,则可选取年级别的时间长度计算;如果关注的是两个品种的短期相关性水平,则可选取月级别的时间长度计算。通常情况会关注偏长期的相关性水平,所以一般可以选取1~3年的时间长度来计算。
在时间周期的选择上,上面的计算使用的是日线数据, 当使用更高频的数据时,比如小时线、分钟线等, 数据点会更多,计算得出的相关性更具有统计意义,但相应的计算量也会增加。具体问题具体看待,一般情况下使用日线数据应该就能满足要求。
结合图12-2,在使用价格对数收益率序列计算相关性时,豆油(Y)和棕榈油(P)相关性时间序列在2012年下半年和2013年年初一度下滑,在60天移动窗口下,相关性曾跌至60%以下,原本相关性很高的品种变得不再"高"相关性。再对比豆油(Y)和棕榈油(P)的价差,可以更深入地了解这一过程,如图12-3所示。

通过图12-3可以看到,豆油(Y)和棕榈油(P)持续走低的那段时间正是豆油(Y)和棕榈油(P)价差扩大的那段时间,反观该时间段内的基本面,主要是由于棕榈油基本面发生变化,导致豆棕价差持续扩大。相信在这一时间段内做豆油(Y)和棕榈油(P)价差统计套利的模型可能不"好过",会出现阶段性的模型失效。事实上,从模型设计角度观察图12-3,也可以使用某一移动窗口下的相关系数的时间序列作为豆棕价差统计套利模型的过滤器,这也正是本章交易品种的相关性分析的作用之一:通过动态监测品种的相关性,监控市场的系统性风险,进行实盘交易品种的选择和统计套利模型的仓位调整及交易过滤。
12.2.2 不同交易品种(资产)的时间轴校正
在确定时间长度和时间周期后,还需要对两个交易品种的时间轴进行对齐校正等处理。设这两个交易品种分别为A和B,则可能在A和B的共同时间窗口内,A在某一时点T上有数据,而B在这个时点T上却没有数据,需要用算法作一些处理。最简单的方法就是把A在时点T上的数据剔除,这种方法最简单直观,但也带来一定的问题。如果A和B的整体数据量相对较多,则这么做没有问题:若A和B的整体数据量相对较少,则这样做会带来最后的相关性计算失真。对于这种情况,可以在剔除数据时结合采用一些简单的插值计算来处理时间轴的校正对齐问题。
12.2.3 全市场品种的相关性图形展示
解决了上述两个问题后,可以计算全市场交易品种的相关性并进行图形化展示。这里采用两年时间长度的日钱数据,分别使用价格时间序列和价格对数收益率时间序列计算期货市场交易品种的相关性,最后的相关性矩阵的图形展示如图12-4~图12-7所示。


