4、配对交易策略:基于协整的配对交易、阈值设定、开平仓逻辑

配对交易,说白了就是找两个“长得像”的品种,等它们价格跑偏了再赌一把回归。我做了这么多年量化,这套策略算是我的压箱底之一。今天咱们就把它拆开揉碎了讲清楚。

4.1 协整关系:配对交易的数学根基

很多人一上来就谈相关性,其实这是个坑。我记得刚入行那会儿,拿螺纹钢和热卷做配对,相关系数0.95,结果回测亏得底裤都不剩。为什么?因为相关性高不代表价差会回归。

协整才是关键。两个序列各自随机游走,但它们的线性组合是平稳的——这才是配对交易能赚钱的根本逻辑。

核心概念:如果两个价格序列X和Y满足:Y - βX是平稳序列,那么它们就是协整的。β叫协整系数,说白了就是“一个单位X能换多少Y”。

检验协整最常用的方法是Engle-Granger两步法。我习惯用Python的statsmodels库,几行代码就能搞定:

import statsmodels.api as sm
import numpy as np

# 假设price_a和price_b是两个价格序列
# 第一步:回归
X = sm.add_constant(price_a)
model = sm.OLS(price_b, X).fit()
beta = model.params[1]  # 协整系数

# 第二步:检验残差平稳性
residuals = price_b - beta * price_a
adf_result = sm.tsa.stattools.adfuller(residuals)
print(f'ADF统计量: {adf_result[0]:.4f}')
print(f'p值: {adf_result[1]:.4f}')

# p值小于0.05,说明残差平稳,存在协整关系
if adf_result[1] < 0.05:
    print('恭喜,这两个品种可以配对交易!')
else:
    print('换个组合试试吧')

这里有个坑:回归时要不要加常数项?我个人建议加。不加常数项相当于强制价差均值为0,现实中哪有这么完美的事?

4.2 阈值设定:开仓信号怎么定

有了协整关系,接下来就是设定阈值。说白了就是:价差偏离到多少,我们才动手?

我见过有人用固定阈值,比如±2倍标准差。但这样做有个问题——市场波动会变。2015年股灾那会儿,波动率翻了好几倍,固定阈值直接失效。

更好的做法是动态阈值。我一般用滚动窗口计算均值和标准差:

# 计算标准化价差
spread = price_b - beta * price_a
z_score = (spread - spread.rolling(60).mean()) / spread.rolling(60).std()

# 设定阈值
entry_threshold = 2.0   # 开仓阈值
exit_threshold = 0.5    # 平仓阈值

# 生成信号
long_signal = z_score < -entry_threshold  # 价差过小,做多价差
short_signal = z_score > entry_threshold   # 价差过大,做空价差
exit_signal = abs(z_score) < exit_threshold

我的经验:窗口大小选60-120个交易日比较合适。太短了信号太多,手续费都亏不起;太长了反应迟钝,行情都走完了才开仓。

阈值选多少?这得看品种。我曾经做过一个统计:

品种类型 推荐开仓阈值 推荐平仓阈值 说明
股指期货 2.0 - 2.5 0.3 - 0.5 流动性好,滑点小
商品期货 1.5 - 2.0 0.5 - 0.8 波动大,留点余地
加密货币 2.5 - 3.0 0.5 - 1.0 极端行情多,阈值要宽

嗯,这里要注意:阈值不是越大越好。阈值设大了,开仓次数少,可能一年都做不了几笔;设小了,频繁交易,手续费和滑点能把利润吃光。

4.3 开平仓逻辑:从信号到执行

信号有了,怎么执行?我见过最蠢的做法是:信号一出就全仓干进去。你想想看,万一信号是假的呢?

我的做法是分批建仓。比如价差偏离2倍标准差时开30%仓位,偏离2.5倍时再加30%,偏离3倍时满仓。这样既不会踏空,也能控制风险。

避坑指南:我曾经在螺纹钢和热卷上吃过亏——信号出来了,但开仓时滑点太大,直接把利润吃没了。后来我加了限价单,宁可错过也不追单。

平仓逻辑相对简单:价差回归到均值附近就平仓。但有个细节——要不要设止损?我的答案是:必须设!

为什么?因为协整关系可能被打破。比如两个品种的基本面变了,价差可能永远回不来。我一般设2-3倍开仓阈值作为止损线。

完整的开平仓逻辑可以用流程图表示:

配对交易开平仓逻辑流程图 计算标准化价差 |z-score| > 阈值? 继续监控 z-score 正/负? 做空价差 做多价差 监控价差回归 平仓

4.4 实战中的坑与优化

说了这么多理论,来点实际的。我在项目中遇到过几个典型问题:

  • 协整关系漂移:两个品种的协整关系不是一成不变的。我建议每3-6个月重新检验一次,发现不协整了赶紧停手。
  • 交易成本:别小看手续费和滑点。我做过测算,如果双边交易成本超过0.1%,阈值至少要设到1.5倍标准差以上才能赚钱。
  • 资金管理:单笔风险不要超过总资金的2%。我见过有人一把梭哈,结果遇到黑天鹅直接爆仓。

我的小技巧:开仓后如果价差继续扩大,别慌。只要协整关系还在,价差迟早会回来。我一般会加仓,但加仓比例要递减——比如第一次开1手,第二次开0.5手,第三次开0.25手。

最后说一句:配对交易不是印钞机。它赚的是均值回归的钱,遇到趋势行情会很难受。我2017年做螺纹钢和热卷配对,整整亏了半年,后来发现是供给侧改革把基本面彻底改变了。嗯,从那以后我学会了——做配对交易之前,先看看基本面有没有变化