第三节 协整理论入门:平稳性检验与Engle-Granger两步法

好,咱们进入配对交易最核心的理论基础——协整。

说实话,我刚开始做量化那会儿,也踩过不少坑。很多人一上来就找相关性高的品种,觉得价格走势长得像就能配对。结果呢?价差越走越远,亏得怀疑人生。后来我才明白,真正决定配对能否赚钱的,不是相关性,而是协整性

3.1 平稳性:时间序列的“定海神针”

先问个问题:为什么配对交易能赚钱?

因为我们认为两个品种的价差会回归均值。但你想过没有,如果价差本身就不稳定,均值一直在变,那回归个啥?

所以,第一步就是搞清楚什么是平稳性

平稳性,说白了就是一个时间序列的统计性质不随时间变化。均值恒定、方差恒定、自协方差只与时间间隔有关。嗯,听起来有点绕,我换个说法:

  • 平稳序列:像一根被钉住的绳子,来回摆动但始终围绕一个固定中心。
  • 非平稳序列:像一根随风飘荡的绳子,你不知道它下一秒会飘到哪。

举个例子,白噪声是平稳的,随机游走是非平稳的。我见过不少新手把随机游走当平稳序列做回归,结果R²高得离谱,但全是伪回归——这玩意儿害人不浅。

3.2 ADF检验:给序列做“体检”

怎么判断一个序列是否平稳?最常用的就是ADF检验(Augmented Dickey-Fuller Test)。

它的核心思想很简单:检验序列是否存在单位根。存在单位根,就是非平稳;不存在,就是平稳。

ADF检验的原假设H₀:序列存在单位根(非平稳)。
备择假设H₁:序列不存在单位根(平稳)。

如果p值小于显著性水平(比如0.05),就拒绝原假设,认为序列平稳。

我在项目中习惯用Python的statsmodels库来做,代码就几行:

from statsmodels.tsa.stattools import adfuller

# 假设price是价格序列
result = adfuller(price, autolag='AIC')
print(f'ADF统计量: {result[0]:.4f}')
print(f'p值: {result[1]:.4f}')

if result[1] < 0.05:
    print('序列平稳,拒绝单位根假设')
else:
    print('序列非平稳,无法拒绝单位根假设')
我的小经验:ADF检验对滞后阶数比较敏感。我一般用AIC自动选择滞后阶数,省心。但如果你发现结果不稳定,可以手动调一下maxlag参数试试。

3.3 协整关系:两个“醉汉”相互搀扶

好,现在我们知道单个序列要平稳。但配对交易里,两个价格序列通常都是非平稳的——这咋办?

别急,这就是协整的精髓所在。

协整关系的定义:如果两个或多个非平稳序列的线性组合是平稳的,那它们就存在协整关系。

我特别喜欢用一个比喻:两个醉汉走路都东倒西歪(非平稳),但他们互相搀扶着,所以相对位置是稳定的(线性组合平稳)。这就是协整。

换句话说,虽然A和B各自乱跑,但A - β×B这个价差是稳定的。这就是我们做配对交易的数学基础。

关键点:协整 ≠ 相关。两个高度相关的序列可能完全不协整(比如两个随机游走),而两个看起来走势不同的序列反而可能协整。我吃过这个亏,所以现在每次做配对前,必做协整检验。

3.4 Engle-Granger两步法:实战中的“标准动作”

怎么检验两个序列是否协整?最经典的方法就是Engle-Granger两步法。名字听着高大上,其实步骤很简单:

  1. 第一步:用OLS回归估计协整系数β。比如回归方程:Y = α + βX + ε,得到残差ε。
  2. 第二步:对残差ε做ADF检验。如果残差平稳,就说明Y和X存在协整关系。

说白了,就是先找线性组合,再检验这个组合是否平稳。

代码实现也很直接:

import statsmodels.api as sm
import numpy as np

# 假设price_a和price_b是两个价格序列
X = sm.add_constant(price_b)
model = sm.OLS(price_a, X).fit()
residuals = model.resid

# 对残差做ADF检验
result = adfuller(residuals, autolag='AIC')
print(f'残差ADF p值: {result[1]:.4f}')

if result[1] < 0.05:
    print('存在协整关系,可以配对交易')
    hedge_ratio = model.params[1]
    print(f'对冲比率: {hedge_ratio:.4f}')
else:
    print('不存在协整关系,换个品种试试')
注意:Engle-Granger两步法有个小缺陷——它假设协整关系是唯一的。如果存在多个协整关系,这个方法可能不准确。不过对于两个品种的配对交易,通常够用了。

3.5 一张图看懂协整检验流程

说了这么多,我画张图帮你理清思路:

协整检验流程图 获取两个价格序列 第一步:OLS回归,计算残差 第二步:对残差做ADF检验 p < 0.05? 存在协整关系 不存在协整关系

3.6 实战中的几个坑

理论讲完了,我分享几个实战中容易踩的坑:

  • 伪回归陷阱:两个独立的随机游走,回归后R²可能很高,但残差是非平稳的。所以一定要做ADF检验,别只看R²。
  • 样本期选择:协整关系可能随时间变化。我习惯用滚动窗口重新检验,比如每3个月重新跑一次Engle-Granger。
  • 滞后阶数:ADF检验的滞后阶数选不好,结果可能天差地别。我一般用AIC或BIC自动选择,但也会手动验证一下。
避坑指南:我曾经用1年数据做协整检验,结果很漂亮。结果实盘时价差越走越远,一查才发现,那1年刚好是特殊行情,协整关系早就变了。从那以后,我坚持用至少3年数据,并且定期重检。

好了,协整理论就讲到这里。记住一句话:没有协整,就没有配对交易。下一节咱们会讲怎么用协整关系构建交易信号,那才是真正赚钱的开始。


公众号:蓝海资料掘金营,微信deep3321