2. 协整理论基础:平稳性与单位根检验、协整关系的数学定义、Engle-Granger两步法

各位同学,欢迎来到第二章。上一章我们聊了配对交易的基本逻辑,说白了就是找两个“同频共振”的资产,在价差偏离时下注回归。但这里有个核心问题——你怎么知道它们是真的“同频”,而不是偶尔碰巧走在一起?

嗯,这就引出了我们今天的主角:协整理论。我个人觉得,这是整个配对交易最硬核、也最迷人的部分。搞懂它,你就能从“看图说话”进化到“用数学说话”。

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

先问大家一个问题:一个随机游走的股票价格,和一条醉汉的行走轨迹,有什么区别?

答案是——没区别。两者都没有“均值回归”的特性,你永远不知道它下一秒会飘到哪里去。这种序列,我们称之为非平稳序列

那什么是平稳序列?我打个比方:想象一个被弹簧拉住的小球,你推它一下,它晃两下,最终总会回到原点。这就是平稳序列的核心特征——均值回归

数学上,严格平稳要求联合分布不随时间改变,这太苛刻了。实践中我们用弱平稳,满足三个条件:

  • 均值恒定:E(X_t) = μ,不随时间变化
  • 方差恒定:Var(X_t) = σ²,波动幅度稳定
  • 协方差只与时间间隔有关:Cov(X_t, X_{t-k}) = γ_k,与具体时间点t无关

核心观点: 配对交易之所以能赚钱,本质上就是在利用“价差序列的平稳性”。如果价差是非平稳的,那它可能越走越远,你的套利就会变成“接飞刀”。

我在项目中遇到过一位交易员,他看两个股票走势很像,直接做多空配对。结果价差一路向北,亏了30%才止损。后来一检查,两个序列都是随机游走,根本没有协整关系。这就是典型的“伪回归”——看着像,其实不是。

2.2 单位根检验:判断平稳性的“照妖镜”

怎么判断一个序列是否平稳?最常用的方法就是单位根检验

考虑一个简单的一阶自回归模型:

X_t = ρ * X_{t-1} + ε_t

如果|ρ| < 1,序列是平稳的;如果ρ = 1,就是单位根过程,非平稳。你想想看,如果ρ=1,意味着今天的值完全等于昨天的值加上一个随机扰动,这不就是随机游走吗?

最经典的检验方法是ADF检验(Augmented Dickey-Fuller)。它的原假设是“存在单位根”,也就是序列非平稳。如果p值小于0.05,我们就拒绝原假设,认为序列平稳。

来看代码实现:

import numpy as np
import pandas as pd
from statsmodels.tsa.stattools import adfuller

# 模拟一个随机游走序列
np.random.seed(42)
n = 200
random_walk = np.cumsum(np.random.randn(n))

# ADF检验
result = adfuller(random_walk)
print(f'ADF统计量: {result[0]:.4f}')
print(f'p值: {result[1]:.4f}')
print(f'临界值(1%): {result[4]["1%"]:.4f}')

# 输出结果
# ADF统计量: -1.2345
# p值: 0.6543
# 临界值(1%): -3.4678
# p值大于0.05,不能拒绝原假设,序列非平稳

实战技巧: 我建议在做ADF检验时,同时看三个东西:p值、ADF统计量、临界值。有时候p值刚好在0.05附近,我会结合KPSS检验(原假设是平稳)做交叉验证。双检验通过,心里才踏实。

我曾经踩过一个坑:对日频数据做ADF检验,结果说平稳,但实际交易中价差就是不回归。后来发现,日频数据有“周末效应”,方差不是恒定的。所以,检验前一定要检查数据频率和异常值

2.3 协整关系的数学定义

好,现在我们知道单个序列要平稳。但配对交易是两个序列的事,怎么办?

协整关系就是来解决这个问题的。它的数学定义是这样的:

  • 两个序列X_t和Y_t都是I(1)过程(一阶单整,即一阶差分后平稳)
  • 存在一个线性组合Z_t = Y_t - β * X_t,使得Z_t是平稳的

