/ / /
第54讲:案例·期货配对交易 (Example: Pairs Trading on Futures)
🔴
入学要求
💯
能力测试
🛣️
课程安排
🕹️
研究资源

第54讲:案例·期货配对交易 (Example: Pairs Trading on Futures)

💡

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

简介

配对交易是基于数学分析的经典策略,通过寻找具有经济关联的两个证券(如竞争对手或上下游企业),建立数学模型进行交易。本教程将循序渐进地讲解核心概念和实战应用。

基础概念

协整关系

两个时间序列若存在稳定的线性组合,其价差围绕均值波动,则称为协整。数学上表示为:

若存在系数β使 YtβXtYtβXtYtβXtYt−βXtY_t - βX_tYt−βXt 平稳,则X和Y协整。

协整检验

使用statsmodels的coint函数进行检验:

from statsmodels.tsa.stattools import coint
score, pvalue, _ = coint(series1, series2)
# p值<0.05表示协整关系显著

实战演示

生成模拟数据

import numpy as np
import pandas as pd

# 生成X序列
np.random.seed(42)
X_returns = np.random.normal(0, 1, 100)
X = pd.Series(np.cumsum(X_returns)) + 50

# 生成Y序列(加入噪声)
noise = np.random.normal(0, 1, 100)
Y = X + 5 + noise

# 可视化
pd.concat([X, Y], axis=1).plot(title="模拟证券X和Y的价格走势");

检验协整性

score, pvalue, _ = coint(X, Y)
print(f"协整检验p值: {pvalue:.4f}")  # 示例输出 p值: 0.0000

价差分析

spread = Y - X
spread.plot(title="价差走势", style='g')
plt.axhline(spread.mean(), color='r', linestyle='--');

真实数据案例

获取股票数据

import yfinance as yf

symbols = ['AAPL', 'MSFT', 'SPY']
data = yf.download(symbols, start='2018-01-01', end='2023-01-01')['Close']
data.columns = symbols

寻找协整对

def find_cointegrated_pairs(data):
    from itertools import combinations
    pairs = []
    for (s1, s2) in combinations(data.columns, 2):
        _, pvalue, _ = coint(data[s1], data[s2])
        if pvalue < 0.05:
            pairs.append((s1, s2))
    return pairs

valid_pairs = find_cointegrated_pairs(data)
print(f"发现协整对: {valid_pairs}")

交易策略构建

价差计算

# 使用线性回归确定对冲比率
import statsmodels.api as sm

s1 = data['AAPL']
s2 = data['MSFT']

model = sm.OLS(s2, sm.add_constant(s1)).fit()
hedge_ratio = model.params['AAPL']
spread = s2 - hedge_ratio * s1

Z分数标准化

def zscore(series):
    return (series - series.mean()) / series.std()

z_scores = zscore(spread)
z_scores.plot(title="标准化价差");
plt.axhline(1, c='r', ls='--')
plt.axhline(-1, c='g', ls='--');

动态参数调整

滚动窗口统计

# 30日滚动窗口
window = 30
rolling_spread = spread.rolling(window)
z_scores = (spread - rolling_spread.mean()) / rolling_spread.std()

交易信号

信号类型条件操作
做多价差Z < -1.5买入Y,卖空X
做空价差Z > 1.5卖空Y,买入X
平仓Z

风险管理

  1. 多重检验偏差:检验多个组合时需Bonferroni校正
  1. 过拟合风险:避免在单一参数集上过度优化
  1. 市场机制变化:定期进行样本外测试
# 样本外测试示例
new_data = yf.download(['AAPL', 'MSFT'], start='2023-01-01')['Close']
_, pvalue, _ = coint(new_data['AAPL'], new_data['MSFT'])
print(f"样本外协整p值: {pvalue:.4f}")

练习题

  1. 生成两个非协整但相关的序列,验证其协整检验结果
  1. 修改滚动窗口参数,观察对Z分数的影响
  1. 尝试在价差计算中使用价格比率替代线性回归方法

扩展阅读

通过本教程,您已掌握配对交易的基本原理和实现方法。实际应用中需结合市场微观结构、风险管理等因素进行策略优化。