2、配对交易理论基础:配对交易的核心思想、价差序列的构建、平稳性检验(ADF检验)
2.1 配对交易的核心思想
配对交易,说白了就是找两个“长得像”的股票,然后利用它们之间暂时的价格偏离来赚钱。
我刚开始接触这个策略时,觉得它挺反直觉的。做多一只股票,同时做空另一只?这不是对冲掉了嘛?嗯,没错,就是要对冲掉市场风险。你想想看,我们赚的不是大盘上涨的钱,而是两个股票之间“价差”回归的钱。
核心逻辑其实很简单:
- 找一对相关性高的股票——比如茅台和五粮液,或者中国平安和招商银行
- 它们的历史价差是稳定的——价差会在一个均值附近波动
- 当价差偏离均值时,我们赌它会回归——偏离大了就开仓,回归了就平仓
我在项目中遇到过一个问题:很多人以为只要两只股票走势像就能做配对。其实不然。走势像只是表象,真正关键的是价差序列要平稳。这个后面会细说。
重要理解:配对交易本质上是在做“统计套利”。我们不预测价格方向,只预测价差的回归。这是一种市场中性的策略。
2.2 价差序列的构建
好,现在我们来聊聊怎么构建价差序列。这是整个策略的基石。
假设我们选了股票A和股票B。价差不是简单地把价格相减就完事了。为什么?因为两只股票的价格尺度可能差很多。茅台2000块,五粮液200块,直接相减的话,茅台的价格波动会完全主导价差。
我个人习惯用两种方式构建价差:
- 价格比率法:价差 = P_A / P_B
- 回归残差法:先做线性回归 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 知识体系总览
为了让你更直观地理解这一章的知识结构,我画了一张流程图:
2.5 实战中的几个坑
最后,分享几个我在实战中踩过的坑:
- 不要只看相关性——两只股票相关系数0.9以上,但价差可能完全不平稳。我见过太多人栽在这个坑里。
- 注意数据频率——日线数据做出来的价差,和分钟线做出来的可能完全不同。我个人习惯先用日线做筛选,再用小时线做交易。
- 价差回归不是必然的——即使ADF检验通过了,也只是统计意义上的“大概率回归”。黑天鹅事件来了,什么平稳性都不好使。
我的建议:刚开始做配对交易,先用模拟盘跑3个月。别急着上实盘。价差序列的平稳性会随着时间变化,需要定期重新检验。
公众号:蓝海资料掘金营,微信deep3321