4、协整理论与应用:协整的定义、Engle-Granger两步法、Johansen检验、协整对与协整篮子

协整,这个词听起来挺唬人的。说白了,它就是在问:两个或多个看似随机漫步的资产价格,它们之间是不是存在某种「长期绑定」的关系?

我刚开始做统计套利那会儿,总觉得只要两个股票走势长得像,就能配对交易。结果亏了几次才明白——长得像不代表真的有关系。协整才是那个「法律意义上的结婚证」,而相关性只是「看起来挺般配」。

4.1 协整的定义:什么是真正的「同频共振」?

先给个正式定义。如果两个时间序列 \( X_t \) 和 \( Y_t \) 都是 I(1)(一阶单整,即差分后平稳),但存在一个线性组合 \( Y_t - \beta X_t \) 是 I(0)(平稳序列),那么我们就说 \( X_t \) 和 \( Y_t \) 是协整的。

用人话讲:两个醉汉走路,各自东倒西歪(非平稳),但他们之间拴着一根绳子,距离始终不会太远(线性组合平稳)。这根绳子,就是协整关系。

关键区别:

  • 相关性高 ≠ 协整:两只股票可能因为大盘涨跌而一起波动,但它们的价差可能越走越远,无法回归。
  • 协整 = 有均值回归的价差:价差偏离后,总会有一股力量把它拉回来。这才是套利的基础。

我个人习惯把协整比作「橡皮筋效应」。你拉得越远,弹回来的力道越大。但前提是,这根橡皮筋真的存在。

4.2 Engle-Granger两步法:最朴素的协整检验

这是最经典的方法,也是我入门的第一个工具。步骤很简单,就两步。

第一步:估计协整回归

假设我们要检验 \( X_t \) 和 \( Y_t \) 是否协整。先跑一个OLS回归:

Y_t = α + β * X_t + ε_t

这里的 \( \beta \) 就是协整系数,\( \varepsilon_t \) 是残差,也就是我们说的「价差」。

第二步:检验残差的平稳性

对残差 \( \varepsilon_t \) 做ADF检验(单位根检验)。如果残差是平稳的,就说明 \( X_t \) 和 \( Y_t \) 协整。

# Python 示例:Engle-Granger 两步法
import statsmodels.api as sm
from statsmodels.tsa.stattools import adfuller

# 假设 X, Y 是价格序列
X = sm.add_constant(X)
model = sm.OLS(Y, X).fit()
residuals = model.resid

# ADF检验
adf_stat, p_value, _, _, critical_values, _ = adfuller(residuals)
print(f'ADF Statistic: {adf_stat}')
print(f'p-value: {p_value}')

if p_value < 0.05:
    print('残差平稳,存在协整关系')
else:
    print('残差不平稳,不存在协整关系')

我的经验:Engle-Granger法有个坑——它假设协整关系是唯一的,而且方向很重要。你把X和Y互换,结果可能不一样。我曾经在测试一组能源股时,换了个方向就发现协整不成立了。后来我养成了习惯:两个方向都跑一遍,取p值更小的那个。

4.3 Johansen检验:多资产协整的「大杀器」

Engle-Granger只能处理两个资产。那如果你有5只股票,想看看它们之间是否存在一个共同的长期关系呢?这时候就要上Johansen检验了。

Johansen检验的核心思想是:通过向量误差修正模型(VECM),检验多个时间序列之间是否存在多个协整向量。它给出两个统计量:

  • 迹统计量(Trace Statistic):检验协整秩(即协整关系的个数)是否小于等于 r。
  • 最大特征值统计量(Max Eigenvalue Statistic):检验协整秩是否恰好为 r。
# Python 示例:Johansen 检验
from statsmodels.tsa.vector_ar.vecm import coint_johansen

# 假设 data 是包含多个资产价格序列的 DataFrame
result = coint_johansen(data, det_order=0, k_ar_diff=1)

print('迹统计量:', result.lr1)
print('迹统计量临界值(95%):', result.cvt)
print('最大特征值统计量:', result.lr2)
print('最大特征值临界值(95%):', result.cvm2)

# 判断协整秩
for i in range(len(result.lr1)):
    if result.lr1[i] > result.cvt[i, 1]:  # 95% 临界值
        print(f'拒绝 H0: 协整秩 <= {i}')
    else:
        print(f'不能拒绝 H0: 协整秩 <= {i}')
        break

注意:Johansen检验对滞后阶数很敏感。我建议用AIC或BIC来选择最优滞后阶数,别用默认值。有一次我偷懒没调,结果检验出来5只股票有4个协整关系,明显不合理。调了滞后阶数后,变成了2个,这才符合直觉。

4.4 协整对与协整篮子:从理论到实战

检验出协整关系后,怎么用?这里分两种情况。

协整对(Pair Trading)

就是两只股票。价差 = \( Y_t - \beta X_t \)。当价差偏离均值超过某个阈值(比如2倍标准差)时,做多被低估的、做空被高估的。等价差回归后平仓。

举个例子:假设你发现A股和B股协整,β=1.2。当前价差是+3个标准差,说明Y相对X被高估了。那就做空Y,做多X。等价差回到均值附近,两边平仓。

实战要点:

  • 阈值设置:我一般用1.5到2.5倍标准差。太小了频繁交易磨损手续费,太大了等不到回归。
  • 止损:价差如果继续扩大超过3倍标准差,我会止损。因为协整关系可能已经破裂了。
  • 再检验:每3个月重新跑一次协整检验。市场在变,关系也会变。

协整篮子(Basket Trading)

当你有3只或更多股票时,协整关系就变成了一个线性组合:

Portfolio = w1*X1 + w2*X2 + ... + wn*Xn

这个组合的价差是平稳的。你可以把它当成一个「合成资产」来交易。当组合价值偏离均值时,按权重买卖所有成分股。

我个人更喜欢做篮子交易,原因有三:

  • 分散风险:单只股票的黑天鹅不会毁掉整个策略。
  • 更稳健:多资产协整关系比两两配对更不容易破裂。
  • 容量更大:资金量大的时候,篮子交易更容易执行。

避坑指南:我曾经做过一个5只股票的篮子,协整检验通过了,回测也很漂亮。结果实盘跑了两个月,价差突然失控。后来一查,原来是其中一只股票被收购了,基本面彻底变了。从那以后,我每次建仓前都会看一眼每只成分股的最新公告。嗯,这个习惯救了我好几次。

知识体系总览

下面这张图总结了本章的核心逻辑,从协整的定义到两种检验方法,再到实战中的两种应用形式。你可以把它当作一个快速索引。

协整理论 定义:I(1) + 线性组合 I(0) 检验方法 实战应用 非平稳序列的长期绑定关系 价差均值回归是套利基础 Engle-Granger Johansen 两步法:OLS + ADF检验 适用于两个资产 VECM模型 + 迹/最大特征值 适用于多个资产 协整对 协整篮子 两只股票:做多/做空 价差回归策略 多只股票:组合交易 分散风险、容量大 核心:协整 ≠ 相关,价差平稳才是套利的前提 实战提醒:定期重检验、设置止损、关注基本面变化 协整关系会破裂,不要迷信历史回测

好了,协整这块的内容就这些。从定义到检验,再到实战应用,每一步都有坑,但也都有解法。你想想看,如果连协整关系都搞不清楚,统计套利就真的成了「瞎蒙套利」了。