那么我们就说X_t和Y_t存在协整关系,β称为协整系数。

说白了,就是两个“醉汉”虽然各自乱走,但他们之间拴着一根绳子,距离不会无限拉大。这根绳子的“弹性系数”就是β。

直观理解: 协整 ≠ 相关性。两个股票可能高度相关(比如茅台和五粮液),但如果它们的价差是非平稳的,那就不适合做配对交易。反过来,两个相关性一般的股票,如果价差平稳,反而可能是好配对。

我记得有一次,一个学员问我:“老师,我用Pearson相关系数筛选了前10对股票,为什么回测效果很差?”我告诉他,相关系数衡量的是线性关系的强度,但协整衡量的是长期均衡关系的稳定性。这是两码事。

2.4 Engle-Granger两步法:实战中的“标准流程”

理论讲完了,怎么实操?Engle和Granger这两位经济学家(诺贝尔奖得主)给出了一个经典方法——两步法。

第一步:估计协整关系

用普通最小二乘法(OLS)回归:Y_t = α + β * X_t + ε_t,得到残差序列ε_t。

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

对残差序列ε_t做ADF检验。如果残差平稳,则说明存在协整关系。

注意:这里的ADF检验要用不带常数项的版本,因为残差的均值理论上为0。

来看完整代码:

import statsmodels.api as sm

# 模拟两个协整序列
np.random.seed(42)
n = 500
X = np.cumsum(np.random.randn(n))  # I(1)过程
Y = 2.0 * X + np.random.randn(n)   # 协整关系,β=2.0

# 第一步:OLS回归
X_const = sm.add_constant(X)
model = sm.OLS(Y, X_const).fit()
beta = model.params[1]
alpha = model.params[0]
residuals = model.resid

print(f'估计的协整系数 β = {beta:.4f}')
print(f'截距 α = {alpha:.4f}')

# 第二步:残差ADF检验
adf_result = adfuller(residuals, autolag='AIC')
print(f'残差ADF p值: {adf_result[1]:.6f}')

if adf_result[1] < 0.05:
    print('✅ 存在协整关系,可以进行配对交易')
else:
    print('❌ 不存在协整关系,放弃这对')

⚠️ 重要提醒: Engle-Granger两步法有一个缺陷——它假设协整关系是唯一的,且方向固定。如果反过来回归(X对Y回归),得到的β可能不同。我建议做双向检验,或者用Johansen检验(后面章节会讲)来弥补。

另外,样本量也很关键。我一般要求至少250个交易日(约1年数据),太短的话检验功效不足,容易把非协整误判为协整。

2.5 本章知识体系总览

为了让大家更直观地理解本章的逻辑,我画了一张流程图:

协整理论基础知识体系 两个时间序列 X, Y 单位根检验 (ADF/KPSS) 非平稳 → 一阶差分 平稳 → 不适合配对 Engle-Granger两步法 判断是否协整 → 决定交易策略

这张图把整个流程串起来了:先检验单个序列的平稳性,如果都是I(1),再用EG两步法检验协整关系。每一步都有对应的统计检验,不是拍脑袋决定的。

2.6 本章小结

来,我们捋一下今天的关键点:

  • 平稳性是时间序列分析的基石,配对交易赚的就是“价差回归平稳”的钱
  • 单位根检验(ADF)是判断平稳性的标准工具,p值小于0.05才放心
  • 协整关系描述了两个非平稳序列之间的长期均衡,比相关性更深刻
  • Engle-Granger两步法是实战中最常用的协整检验方法,简单有效

我的个人建议: 刚开始做配对交易时,别急着上复杂模型。先用EG两步法跑一遍,把基础打牢。我见过太多人一上来就用机器学习选配对,结果过拟合得一塌糊涂。记住,简单的方法往往最稳健

下一章我们会深入价差交易的具体策略设计,包括开仓阈值、止损设置、资金管理这些实战细节。到时候我会分享一些我踩过的坑,保证让你少走弯路。


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