一、基本概念与原理#
1.1 什么是配对交易?#
配对交易是一种市场中性的统计套利策略,核心思想是利用两个具有长期均衡关系的资产价格偏离进行交易。当价差扩大时做空高价资产/做多低价资产,价差收窄时平仓获利。这需要两个资产满足协整关系。
1.2 协整性 vs 相关性#
| 特性 | 相关性 | 协整性 |
|---|---|---|
| 衡量指标 | 相关系数 | 协整检验 p 值 |
| 时间依赖 | 短期波动关系 | 长期均衡关系 |
| 策略基础 | 方向性趋势 | 均值回归特性 |
| 示例 | 油价与能源股 | 同一行业竞争企业 |
code
import numpy as np
import pandas as pd
import statsmodels.api as sm
from statsmodels.tsa.stattools import coint
# 生成协整序列示例
np.random.seed(101)
X = np.cumsum(np.random.normal(0, 1, 200)) + 30
Y = X + np.random.normal(0, 3, 200) + 101.3 协整检验#
Engle-Granger两步法:
-
对两个序列进行OLS回归:Y = α + βX + ε
-
对残差ε进行ADF单位根检验
code
# 协整检验示例
score, pvalue, _ = coint(X, Y)
print(f"协整检验p值: {pvalue:.4f}") # 应小于0.05二、实战步骤详解#
2.1 数据准备与处理#
使用yfinance获取数据#
code
import yfinance as yf
symbols = ['AAPL', 'MSFT']
start = '2020-01-01'
end = '2023-01-01'
data = yf.download(symbols, start=start, end=end)
prices = data['Close'].reset_index().melt(id_vars='Date',
var_name='Symbol',
value_name='Price')
pivot_prices = prices.pivot(index='Date', columns='Symbol', values='Price')数据可视化#
code
import matplotlib.pyplot as plt
pivot_prices.plot(figsize=(12,6))
plt.title('Price Series')
plt.ylabel('Price')
plt.show()2.2 价差构建与标准化#
回归法构建价差#
code
X = sm.add_constant(pivot_prices['AAPL'])
model = sm.OLS(pivot_prices['MSFT'], X).fit()
hedge_ratio = model.params['AAPL']
spread = pivot_prices['MSFT'] - hedge_ratio * pivot_prices['AAPL']Z-score标准化#
code
def zscore(series, window=30):
mean = series.rolling(window=window).mean()
std = series.rolling(window=window).std()
return (series - mean) / std
spread_z = zscore(spread)2.3 交易信号生成#
code
entry_threshold = 1.0
exit_threshold = 0.5
signals = pd.DataFrame(index=spread_z.index)
signals['position'] = 0
signals.loc[spread_z > entry_threshold, 'position'] = -1 # 做空价差
signals.loc[spread_z < -entry_threshold, 'position'] = 1 # 做多价差
signals.loc[abs(spread_z) < exit_threshold, 'position'] = 02.4 策略回测#
code
# 计算收益
returns = pivot_prices.pct_change().dropna()
strategy_returns = signals['position'].shift(1) * (returns['MSFT'] - hedge_ratio*returns['AAPL'])
# 累计收益可视化
cum_returns = (1 + strategy_returns.dropna()).cumprod()
cum_returns.plot(title='Strategy Cumulative Returns')三、关键问题解析#
3.1 动态对冲比率#
使用滚动窗口计算时变对冲比率:
code
rolling_beta = pd.Series(index=pivot_prices.index, dtype=float)
for i in range(30, len(pivot_prices)):
X = sm.add_constant(pivot_prices['AAPL'].iloc[i-30:i])
model = sm.OLS(pivot_prices['MSFT'].iloc[i-30:i], X).fit()
rolling_beta.iloc[i] = model.params['AAPL']3.2 策略优化方向#
-
加入交易成本与滑点模型
-
多时间框架分析
-
风险平价头寸管理
-
机器学习优化阈值
四、练习题#
-
从yfinance获取TSLA和F的2021-2023年数据,检验其协整性
-
计算动态Z-score,设定1.25/-1.25为交易阈值
-
回测策略并绘制收益曲线
-
(进阶)加入3σ止损机制
code
# 练习参考答案框架
symbols = ['TSLA', 'F']
data = yf.download(symbols, start='2021-01-01', end='2023-12-31')['Close']
# 在此处补充你的代码...五、注意事项#
-
协整关系可能随时间变化,需定期检验
-
注意流动性风险,避免小盘股配对
-
考虑市场状态影响(牛市/熊市)
-
多品种组合分散风险
-
过拟合风险:避免在单一品种过度优化参数
六、扩展阅读#
-
误差修正模型(ECM)
-
三重协整检验(Johansen方法)
-
配对交易与Copula函数结合
-
高频数据中的微观结构噪声处理
通过本教程,您已经掌握了配对交易的核心原理与实现方法。实际应用中需结合市场环境动态调整参数,并严格进行风险管理。建议从模拟交易开始验证策略有效性,再逐步实盘应用。