2、配对交易理论基础:配对交易的核心思想、价差序列的构建、平稳性检验(ADF检验)

2.1 配对交易的核心思想

配对交易,说白了就是找两个“长得像”的股票,然后利用它们之间暂时的价格偏离来赚钱。

我刚开始接触这个策略时,觉得它挺反直觉的。做多一只股票,同时做空另一只?这不是对冲掉了嘛?嗯,没错,就是要对冲掉市场风险。你想想看,我们赚的不是大盘上涨的钱,而是两个股票之间“价差”回归的钱。

核心逻辑其实很简单:

  • 找一对相关性高的股票——比如茅台和五粮液,或者中国平安和招商银行
  • 它们的历史价差是稳定的——价差会在一个均值附近波动
  • 当价差偏离均值时,我们赌它会回归——偏离大了就开仓,回归了就平仓

我在项目中遇到过一个问题:很多人以为只要两只股票走势像就能做配对。其实不然。走势像只是表象,真正关键的是价差序列要平稳。这个后面会细说。

重要理解:配对交易本质上是在做“统计套利”。我们不预测价格方向,只预测价差的回归。这是一种市场中性的策略。

2.2 价差序列的构建

好,现在我们来聊聊怎么构建价差序列。这是整个策略的基石。

假设我们选了股票A和股票B。价差不是简单地把价格相减就完事了。为什么?因为两只股票的价格尺度可能差很多。茅台2000块,五粮液200块,直接相减的话,茅台的价格波动会完全主导价差。

我个人习惯用两种方式构建价差:

  1. 价格比率法:价差 = P_A / P_B
  2. 回归残差法:先做线性回归 P_A = α + β * P_B + ε,然后取残差 ε 作为价差

在实际项目中,我更推荐回归残差法。因为它能剔除掉β系数的影响,得到更“干净”的价差信号。

举个例子:

import numpy as np
import statsmodels.api as sm

# 假设我们有两只股票的价格序列
prices_A = np.array([100, 102, 101, 105, 107])
prices_B = np.array([50, 51, 50.5, 52.5, 53.5])

# 添加常数项做回归
X = sm.add_constant(prices_B)
model = sm.OLS(prices_A, X).fit()
beta = model.params[1]
alpha = model.params[0]

# 构建价差序列
spread = prices_A - alpha - beta * prices_B
print("价差序列:", spread)

小提示:回归窗口期的选择很重要。我一般用60个交易日做滚动回归。太短了噪声大,太长了反应迟钝。

2.3 平稳性检验(ADF检验)

价差序列构建好了,接下来最关键的一步:检验它是不是平稳的。

什么叫平稳?简单说就是价差的均值、方差不会随时间变化。如果价差序列不平稳,那它可能越走越远,你的配对交易就会亏得很惨。

我曾经犯过一个错误:选了一对看起来走势很一致的股票,价差也构建好了,结果ADF检验没通过。我当时想“哎呀差一点,应该没事吧”,就直接上了实盘。结果呢?价差一路漂移,止损出局。嗯,从那以后我再也不敢跳过平稳性检验了。

ADF检验(Augmented Dickey-Fuller Test)是检验平稳性的标准方法。它的原假设是:序列存在单位根(即不平稳)。

判断标准很简单:

  • p值 < 0.05:拒绝原假设,序列平稳 ✅
  • p值 ≥ 0.05:不能拒绝原假设,序列不平稳 ❌

代码实现:

from statsmodels.tsa.stattools import adfuller

# 假设spread是我们构建的价差序列
result = adfuller(spread)

print(f"ADF统计量: {result[0]:.4f}")
print(f"p值: {result[1]:.4f}")

if result[1] < 0.05:
    print("✅ 价差序列平稳,可以做配对交易")
else:
    print("❌ 价差序列不平稳,需要重新选对")

⚠️ 注意:ADF检验的滞后阶数选择会影响结果。statsmodels默认会用AIC自动选择最优滞后阶数,一般够用了。但如果你发现结果不稳定,可以手动指定maxlag参数。

2.4 知识体系总览

为了让你更直观地理解这一章的知识结构,我画了一张流程图:

配对交易理论基础 - 知识体系 配对交易核心思想 价差序列构建 方法一:价格比率法 方法二:回归残差法(推荐) 平稳性检验(ADF检验) ✅ p < 0.05 → 平稳 → 可交易 ❌ p ≥ 0.05 → 不平稳 → 重新选对

2.5 实战中的几个坑

最后,分享几个我在实战中踩过的坑:

  • 不要只看相关性——两只股票相关系数0.9以上,但价差可能完全不平稳。我见过太多人栽在这个坑里。
  • 注意数据频率——日线数据做出来的价差,和分钟线做出来的可能完全不同。我个人习惯先用日线做筛选,再用小时线做交易。
  • 价差回归不是必然的——即使ADF检验通过了,也只是统计意义上的“大概率回归”。黑天鹅事件来了,什么平稳性都不好使。

我的建议:刚开始做配对交易,先用模拟盘跑3个月。别急着上实盘。价差序列的平稳性会随着时间变化,需要定期重新检验。


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