2. 协整理论入门:协整的定义、平稳性检验(ADF检验)、协整关系的经济学含义
各位同学,欢迎来到第二章。上一章我们聊了配对交易的基本逻辑,说白了就是找两个“步调一致”的资产,等它们走散了再赌一把回归。但这里有个核心问题:你怎么知道它们是真的“步调一致”,还是只是碰巧一起走了几步?
嗯,这就是协整理论要解决的事。我个人觉得,协整是整个统计套利的基石。没搞懂它,后面那些策略代码写得再漂亮也是空中楼阁。
2.1 什么是协整?一个直观的理解
先别急着看公式。咱们用大白话讲:
假设你牵着一条狗散步。你往前走,狗可能跑到你前面,也可能落在后面,但绳子拽着它,它不会跑太远。过一会儿,它又会回到你身边。
这里,你和狗的位置就是两个时间序列。它们各自可能忽左忽右(非平稳),但它们的差值(狗绳的长度)却在一个范围内波动(平稳)。这就是协整。
协整的正式定义:如果两个或多个非平稳时间序列的线性组合是平稳的,那么这些序列之间存在协整关系。
我在项目中遇到过不少新手,上来就把两个股票的价格序列做相关性分析,发现相关系数0.9就兴奋得不行。结果实盘一跑,亏得亲妈都不认识。为什么?因为相关性高不代表它们会一起回归。协整才是那个“回归”的保证书。
- 相关性衡量的是“同向变动”的程度
- 协整衡量的是“长期均衡”的关系
- 两个随机游走的序列可以有很高的相关性,但完全没有协整关系
2.2 平稳性检验:ADF检验
要判断协整,第一步是判断单个序列是否平稳。说白了,就是看这个序列有没有“根”——单位根。
什么是平稳?
一个时间序列是平稳的,意味着它的统计性质(均值、方差)不随时间变化。你想想看,如果一只股票的均值一直在漂移,你怎么用它来做配对?没法做。
ADF检验(Augmented Dickey-Fuller Test)
这是最常用的单位根检验方法。它的原假设是:序列存在单位根(即非平稳)。
检验逻辑很简单:
- 如果p值小于0.05,拒绝原假设,序列平稳
- 如果p值大于0.05,不能拒绝原假设,序列非平稳
代码实现也不复杂。我习惯用statsmodels库,直接调函数:
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'临界值:')
for key, value in result[4].items():
print(f' {key}: {value:.4f}')
# 判断
if result[1] < 0.05:
print('序列平稳')
else:
print('序列非平稳,存在单位根')
输出结果大概长这样:
| 指标 | 值 |
|---|---|
| ADF统计量 | -1.2345 |
| p值 | 0.6543 |
| 1%临界值 | -3.4582 |
| 5%临界值 | -2.8735 |
| 10%临界值 | -2.5731 |
你看,p值0.65,远大于0.05,说明这个随机游走确实是非平稳的。
2.3 协整关系的经济学含义
好,现在技术层面讲完了。但咱们做量化交易的,不能只懂敲代码,还得明白背后的经济学逻辑。否则你就是在瞎跑策略。
协整的经济学含义是什么?
说白了,协整反映的是两个资产之间存在一种长期均衡关系。这种关系通常由一些基本面因素驱动:
- 同行业股票:比如茅台和五粮液,都是白酒龙头。它们的价格可能短期有差异,但长期看,估值水平会趋同。
- 产业链上下游:比如原油和航空公司。原油是航空公司的成本,油价涨,航空股跌。这种负相关关系如果稳定,也可以做配对。
- 替代品:比如黄金和比特币。虽然听起来有点扯,但有些资金确实把它们都当作避险资产。
我曾经犯过一个错:把两只不同行业的股票硬凑在一起做协整检验,结果发现p值还挺低。当时我挺兴奋,觉得发现了新大陆。结果实盘跑了两个月,亏了15%。后来复盘才发现,那只是数据挖掘的假象——样本内拟合得好,样本外就崩了。
2.4 协整检验的完整流程
嗯,这里我把整个流程梳理一下。你照着这个步骤走,基本不会出错:
- 选资产:基于基本面逻辑,选出可能相关的两个资产
- 单序列平稳性检验:分别对两个价格序列做ADF检验,确认它们都是非平稳的(I(1)过程)
- 做回归:用其中一个序列对另一个做OLS回归,得到残差
- 残差平稳性检验:对残差做ADF检验。如果残差平稳,说明两个序列协整
- 确定协整系数:回归系数就是协整系数,也就是配对比例
代码实现也很直接:
from statsmodels.api import OLS, add_constant
# 假设price_a和price_b是两个价格序列
# 步骤1:确认它们都是非平稳的(略)
# 步骤2:做回归
X = add_constant(price_b)
model = OLS(price_a, X).fit()
residuals = model.resid
# 步骤3:对残差做ADF检验
result_resid = adfuller(residuals)
print(f'残差ADF检验p值: {result_resid[1]:.4f}')
if result_resid[1] < 0.05:
print('存在协整关系!')
print(f'协整系数(对冲比例): {model.params[1]:.4f}')
else:
print('不存在协整关系')
2.5 本章知识体系图
为了让你更直观地理解本章的知识结构,我画了一张流程图:
这张图把本章的核心逻辑串起来了。你从“协整理论”出发,往三个方向展开:定义、检验方法、经济学含义。最后汇聚到核心逻辑——非平稳序列通过线性组合变成平稳残差,协整关系就成立了。
好了,这一章的内容就到这儿。协整理论是配对交易的“地基”,地基不牢,后面盖的房子再漂亮也得塌。下一章我们会讲如何用Engle-Granger两步法做协整检验,以及怎么确定最优的对冲比例。到时候我会分享一些我在实盘中踩过的坑,保证让你少走弯路。