4、配对交易策略:协整配对、距离方法与随机价差模型
配对交易,说白了就是找两个「长得像」的股票,等它们走散了再买回来。我做了这么多年量化,这招在震荡市里特别好用。今天咱们就把三种主流方法掰开揉碎了讲。
4.1 协整配对:最正统的方法
协整这个概念,我刚开始接触时也觉得绕。其实很简单——两个价格序列各自随机游走,但它们的线性组合是平稳的。这就叫协整。
为什么会这样?因为背后有共同的驱动因素。比如茅台和五粮液,都是白酒龙头,长期看价差会回归。
核心步骤:
- 选候选股票对(同行业、同板块优先)
- 用ADF检验确认协整关系
- 估计对冲比率(通常用OLS回归)
- 构建价差序列,设定开平仓阈值
代码实现其实不复杂。我习惯用statsmodels做协整检验:
import statsmodels.api as sm
from statsmodels.tsa.stattools import adfuller
# 假设price_a和price_b是两列价格序列
def find_cointegrated_pair(price_a, price_b):
# OLS回归估计对冲比率
price_a = sm.add_constant(price_a)
model = sm.OLS(price_b, price_a).fit()
hedge_ratio = model.params[1]
# 计算价差
spread = price_b - hedge_ratio * price_a['price_a']
# ADF检验
adf_result = adfuller(spread.dropna())
p_value = adf_result[1]
return hedge_ratio, p_value
嗯,这里要注意:p值小于0.05才算协整。我在项目中遇到过p值刚好0.051的情况,硬着头皮上了,结果回测惨不忍睹。后来我给自己定了个规矩——低于0.01才用。
个人经验:协整配对适合日频以上交易。高频的话,交易成本会吃掉大部分利润。我建议至少用1小时K线。
4.2 距离方法:简单粗暴但有效
距离方法就直白多了。把两个价格序列标准化,然后算欧氏距离。距离大了就做空,小了就做多。
你想想看,这方法不需要做协整检验,省了不少事。但代价是——它假设价格已经标准化了,实际中可能不成立。
具体步骤:
- 将价格序列标准化(减去均值除以标准差)
- 计算标准化价格的差值
- 设定阈值(比如±2个标准差)
- 当差值超过阈值时开仓,回归时平仓
我曾经用这个方法做过美股ETF配对。SPY和IVV,都是标普500ETF,距离方法跑出来的夏普比率有1.8。但要注意,这个方法对参数很敏感。
避坑指南:我曾经把回看窗口设成60天,结果遇到2020年3月的暴跌,距离直接崩了。后来我改成滚动窗口,并且加了波动率过滤。记住,距离方法在极端行情下会失效。
4.3 随机价差模型:进阶玩法
随机价差模型,说白了就是把价差当成一个均值回归过程来建模。最常用的是Ornstein-Uhlenbeck过程。
模型长这样:
dX(t) = θ(μ - X(t))dt + σdW(t)
其中θ是回归速度,μ是长期均值,σ是波动率。参数估计可以用最大似然估计。
我个人的习惯是用卡尔曼滤波做在线估计。这样参数会随着市场变化而调整,比固定参数强多了。
代码实现:
import numpy as np
from scipy.optimize import minimize
def estimate_ou_params(spread):
# 最大似然估计OU过程参数
def neg_log_likelihood(params):
theta, mu, sigma = params
n = len(spread)
dt = 1
# 计算似然函数
ll = 0
for i in range(1, n):
x_prev = spread[i-1]
x_curr = spread[i]
mean = x_prev * np.exp(-theta*dt) + mu*(1 - np.exp(-theta*dt))
var = sigma**2 * (1 - np.exp(-2*theta*dt)) / (2*theta)
ll += -0.5*np.log(2*np.pi*var) - (x_curr - mean)**2 / (2*var)
return -ll
# 初始值
init_params = [1.0, np.mean(spread), np.std(spread)]
result = minimize(neg_log_likelihood, init_params, method='L-BFGS-B')
return result.x
三种方法对比:
| 方法 | 优点 | 缺点 | 适用场景 |
|---|---|---|---|
| 协整配对 | 理论基础扎实 | 需要检验,参数多 | 日频以上,长期稳定关系 |
| 距离方法 | 简单快速 | 假设强,极端行情失效 | 高频,短期套利 |
| 随机价差模型 | 动态调整,适应性强 | 计算复杂,过拟合风险 | 中低频,需要自适应 |
4.4 实战中的坑与对策
做了这么多年配对交易,我踩过的坑能写本书。这里挑几个重点说说:
- 幸存者偏差:回测时用现在的股票池,但历史上有些股票退市了。我建议用当时的成分股做回测。
- 交易成本:配对交易频率高,佣金和滑点能吃掉利润。我一般按双边万三算成本。
- 流动性风险:小盘股配对容易遇到流动性枯竭。我习惯只做日均成交额1亿以上的股票。
我的小技巧:开仓后设个止损线。比如价差超过3个标准差就止损。虽然会亏点钱,但能避免黑天鹅。我曾经靠这个躲过了2015年的股灾。
最后说一句,配对交易不是万能药。它适合震荡市,趋势行情里会亏得很难看。所以,一定要结合市场环境来用。