一、配对交易的核心:协整性
配对交易,说白了就是找两只「长得像」的股票。
它们价格走势高度同步,一旦出现偏离,就会像橡皮筋一样被拉回来。
这个「橡皮筋」的数学本质,就是协整性。
协整性的直观理解:
两只股票的价格本身可能都是随机游走的(非平稳),但它们之间的价差却是平稳的。
换句话说:单独看它们,你猜不到明天涨跌;但看它们的差值,你知道它大概率会回归均值。
我刚开始做配对交易时,犯过一个低级错误——只看相关系数。两只股票相关系数高达0.95,我兴冲冲地建了仓。结果价差越走越远,亏得我头皮发麻。
后来才明白:相关系数高不代表价差会回归。协整性才是那个「回归承诺」。
协整性的数学定义
两个时间序列 \( X_t \) 和 \( Y_t \),如果满足:
- 各自都是 \( I(1) \) 过程(一阶单整,即一阶差分后平稳)
- 存在一个线性组合 \( Z_t = Y_t - \beta X_t \) 是 \( I(0) \) 过程(平稳)
那么它们就是协整的。
这个 \( \beta \) 就是对冲比率。我习惯用最小二乘法(OLS)来估计它,但要注意:OLS在非平稳序列上可能产生伪回归。所以估计完 \( \beta \) 后,一定要对残差做平稳性检验。
我的经验:
实际交易中,\( \beta \) 不是一成不变的。我一般用滚动窗口(比如60个交易日)重新估计,避免参数过时。
二、平稳性检验:ADF检验
平稳性检验,是配对交易的「体检报告」。
你想想看,如果价差本身都不平稳,你怎么敢赌它回归?
ADF检验的原理
ADF(Augmented Dickey-Fuller)检验,核心是检验一个时间序列是否存在单位根。
原假设 \( H_0 \):序列存在单位根(非平稳)。
备择假设 \( H_1 \):序列平稳。
检验回归方程:
Δy_t = α + β·t + γ·y_{t-1} + δ₁·Δy_{t-1} + δ₂·Δy_{t-2} + ... + ε_t
关键看 \( \gamma \) 的t统计量。如果它小于临界值(比如1%显著性水平下的-3.43),就拒绝原假设,认为序列平稳。
注意:
ADF检验对滞后阶数很敏感。选少了,残差自相关;选多了,检验功效下降。
我一般用AIC或BIC准则自动选择滞后阶数,但也会手动检查残差是否白噪声。
Python实现ADF检验
直接上代码,这是我常用的写法:
import numpy as np
import pandas as pd
from statsmodels.tsa.stattools import adfuller
def check_stationarity(series, name=''):
result = adfuller(series, autolag='AIC')
p_value = result[1]
critical_values = result[4]
print(f'{name} ADF检验结果:')
print(f' ADF统计量: {result[0]:.4f}')
print(f' p值: {p_value:.4f}')
print(f' 临界值:')
for key, value in critical_values.items():
print(f' {key}: {value:.4f}')
if p_value < 0.05:
print(f' → 结论:{name} 平稳(拒绝原假设)')
return True
else:
print(f' → 结论:{name} 非平稳(无法拒绝原假设)')
return False
# 示例:检验价差序列
spread = y - beta * x
is_stationary = check_stationarity(spread, '价差')
这段代码我用了好几年。autolag='AIC' 会自动选滞后阶数,省心。
避坑指南:
我曾经遇到一个价差序列,ADF检验p值0.049,刚好显著。我兴冲冲建了仓,结果后面价差直接崩了。
后来我给自己定了个规矩:p值必须小于0.01才进场。宁可错过,不可做错。
三、配对选择方法论
选对了配对,策略就成功了一半。
我见过太多人,随便找两只同行业的股票就开始跑。结果呢?价差根本不回归,亏得底裤都不剩。
第一步:初筛——行业与市值
- 同行业:业务模式相似,受相同宏观因素影响。比如茅台和五粮液,招商银行和兴业银行。
- 市值相近:流动性匹配,避免一只股票被另一只「带偏」。
- 日均成交额 > 1亿:确保能顺利进出。
我一般先用SQL把全市场股票按行业分类,然后计算市值排名,选出同行业且市值排名相差不超过10位的股票对。
第二步:相关性筛选
计算过去120个交易日的相关系数,保留 > 0.8 的候选对。
注意:这里只是初筛,不是最终依据。
| 行业 | 候选对 | 相关系数 |
|---|---|---|
| 白酒 | 茅台 vs 五粮液 | 0.92 |
| 银行 | 招行 vs 兴业 | 0.88 |
| 保险 | 平安 vs 太保 | 0.85 |
第三步:协整检验
这才是核心环节。我通常用两步法:
- 估计对冲比率:用OLS回归 \( Y_t = \alpha + \beta X_t + \epsilon_t \)
- 检验残差平稳性:对 \( \epsilon_t \) 做ADF检验
只有残差平稳的配对,才进入最终交易池。
我的筛选标准:
ADF检验p值 < 0.01
半衰期(half-life of mean reversion)在5-20个交易日之间
半衰期太短(<5天),交易成本太高;太长(>20天),资金占用太久。
第四步:稳健性检验
我会做两个额外测试:
- 样本外测试:用最近20%的数据做验证,看协整关系是否稳定
- 滚动协整:用滚动窗口(比如120天)重复检验,看协整关系是否随时间变化
如果滚动检验中,超过20%的窗口不协整,我会直接放弃这个配对。
重要提醒:
协整关系不是永恒的。公司基本面变化、行业政策调整,都可能导致协整关系破裂。
我每周都会重新检验一次所有活跃配对的协整性,一旦发现「不协整」,立即平仓。
本章知识体系
这张图把本章的核心逻辑串起来了。从协整性出发,到ADF检验验证,再到配对选择的四步流程,环环相扣。
最后说一句:
配对交易不是「买了就不管」的策略。市场在变,协整关系也在变。
我每天开盘前都会跑一遍协整检验脚本,确保我的配对池是「干净」的。
嗯,这习惯帮我躲过好几次黑天鹅。