2. 协整理论入门:协整关系的数学定义与经济学含义

各位同学,今天我们来聊聊协整。说实话,我刚入行那会儿,听到「协整」这个词,第一反应是——这又是什么高大上的数学概念?后来做多了跨市场套利才发现,协整其实就是帮我们回答一个核心问题:两个看似随机游走的资产,它们之间到底有没有「真感情」?

2.1 为什么需要协整?

先讲个我踩过的坑。2018年我在做股指期货与ETF的套利策略,当时看到沪深300和上证50的价差在扩大,我心想「这不就是均值回归吗?」直接开仓。结果呢?价差越拉越大,亏得我怀疑人生。

后来复盘才发现:相关性不等于协整。两个序列可能短期走势很像(相关性高),但长期来看它们会越走越远——这就是伪回归。协整要解决的,正是这个问题。

核心区别一句话:

  • 相关性:看的是两个变量「一起动」的程度
  • 协整:看的是两个变量「分开后会不会回来」

2.2 协整的数学定义

好,我们上点干货。协整的数学定义其实不复杂,我尽量用大白话讲清楚。

假设有两个时间序列 \( X_t \) 和 \( Y_t \),它们各自都是非平稳的(比如随机游走)。但如果存在一个系数 \( \beta \),使得它们的线性组合:

\[ Z_t = Y_t - \beta X_t \]

变成了平稳序列,那么我们就说 \( X_t \) 和 \( Y_t \) 是协整的。

嗯,这里要注意:单变量非平稳,组合后平稳——这就是协整的精髓。

数学上更严谨的说法

如果两个序列都是 \( I(1) \)(一阶单整),且存在一个向量 \( (1, -\beta) \) 使得 \( Z_t \sim I(0) \),则称它们存在协整关系。

你想想看,这就像两个人各自都在乱走(非平稳),但中间有根绳子拴着(协整关系),所以不管怎么走,距离始终不会太远。

我个人习惯:在做协整检验前,先做单位根检验(ADF检验),确认两个序列都是 I(1)。这一步省不了,否则后面全是白搭。

2.3 协整的经济学含义

协整不只是数学游戏,它有很强的经济学直觉。说白了,协整反映的是长期均衡关系

举个例子:

  • 现货与期货:理论上,期货价格应该收敛于现货价格。如果偏离太大,套利者会进场,把价差拉回来。这就是协整。
  • 同行业股票:比如茅台和五粮液,虽然各自股价随机游走,但它们的价差往往围绕一个均值波动。因为基本面相似,市场情绪会驱动它们同涨同跌。
  • 不同市场的同一资产:比如A股和港股上市的同一家公司,虽然交易时间、流动性不同,但长期看价格应该趋同。

经济学直觉:协整关系背后,往往存在某种「套利机制」或「基本面约束」,使得价格不会无限偏离。

2.4 协整检验的两种主流方法

做量化交易,我们最常用的协整检验方法有两种。我分别说说它们的适用场景和坑。

方法一:Engle-Granger两步法(EG检验)

这是最经典的方法,步骤很简单:

  1. 第一步:用OLS回归 \( Y_t = \alpha + \beta X_t + \epsilon_t \),得到残差序列 \( \hat{\epsilon}_t \)
  2. 第二步:对残差做ADF单位根检验。如果残差平稳,则协整成立。

代码实现也很直接:

import statsmodels.api as sm
import numpy as np

# 假设 X, Y 是两个价格序列
X = sm.add_constant(X)  # 加截距项
model = sm.OLS(Y, X).fit()
residuals = model.resid

# 对残差做ADF检验
from statsmodels.tsa.stattools import adfuller
adf_stat, p_value, _, _, critical_values, _ = adfuller(residuals)

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

我曾经踩过的坑:EG检验对变量的顺序敏感!你把 X 和 Y 互换,结果可能不一样。所以建议两个方向都试一下,或者用更稳健的Johansen检验。

方法二:Johansen检验(多变量协整)

当你有三个或更多资产时,EG检验就不够用了。这时候要用Johansen检验,它可以一次性找出所有协整向量。

我个人习惯用Python的 statsmodels.tsa.vector_ar.vecm.coint_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.cvm)

输出结果中,如果统计量大于临界值,就拒绝「无协整」的原假设。

2.5 协整关系的可视化理解

光讲理论太枯燥,我画了一张图帮你理解协整的核心逻辑:

协整关系核心逻辑图 两个非平稳序列 X_t ~ I(1), Y_t ~ I(1) 各自随机游走,无长期均值 (比如:股价、汇率) 线性组合 Z_t = Y_t - βX_t 平稳残差序列 Z_t ~ I(0) 均值回归,围绕0波动 (价差、对冲组合) 经济学含义:长期均衡关系 • 存在套利机制:偏离后会被拉回 • 基本面约束:同行业、同资产、同指数 • 统计套利基础:价差回归策略的核心前提 • 风险对冲:协整组合可降低非系统性风险

2.6 协整 vs 相关:一个经典案例

我经常在课程里举这个例子:两个随机游走序列,相关性可能高达0.9,但它们根本不协整。为什么?因为相关性只看「同向变动」,而协整看的是「长期绑定」。

特征 相关性 协整
数学本质 衡量线性关联强度 衡量长期均衡关系
序列要求 无要求(平稳/非平稳均可) 必须都是 I(1) 或同阶单整
时间维度 短期同步性 长期绑定关系
交易应用 不适合直接套利 统计套利的基础
伪回归风险 高(非平稳序列) 低(残差平稳)

我的建议:做跨市场套利时,先算协整,再看相关性。协整是「能不能做」的前提,相关性是「怎么做」的参考。顺序别搞反了。

2.7 协整的局限性

最后说点实在的。协整不是万能的,我在实际项目中遇到过几个问题:

  • 结构突变:2015年股灾后,很多原本协整的股票对关系破裂了。协整关系不是永恒的,需要定期检验。
  • 滞后性:协整检验用的是历史数据,但市场在变。你检验出协整,不代表未来依然成立。
  • 参数估计误差:EG检验中的 β 是用OLS估计的,样本不同结果可能不同。我一般用滚动窗口重新估计。

避坑指南:我曾经用2017-2019年的数据做协整检验,回测表现很好。结果2020年一上线,协整关系直接失效,亏了一波。后来我养成了习惯——每季度重新检验一次协整关系,发现失效就及时止损。

好了,协整理论入门就讲到这里。记住一句话:协整是统计套利的基石,但基石也需要定期检查有没有裂缝。


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