1. 协整关系导论:协整的定义、伪回归问题、协整在量化交易中的意义

1.1 协整到底是个啥?

说实话,我刚入行那会儿,第一次听到「协整」这个词,脑子里蹦出来的是「斜着整」——心想这玩意儿是不是跟斜线有关系?后来被前辈拍了一下脑袋,才明白过来。

协整,英文叫 Cointegration,说白了就是:两个或多个非平稳的时间序列,它们的某种线性组合却是平稳的

你想想看,单独看一只股票的价格,它可能像喝醉了酒一样到处乱晃,毫无规律。但如果你把两只股票的价格做个差值,这个差值反而变得规规矩矩、均值回归了。嗯,这就是协整的精髓。

核心定义:如果两个时间序列 X_t 和 Y_t 都是 I(1)(一阶单整),但存在一个系数 β,使得 Z_t = Y_t - βX_t 是 I(0)(平稳序列),那么我们就说 X_t 和 Y_t 之间存在协整关系。

我在项目中遇到过不少新手,一上来就问我:「老师,那相关性不就是协整吗?」我每次都得耐心解释:相关性看的是短期同步性,协整看的是长期均衡关系。两个完全不相关的序列,也可能存在协整关系——比如黄金和白银,短期走势可能各走各的,但长期来看,它们的价差总会回到某个合理区间。

1.2 伪回归问题——一个坑了我两个月的教训

伪回归,英文叫 Spurious Regression。这玩意儿有多坑?我曾经在早期做策略回测时,把两只完全不相关的股票做了回归分析,结果 R² 高达 0.85,t 统计量也显著。我当时兴奋得不行,以为发现了新大陆。

结果呢?实盘一跑,亏得亲妈都不认识。

为什么会这样?因为两个独立的随机游走序列,你拿去做回归,大概率会得到「显著」的结果。这不是因为它们真的有关系,纯粹是统计上的幻觉。

避坑指南:我曾经犯过一个低级错误——直接用价格序列做回归,然后看 R² 和 t 值来判断关系。后来被导师骂了一顿,才明白非平稳序列之间做回归,必须先用协整检验。记住:高 R² 不等于有关系,低 R² 不等于没关系

伪回归的典型特征:

  • R² 非常高(通常 > 0.8)
  • Durbin-Watson 统计量非常低(接近 0)
  • 残差序列明显非平稳(有趋势或周期性)

你想想看,如果我把中国股市的收盘价和纽约的降雨量做回归,大概率也能得到「显著」结果——但这有意义吗?没有。这就是伪回归的荒谬之处。

1.3 协整在量化交易中的意义

好了,前面说了那么多理论,咱们来点实际的。协整在量化交易里到底能干啥?

我个人习惯把协整策略叫做「配对交易」的升级版。传统的配对交易看的是相关性,但相关性会变——今天高度相关的两只股票,明天可能就分道扬镳了。而协整关系,看的是长期均衡,更稳定。

具体来说,协整策略的核心逻辑是:

  1. 找到协整对:比如贵州茅台和五粮液,它们的价格长期存在均衡关系
  2. 计算价差:Z_t = Y_t - βX_t,这个价差应该是平稳的
  3. 设定阈值:当价差偏离均值超过 2 倍标准差时,开仓
  4. 等待回归:价差回归到均值附近时,平仓获利

实战小技巧:我建议你在选协整对时,优先考虑同一行业、业务模式相似的股票。比如银行股之间、保险股之间,协整关系往往更稳定。跨行业的配对,比如茅台和特斯拉,虽然也可能协整,但逻辑上说不通,实盘容易翻车。

协整策略的优势很明显:

  • 市场中性:无论大盘涨跌,只要价差回归,就能赚钱
  • 低回撤:因为做的是均值回归,回撤通常可控
  • 可解释性强:每一笔交易都有明确的逻辑支撑

但也要注意,协整关系不是一成不变的。公司基本面变了、行业政策调整了,协整关系可能就断了。所以,我一般每 3 个月重新检验一次协整关系,确保策略还在「有效期内」。

1.4 本章知识体系总览

下面这张图,是我自己画的一个知识框架,帮你理清协整的核心脉络:

协整关系知识体系 协整定义 伪回归问题 量化交易意义 I(1)序列 + 线性组合平稳 长期均衡关系 高R² + 低DW统计量 独立随机游走的假相关 配对交易策略基础 市场中性、低回撤 核心:非平稳 → 线性组合 → 平稳

这张图把协整的三个核心模块串起来了。从左到右,先理解定义,再警惕伪回归,最后应用到量化交易中。每一步都环环相扣,缺一不可。

1.5 一个简单的协整检验示例

光说不练假把式。下面我用 Python 演示一下协整检验的基本流程。这段代码我用了很多年,基本没改过。

import numpy as np
import pandas as pd
import statsmodels.api as sm
from statsmodels.tsa.stattools import adfuller, coint

# 模拟两个协整序列
np.random.seed(42)
T = 500
# 共同趋势
common_trend = np.cumsum(np.random.randn(T))
# 两个序列
X = common_trend + np.random.randn(T) * 0.5
Y = common_trend + np.random.randn(T) * 0.5 + 2  # 有截距

# 做协整检验
score, pvalue, _ = coint(Y, X)
print(f'协整检验统计量: {score:.4f}')
print(f'p值: {pvalue:.4f}')

if pvalue < 0.05:
    print('结论:存在协整关系(拒绝原假设)')
else:
    print('结论:不存在协整关系(无法拒绝原假设)')

# 计算价差
# 先做回归估计协整系数
X_const = sm.add_constant(X)
model = sm.OLS(Y, X_const).fit()
beta = model.params[1]
alpha = model.params[0]
spread = Y - (alpha + beta * X)

# 价差平稳性检验
adf_result = adfuller(spread)
print(f'\n价差ADF检验p值: {adf_result[1]:.4f}')

这段代码做了三件事:生成两个协整序列、做 Engle-Granger 两步法检验、计算价差并验证平稳性。你跑一遍就会发现,p 值通常远小于 0.05,说明协整关系确实存在。

个人习惯:我一般不会只看 coint 函数的 p 值,还会额外做一步 ADF 检验,双重确认。毕竟实盘资金不是闹着玩的,多一道验证就少一分风险。

好了,这一章的内容就到这里。协整的概念、伪回归的坑、以及它在量化交易中的价值,我都尽量用大白话讲清楚了。下一章我们会深入 Engle-Granger 两步法的具体实现,到时候我会手把手带你写代码。


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