请 [注册] 或 [登录]  | 返回主站

量化交易吧 /  数理科学 帖子:3365785 新帖:17

【量化课堂】协整的直观认识

汇市江湖百晓生发表于:5 月 9 日 19:06回复(1)

导语:本文旨在直观地为大家介绍协整的概念,帮助大家理解其基本含义,这个概念提出的动机,以及简单的应用场景。
1.png


阅读前需要了解:
基本的统计概念,理解深度level-0
平稳的概念,理解深度level-0


这里只是想给大家指出协整的直观定义,并没有涉及严格的数学符号的定义及严密的公式推导。

一、平稳/协整

提到协整,就不得不提平稳性。
简单地说,平稳性(stationarity)是一个序列在时间推移中保持稳定不变的性质,它是我们在进行数据的分析预测时非常喜欢的一个性质。如果一组时间序列数据是平稳的,那就意味着它的均值和方差保持不变,这样我们可以方便地在序列上使用一些统计技术。我们先看一个例子,了解平稳和非平稳序列直观上长什么样。

2.png

图片来源:维基百科
上图中,靠上的序列是一个平稳的序列,我们能看到它始终是围绕着一个长期均值在波动,靠下的序列是一个非平稳序列,我们能看到它的长期均值是变动的。
举一个应用的例子,如果某个资产的价格序列(或者两个序列的价差)是平稳的,那么当它在偏离了其均值后,人们可以期待价格会在未来的某一个时间回归这个均值。我们可以借助这个性质进行投资从而获利。假设一只股票的长期均值是9元,而现在的价值是8元。如果经过检验,我们认为这个股票的历史序列具有平稳的性质,并且假设这个平稳性是能保持的,就可以买入这只股票,等待未来它的价格回归9元,从而获得1元的利润。

这就是一个具有平稳性质的股票价格序列:

3.png

平稳性是很好用,但在现实中,绝大多数的股票都是非平稳的,那么我们是否还能够利用平稳性质进行获利呢?答案是肯定的,这时协整关系(cointegration)就出场了!如果两组序列是非平稳的,但它们的线性组合可以得到一个平稳序列,那么我们就说这两组时间序列数据具有协整的性质,我们同样可以把统计性质用到这个组合的序列上来。但是需要指出的一点,协整关系并不是相关关系(correlation)。
举个例子,两组时间序列数据的差是平稳的,则我们可以根据这个差的平稳性进行投资获利:当两只股票的价差过大,根据平稳性我们预期价差会收敛,因此买入低价的股票,卖空高价的股票,等待价格回归的时候进行反向操作从而获利。
这就是配对交易(pairs trading)的由来。是不是很清晰。

二、平稳性和检验方法

严格地说,平稳性可以分为严平稳(strictly stationary)和弱平稳(或叫协方差平稳,covariance stationary等)两种。严平稳是指一个序列始终具有不变的分布函数,而弱平稳则是指具序列有不变的常量的描述性统计量。严平稳和弱平稳性质互不包含;但如果一个严平稳序列的方差是有限的,那么它是弱平稳的。我们一般所说的平稳都是指弱平稳。在时间序列分析中,我们通常通过单位根检验(unit root test)来判断一个过程是否是弱平稳的。
一个常见的单位根检验方法是Dickey-Fuller test,大致思路如下:假设被检测的时间序列YtYt

Yt

Y<em>t

Yt

满足自回归模型Yt=αYt?1 εtYt=αYt?1 εtYt=αYt?1εtYt=αY</em>t?1 εt

Y_t= \alpha Y
{t-1} \varepsilon_t

,其中αααα

\alpha

为回归系数,εtεtεtεt

\varepsilon_t

为噪声的随机变量。若经过检验,发现α<1α<1α<1\alpha&lt; 1

\alpha< 1

,则可以肯定序列是平稳的。在Dickey Fuller Test的基础上,还有衍生出来的augmented Dickey-Fuller test,是考虑了序列的滞后性,在此不做过多陈述,在未来量化课堂的数学专栏里将会介绍。

三、举个应用的例子

我们人为地构造两组数据,由此直观地看一下协整关系。

import numpy as npimport pandas as pdimport seabornimport statsmodelsimport matplotlib.pyplot as pltfrom statsmodels.tsa.stattools import coint

构造数据
首先,我们构造两组数据,每组数据长度为100。第一组数据为100加一个向下趋势项再加一个标准正态分布。第二组数据在第一组数据的基础上加30,再加一个额外的标准正态分布。有:

Xt=100 γt εtXt=100 γt εt

Xt=100γtεt

<br>Xt=100 γt εt<br>


X_t=100 \gamma_t \varepsilon_t


Yt=Xt 30 μtYt=Xt 30 μt

Yt=Xt30μt

<br>Yt=Xt 30 μt<br>


Y_t=X_t 30 \mu_t


其中γtγt

γt

γt

\gamma_t

为趋势项,εtεtεtεt

\varepsilon_t

μtμtμtμt

\mu_t

为无相关性的正态随机变量。
代码如下:

np.random.seed(100)
x = np.random.normal(0, 1, 500)
y = np.random.normal(0, 1, 500)
X = pd.Series(cumsum(x))   100
Y = X   y   30
for i in range(500):
    X[i] = X[i] - i/10
    Y[i] = Y[i] - i/10
plot(X); plot(Y);
plt.xlabel("Time"); plt.ylabel("Price");
plt.legend(["X", "Y"]);

4.png

显然,这两组数据都是非平稳的,因为均值随着时间的变化而变化。但这两组数据是具有协整关系的,因为他们的差序列Yt?XtYt?Xt

Yt?Xt

Yt?Xt

Y_t-X_t

是平稳的:

plot(Y-X);plt.axhline((Y-X).mean(), color="red", linestyle="");plt.xlabel("Time"); plt.ylabel("Price");plt.legend(["Y-X", "Mean"]);

6.png

上图中,可以看出蓝线Yt?XtYt?Xt

Yt?Xt

Yt?Xt

Y_t-X_t

一直围绕均值波动。而均值不随时间变化(其实方差也不随时间变化)。


小结:如果完全从数学的角度讲清楚协整,会比较复杂,日后的量化课堂会有涉及。我们只是在了解(level-0)的层面上做了一个简单介绍,目的还是让大家更好的将协整与实际应用结合起来。

注:文末有可运行的代码块,大家可以在joinquant*研究,运行程序。

更多深入研究,请参见后面的应用类文章。


本文由JoinQuant量化课堂推出,版权归JoinQuant所有,商业转载请联系我们获得授权,非商业转载请注明出处。


文章更迭记录:
v1.1,2016-10-13,修正概念性错误,感谢 zhangyi 指出
v1.0,2016-07-05,文章上线

import numpy as npimport pandas as pdimport seabornimport statsmodelsimport matplotlib.pyplot as pltfrom statsmodels.tsa.stattools import coint
np.random.seed(100)x = np.random.normal(0, 1, 500)y = np.random.normal(0, 1, 500)X = pd.Series(cumsum(x)) + 100Y = X + y + 30for i in range(500):X[i] = X[i] - i/10Y[i] = Y[i] - i/10plot(X); plot(Y);plt.xlabel("Time"); plt.ylabel("Price");plt.legend(["X", "Y"]);
plot(Y-X);plt.axhline((Y-X).mean(), color="red", linestyle="");plt.xlabel("Time"); plt.ylabel("Price");plt.legend(["Y-X", "Mean"]);
 

全部回复

0/140

量化课程

    移动端课程