3. 配对交易的核心逻辑:协整关系的数学定义与统计检验,如何找到“天生一对”的股票对
配对交易,说白了就是找两只“步调一致”的股票。你涨我也涨,你跌我也跌。但光步调一致还不够——关键是要看它们分开后,会不会再回到一起。这就是协整关系要干的事。
我刚开始做配对交易时,犯过一个低级错误:直接拿两只同行业的股票,算个相关系数就上了。结果呢?价差越走越远,亏得我头皮发麻。后来我才明白,相关系数高不代表它们会“回来”。协整,才是那个“回来”的数学保证。
3.1 协整的数学定义:别被公式吓到
协整的数学定义其实不复杂。我尽量用大白话讲清楚。
假设有两只股票的价格序列:X_t 和 Y_t。它们各自都是“随机游走”——也就是非平稳的。但如果我们能找到一组系数 (1, -β),使得它们的线性组合:
Z_t = Y_t - β * X_t
变成一个平稳序列,那我们就说 X_t 和 Y_t 是协整的。
嗯,这里要注意:平稳是什么意思?就是 Z_t 的均值、方差不会随时间改变,它会围绕一个固定值上下波动。说白了,价差不会飘走,它会回归。
核心要点: 协整 ≠ 高相关。两只股票可以相关系数只有0.6,但协整关系很稳;也可以相关系数0.95,但根本不协整。我见过太多人把相关当协整,结果亏得底裤都不剩。
3.2 如何检验协整?三步走
我个人习惯用 Engle-Granger 两步法。为什么?简单、直观、好解释。你想想看,给老板汇报时,你总不能搬出一堆矩阵特征值吧?
第一步:用OLS估计协整系数
把 Y_t 对 X_t 做回归:
Y_t = α + β * X_t + ε_t
这里的 β 就是我们需要的对冲比率。残差 ε_t 就是价差序列。
第二步:对残差做单位根检验
常用的方法是 ADF 检验(Augmented Dickey-Fuller)。原假设是:残差存在单位根(即非平稳)。如果 p 值小于 0.05,我们就拒绝原假设,认为残差是平稳的——也就是协整关系成立。
第三步:确定交易阈值
如果协整成立,我们就用残差的均值和标准差来设定开仓、平仓线。一般做法是:
- 价差偏离均值 2 个标准差 → 开仓
- 价差回归到均值附近 → 平仓
- 价差偏离 3 个标准差 → 止损
我的经验: 别死磕 2 个标准差。我做过回测,有些股票对用 1.5 个标准差效果更好。市场波动大的时候,2 个标准差可能一年都开不了几次仓。建议你先跑一遍历史数据,看看最优阈值是多少。
3.3 代码实现:用Python找“天生一对”
下面是我常用的协整检验代码。你直接拿去用就行。
import numpy as np
import pandas as pd
import statsmodels.api as sm
from statsmodels.tsa.stattools import adfuller
def find_cointegrated_pairs(data, p_value_threshold=0.05):
"""
在股票池中寻找所有协整对
data: DataFrame, 每列是一只股票的价格序列
"""
n = data.shape[1]
pairs = []
for i in range(n):
for j in range(i+1, n):
# 取两只股票的价格
stock1 = data.iloc[:, i]
stock2 = data.iloc[:, j]
# OLS回归:stock2 = α + β * stock1
X = sm.add_constant(stock1)
model = sm.OLS(stock2, X).fit()
beta = model.params[1]
# 计算残差(价差)
spread = stock2 - beta * stock1
# ADF检验
adf_result = adfuller(spread, maxlag=1)
p_value = adf_result[1]
if p_value < p_value_threshold:
pairs.append((data.columns[i], data.columns[j], beta, p_value))
return pairs
这段代码会遍历所有股票对,找出协整关系显著的组合。返回的结果里包含了股票名称、对冲比率和 p 值。
避坑指南: 我曾经用这段代码跑全市场3000只股票,结果跑出来2000多对“协整”的。为什么?多重比较问题!你想想看,3000只股票两两组合,光随机噪声就能产生不少假阳性。我的建议是:要么用 Bonferroni 校正,要么先用行业筛选缩小范围。
3.4 协整 vs 相关:一张图说清楚
我画了一张图,帮你直观理解协整和相关的区别。
你看左边那张图,两只股票走势很像吧?但价差一直在扩大,永远不会回来。这就是高相关但非协整的典型。右边才是我们想要的——价差来回摆动,像橡皮筋一样。
3.5 实际选股中的注意事项
光靠统计检验还不够。我在实战中总结了几条经验:
- 行业要相同:两只银行股比银行和科技股更容易协整。逻辑上讲得通——它们受同样的宏观因素影响。
- 市值要接近:大银行和小银行的波动特征不同,协整关系不稳定。
- 流动性要好:我吃过亏,选了一只小盘股,开仓后半天成交不了,滑点吃掉所有利润。
- 样本期要够长:至少1年以上的日线数据。用3个月的数据跑出来的协整,大概率是过拟合。
一个小技巧: 我习惯用滚动窗口检验协整的稳定性。比如每3个月重新检验一次,如果某对股票连续多个窗口都通过检验,那才是真正的“天生一对”。
3.6 协整的局限性
说实话,协整不是万能的。它有几个硬伤:
- 结构突变:公司并购、行业政策变化,都可能让原本协整的关系破裂。我遇到过最惨的一次,两只银行股协整了5年,突然因为一次监管新规,价差再也没回来。
- 滞后性:协整检验用的是历史数据,但未来不一定重复历史。说白了,它是个后视镜。
- 交易成本:协整策略通常需要频繁调仓,如果交易成本太高,利润会被吃掉。
所以我的建议是:协整是选股的第一步,但不是唯一的一步。用它筛选出候选股票对后,还要结合基本面、市场情绪等因素做最终决策。
好了,这一章的内容就到这里。记住一句话:协整保证的是“会回来”,而不是“什么时候回来”。耐心,是做配对交易最重要的品质。