4、协整检验实战:Engle-Granger两步法、Johansen检验、协整对的筛选标准

协整检验,说白了就是找「长期伴侣」。

你想想看,两个价格序列,单独看都是随机游走,但它们的线性组合却稳稳当当。这就是协整的核心思想。我在做统计套利的前两年,踩过最大的坑就是——没做协整检验,直接拿相关性高的品种开干。结果呢?价差越跑越偏,亏得我头皮发麻。

今天咱们就把协整检验的实战细节掰开揉碎。我会重点讲两种方法:Engle-Granger两步法和Johansen检验。最后再聊聊筛选标准——这部分是我个人经验最密集的地方。

4.1 Engle-Granger两步法:简单粗暴,但够用

这个方法,名字听着唬人,其实逻辑很直白。

第一步:跑回归,算残差。

假设你有两个价格序列 X 和 Y。你先用 OLS 回归:

Y = α + β·X + ε

这里的 β 就是对冲比率,ε 是残差。残差就是价差。

第二步:检验残差是否平稳。

用 ADF 检验去测残差。如果残差是平稳的,那 X 和 Y 就是协整的。

代码实现很简单:

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统计量: {adf_stat:.4f}, p值: {p_value:.4f}')
if p_value < 0.05:
    print('残差平稳 → 协整关系成立')
else:
    print('残差不平稳 → 没有协整关系')
⚠️ 注意: 这里有个坑。EG两步法用的是残差,但残差的临界值跟普通ADF不一样。你得用MacKinnon的专用临界值表。我早期直接用普通ADF的临界值,结果误判了好几次。后来改用statsmodels自带的coint函数,它内部已经处理好了。

我个人习惯用 sm.tsa.stattools.coint 这个函数,一步到位:

from statsmodels.tsa.stattools import coint

score, p_value, _ = coint(Y, X)
print(f'协整检验p值: {p_value:.4f}')

EG两步法的优点是快、直观。缺点呢?只能处理一对变量。而且第一步的回归方向会影响结果——你用Y对X回归,和X对Y回归,得到的β不一样。嗯,这里要注意。

4.2 Johansen检验:多品种协整的利器

当你要同时检验三个、四个品种时,EG两步法就不够用了。这时候得请出Johansen检验。

Johansen检验的核心是看一个叫「秩」的东西。说白了,就是看协整关系的个数。

它给出两个统计量:

  • 迹统计量(Trace Statistic)
  • 最大特征值统计量(Max Eigenvalue Statistic)

两个统计量互相印证,结论更可靠。

代码实现:

from statsmodels.tsa.vector_ar.vecm import coint_johansen

# data 是多个品种的价格矩阵,每列一个品种
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)

输出结果里,你会看到类似这样的表格:

协整秩 迹统计量 95%临界值 结论
r ≤ 0 45.23 29.68 拒绝(存在协整)
r ≤ 1 12.45 15.41 不拒绝(最多1个协整关系)
r ≤ 2 3.21 3.76 不拒绝(最多2个)

从上面看,r ≤ 0 被拒绝,说明至少有一个协整关系。r ≤ 1 没被拒绝,说明最多一个。所以结论是:存在1个协整关系。

💡 我的经验: Johansen检验对滞后阶数很敏感。我一般用AIC或BIC选滞后阶数,然后多试几个阶数看看结果是否稳健。如果换了阶数结论就变,那这个协整关系可能不太靠谱。

4.3 协整对的筛选标准:实战中的「避坑指南」

检验通过了,是不是就能直接上实盘?别急。我见过太多人卡在这一步。

协整检验通过,只是「统计学上显著」。但实盘交易,你还得看「经济学上合理」和「策略上可执行」。

我总结了一套筛选标准,按优先级排列:

  1. p值要足够小——至少小于0.05,我个人习惯用0.01。p值越小,伪回归的概率越低。
  2. 半衰期要适中——半衰期是价差回归均值的时间。太短(比如1小时)说明噪声多,交易成本高。太长(比如20天)说明回归太慢,资金占用大。我一般选2-7天的半衰期。
  3. 对冲比率要稳定——用滚动窗口算β,看β的波动率。如果β忽高忽低,说明对冲关系不稳定。我曾经遇到一个品种对,协整检验p值0.001,但β的波动率超过30%,结果实盘一跑就崩。
  4. 经济逻辑要自洽——两个品种得有业务关联。比如同行业的股票、上下游产业链的期货。纯粹统计上的协整,没有经济逻辑支撑,迟早会失效。
  5. 流动性要够——这是最容易被忽略的。协整检验通过了,但其中一个品种日均成交额只有几百万,你一开仓就把价差打穿了。嗯,这个坑我踩过。

📌 核心要点: 协整检验只是入场券。真正的筛选,是看半衰期、β稳定性、经济逻辑和流动性。这四个维度缺一不可。

4.4 知识体系总览

下面这张图,是我自己梳理的协整检验知识框架。你可以把它当作一个检查清单:

协整检验知识体系 Engle-Granger两步法 Johansen检验 第一步:OLS回归 → 残差 第二步:ADF检验残差平稳性 迹统计量 + 最大特征值统计量 判断协整秩(r的个数) 协整对筛选标准(5个维度) ① p值 < 0.01 ② 半衰期2-7天 ③ β稳定性 ④ 经济逻辑 ⑤ 流动性 只有5个维度全部达标,才能进入实盘候选池

这张图把整个流程串起来了。从左到右,从上到下,每一步都不能跳过。

🔧 实战建议: 我一般会建一个「协整对候选池」,每天用新数据跑一遍检验。如果某个品种对的p值连续3天都小于0.01,半衰期也稳定,我才会把它加入实盘列表。别偷懒,数据是活的,协整关系也会变。

好了,协整检验的实战部分就聊到这儿。记住:检验只是手段,赚钱才是目的。别在统计显著性上钻牛角尖,多花点时间在筛选标准和风控上,回报会更高。


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