一、配对交易的核心:协整性

配对交易,说白了就是找两只「长得像」的股票。

它们价格走势高度同步,一旦出现偏离,就会像橡皮筋一样被拉回来。

这个「橡皮筋」的数学本质,就是协整性。

协整性的直观理解:

两只股票的价格本身可能都是随机游走的(非平稳),但它们之间的价差却是平稳的。

换句话说:单独看它们,你猜不到明天涨跌;但看它们的差值,你知道它大概率会回归均值。

我刚开始做配对交易时,犯过一个低级错误——只看相关系数。两只股票相关系数高达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

第三步:协整检验

这才是核心环节。我通常用两步法:

  1. 估计对冲比率:用OLS回归 \( Y_t = \alpha + \beta X_t + \epsilon_t \)
  2. 检验残差平稳性:对 \( \epsilon_t \) 做ADF检验

只有残差平稳的配对,才进入最终交易池。

我的筛选标准:

ADF检验p值 < 0.01

半衰期(half-life of mean reversion)在5-20个交易日之间

半衰期太短(<5天),交易成本太高;太长(>20天),资金占用太久。

第四步:稳健性检验

我会做两个额外测试:

  • 样本外测试:用最近20%的数据做验证,看协整关系是否稳定
  • 滚动协整:用滚动窗口(比如120天)重复检验,看协整关系是否随时间变化

如果滚动检验中,超过20%的窗口不协整,我会直接放弃这个配对。

重要提醒:

协整关系不是永恒的。公司基本面变化、行业政策调整,都可能导致协整关系破裂。

我每周都会重新检验一次所有活跃配对的协整性,一旦发现「不协整」,立即平仓。

本章知识体系

配对交易知识体系 配对交易 协整性概念 I(1) + 线性组合 → I(0) 对冲比率 β 的估计 价差回归均值特性 ADF平稳性检验 单位根检验原理 滞后阶数选择(AIC/BIC) p值 < 0.01 才进场 配对选择方法论 行业 + 市值初筛 相关性 > 0.8 候选 协整检验 + 半衰期 样本外 + 滚动检验 核心原则:协整是基础,检验是保障,选择是关键 宁可错过,不可做错

这张图把本章的核心逻辑串起来了。从协整性出发,到ADF检验验证,再到配对选择的四步流程,环环相扣。

最后说一句:

配对交易不是「买了就不管」的策略。市场在变,协整关系也在变。

我每天开盘前都会跑一遍协整检验脚本,确保我的配对池是「干净」的。

嗯,这习惯帮我躲过好几次黑天鹅。

专注资料整理