查看全集:💎Quantopia量化分析56讲
配对交易是一种市场中性的统计套利策略,核心思想是利用两个具有长期均衡关系的资产价格偏离进行交易。当价差扩大时做空高价资产/做多低价资产,价差收窄时平仓获利。这需要两个资产满足协整关系。
特性 | 相关性 | 协整性 |
衡量指标 | 相关系数 | 协整检验p值 |
时间依赖 | 短期波动关系 | 长期均衡关系 |
策略基础 | 方向性趋势 | 均值回归特性 |
示例 | 油价与能源股 | 同一行业竞争企业 |
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) + 10
Engle-Granger两步法:
# 协整检验示例
score, pvalue, _ = coint(X, Y)
print(f"协整检验p值: {pvalue:.4f}") # 应小于0.05
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')
import matplotlib.pyplot as plt
pivot_prices.plot(figsize=(12,6))
plt.title('Price Series')
plt.ylabel('Price')
plt.show()
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']
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)
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'] = 0
# 计算收益
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')
使用滚动窗口计算时变对冲比率:
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']
# 练习参考答案框架
symbols = ['TSLA', 'F']
data = yf.download(symbols, start='2021-01-01', end='2023-12-31')['Close']
# 在此处补充你的代码...
通过本教程,您已经掌握了配对交易的核心原理与实现方法。实际应用中需结合市场环境动态调整参数,并严格进行风险管理。建议从模拟交易开始验证策略有效性,再逐步实盘应用。