/ / /
第44讲:配对交易入门 (Introduction to Pairs Trading)
🔴
入学要求
💯
能力测试
🛣️
课程安排
🕹️
研究资源

第44讲:配对交易入门 (Introduction to Pairs Trading)

💡

查看全集:💎Quantopia量化分析56讲

一、基本概念与原理

1.1 什么是配对交易?

配对交易是一种市场中性的统计套利策略,核心思想是利用两个具有长期均衡关系的资产价格偏离进行交易。当价差扩大时做空高价资产/做多低价资产,价差收窄时平仓获利。这需要两个资产满足协整关系

1.2 协整性 vs 相关性

特性相关性协整性
衡量指标相关系数协整检验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

1.3 协整检验

Engle-Granger两步法:

  1. 对两个序列进行OLS回归:Y = α + βX + ε
  1. 对残差ε进行ADF单位根检验
# 协整检验示例
score, pvalue, _ = coint(X, Y)
print(f"协整检验p值: {pvalue:.4f}")  # 应小于0.05

二、实战步骤详解

2.1 数据准备与处理

使用yfinance获取数据

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()

2.2 价差构建与标准化

回归法构建价差

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标准化

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 交易信号生成

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

2.4 策略回测

# 计算收益
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 动态对冲比率

使用滚动窗口计算时变对冲比率:

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 策略优化方向

  1. 加入交易成本与滑点模型
  1. 多时间框架分析
  1. 风险平价头寸管理
  1. 机器学习优化阈值

四、练习题

  1. 从yfinance获取TSLA和F的2021-2023年数据,检验其协整性
  1. 计算动态Z-score,设定1.25/-1.25为交易阈值
  1. 回测策略并绘制收益曲线
  1. (进阶)加入3σ止损机制
# 练习参考答案框架
symbols = ['TSLA', 'F']
data = yf.download(symbols, start='2021-01-01', end='2023-12-31')['Close']

# 在此处补充你的代码...

五、注意事项

  1. 协整关系可能随时间变化,需定期检验
  1. 注意流动性风险,避免小盘股配对
  1. 考虑市场状态影响(牛市/熊市)
  1. 多品种组合分散风险
  1. 过拟合风险:避免在单一品种过度优化参数

六、扩展阅读

  1. 误差修正模型(ECM)
  1. 三重协整检验(Johansen方法)
  1. 配对交易与Copula函数结合
  1. 高频数据中的微观结构噪声处理

通过本教程,您已经掌握了配对交易的核心原理与实现方法。实际应用中需结合市场环境动态调整参数,并严格进行风险管理。建议从模拟交易开始验证策略有效性,再逐步实盘应用。

附:练习合集