mcpField
C
cointegration-analysis

cointegration-analysis

github.com/agiprolabs数据与数据库456461 次安装8 周前更新
代码仓库

关于 cointegration-analysis

面向量化分析与配对交易的协整分析技能,用于识别资产价格之间的长期均衡关系。它涵盖多种检验、对冲比率与价差分析,以及滚动稳定性监测和回测脚本。

主要功能

  1. 01Engle-Granger、Johansen 与 Phillips-Ouliaris 检验
  2. 02估算对冲比率并构造价差
  3. 03ADF、Hurst 指数与半衰期分析
  4. 04滚动协整与关系稳定性监测
  5. 05配对交易步进式回测脚本

适用场景

  1. 01筛选均值回归配对交易机会
  2. 02为配对交易估算对冲比率
  3. 03监测协整关系是否发生结构变化
  4. 04用步进式验证回测配对策略

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/agiprolabs/claude-trading-skills --skill cointegration-analysis

安装后在 Claude Code 中输入/cointegration-analysis确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

references/
methodology.md
pairs_trading.md
scripts/
pairs_backtest.py
test_cointegration.py

详细介绍

协整分析

协整检验可识别具有长期均衡关系的资产对,从而支持统计套利和配对交易策略。

什么是协整?

当两个价格序列各自都是非平稳的(随机游走),但它们的线性组合是平稳的(均值回归)时,我们称这两个价格序列协整。直观来说,价格可能会暂时偏离,但随着时间推移,会回归到均衡价差。

协整与相关性的区别
属性相关性协整
衡量内容短期联动长期均衡
平稳性要求收益率平稳适用于非平稳价格
时间跨度可能快速变化数月或数年内保持稳定
交易用途动量/趋势信号均值回归配对交易
失效模式在状态变化时失效在结构性变化时失效

两个资产可能高度相关但并不协整(例如,两个无关的上升趋势)。反过来,协整资产在暂时背离期间的短期相关性可能较低——这恰恰是进行配对交易的时机。

为什么协整很重要
  • 配对交易:做多表现较差的资产,做空表现较好的资产,在价格收敛时获利
  • 统计套利:根据价差 z 分数进行系统性均值回归交易
  • 价差交易:直接将价差作为合成工具进行交易
  • 风险对冲:协整对冲比率可随时间推移将跟踪误差降至最低

方法

1. Engle-Granger 两步法

针对两个序列最常用的方法。

步骤 1 — 使用 OLS 对 Y 关于 X 进行回归:

Y_t = α + β * X_t + ε_t

步骤 2 — 使用 ADF 检验残差 ε_t 的平稳性。

  • 如果残差平稳(p < 0.05)→ Y 和 X 协整
  • β 是配对交易的对冲比率
  • α 是价差的长期均值

重要提示:Engle-Granger 临界值与标准 ADF 临界值不同。对于 n=2 个序列:1% = -3.90,5% = -3.34,10% = -3.04。

非对称性警告:检验 YX 和检验 XY 可能会得出不同结果。务必检验两个方向,并采用更有力的结果。

from scipy import stats
import numpy as np
from statsmodels.tsa.stattools import adfuller

# Step 1: OLS regression
slope, intercept, _, _, _ = stats.linregress(x_prices, y_prices)
hedge_ratio = slope

# Step 2: Test residuals
residuals = y_prices - hedge_ratio * x_prices - intercept
adf_stat, p_value, _, _, crit_values, _ = adfuller(residuals, maxlag=None, autolag="AIC")

cointegrated = p_value < 0.05
2. Johansen 检验

同时检验多个序列,并返回协整关系的数量。对于 >2 个序列,它比 Engle-Granger 更有力。

  • 基于 VAR 模型:ΔY_t = Π·Y_{t-1} + Σ Γ_i·ΔY_{t-i} + ε_t
  • 检验 Π 矩阵的秩
  • 使用迹检验和最大特征值检验
  • 返回:协整向量的数量及向量本身
from statsmodels.tsa.vector_ar.vecm import coint_johansen

# data: T×N array of price series
result = coint_johansen(data, det_order=0, k_ar_diff=1)

# Trace statistic vs critical values (90%, 95%, 99%)
trace_stats = result.lr1          # Trace statistics
trace_crit = result.cvt           # Critical values
max_eigen_stats = result.lr2      # Max eigenvalue statistics
max_eigen_crit = result.cvm       # Critical values

# Cointegrating vectors
coint_vectors = result.evec
3. Phillips-Ouliaris

与 Engle-Granger 类似,但使用 Phillips-Perron 风格的检验统计量,而非 ADF。对残差中的异方差和序列相关更稳健。可通过 statsmodels.tsa.stattools.coint 使用。

from statsmodels.tsa.stattools import coint

# Returns: test statistic, p-value, critical values
t_stat, p_value, crit_values = coint(y_prices, x_prices)
cointegrated = p_value < 0.05

实践工作流

步骤 1:按相关性筛选资产对

先用 Pearson 相关系数 > 0.7 进行预筛选,以减少协整检验的数量(协整检验的计算成本更高)。

步骤 2:检验协整关系

分别对两个方向运行 Engle-Granger 检验。使用 p < 0.05 作为阈值。

步骤 3:估算对冲比率

为简单起见,使用 OLS。用于生产环境时,可考虑总最小二乘法或动态 OLS(参见 references/methodology.md)。

步骤 4:计算价差
spread = y_prices - hedge_ratio * x_prices - intercept
z_score = (spread - spread.mean()) / spread.std()
步骤 5:检验价差是否均值回归
  • ADF 检验:p < 0.05 表示平稳
  • Hurst 指数:H < 0.5 表示均值回归(H ≈ 0.5 = 随机游走)
  • 半衰期:根据价差的 AR(1) 模型计算 λ;半衰期 = -ln(2)/ln(λ)
    • 可行的资产对:半衰期在 5 至 60 天之间
步骤 6:交易价差

如果价差具有均值回归特性,则可作为可行的配对交易候选。有关入场/出场规则和风险管理,请参阅 references/pairs_trading.md。

滚动协整

由于结构性变化、市场状态转变或市场动态演变,协整关系可能会随时间失效。

滚动窗口方法

在滚动的 60–90 天窗口上检验协整关系:

window = 60
rolling_pvalues = []
rolling_hedges = []

for i in range(window, len(prices)):
    y_win = y_prices[i - window:i]
    x_win = x_prices[i - window:i]
    _, p_val, _ = coint(y_win, x_win)
    slope, intercept, _, _, _ = stats.linregress(x_win, y_win)
    rolling_pvalues.append(p_val)
    rolling_hedges.append(slope)
监控信号
信号健康警告停止交易
滚动 p 值< 0.050.05–0.10> 0.10
对冲比率漂移变化 < 10%变化 10–25%变化 > 25%
价差半衰期5–60 天60–120 天> 120 天或 < 5 天

加密货币交易对候选项

Layer-1 相关性
  • SOL 与 ETH — Layer-1 板块贝塔,在趋势市场中通常存在协整关系
  • SOL 与 AVAX — 替代 Layer-1 相关性
稳定币
  • USDC 与 USDT — 理应完全协整(锚定套利)
  • 可用于检查协整流程是否正常
流动性质押衍生品
  • mSOL 与 jitoSOL — 两者都追踪 SOL 质押收益率
  • stSOL 与 mSOL — Lido 与 Marinade 质押
同板块代币
  • DEX 代币:RAY 与 ORCA
  • 借贷代币:跨协议对比
  • Meme 代币:很少存在协整关系,风险较高

常见陷阱

  1. 伪协整 — 两个呈趋势变化的序列(在牛市中都上涨)可能看起来存在协整关系。务必使用足够的数据(>200 个观测值)进行测试,并检查样本外稳定性。

  2. 结构性突变 — 基本面变化(协议升级、代币经济学变化)可能永久破坏协整关系。请监控滚动 p 值。

  3. 前视偏差 — 使用完整样本估算对冲比率,再用同一样本进行回测,会夸大结果。务必使用滚动前推估算。

  4. 样本过短 — 协整检验至少需要 >100 个观测值,理想情况下需要 >200 个,才能获得合理的检验效力。

  5. 忽略交易成本 — 一轮配对交易涉及 4 笔交易。每笔交易成本为 0.3% 时,总成本为 1.2%,价差必须足以覆盖这部分成本。

  6. 非对称协整 — 这种关系可能只在一个方向或一种市场状态下成立。用于生产环境时,可考虑阈值协整模型。

与其他技能集成

  • correlation-analysis — 在协整检验前按相关性预筛选交易对
  • mean-reversion — 使用均值回归入场/离场规则交易协整价差
  • vectorbt — 使用滚动前推验证回测配对策略
  • regime-detection — 识别协整状态何时发生转变
  • volatility-modeling — 预测价差波动率,以动态调整仓位规模

文件

参考资料
  • references/methodology.md — Engle-Granger 详解、Johansen 推导、对冲比率估算方法、价差构建
  • references/pairs_trading.md — 入场/离场规则、风险管理、绩效指标、加密货币特定注意事项
脚本
  • scripts/test_cointegration.py — 完整的协整检验流程,包含 ADF、Hurst、半衰期、滚动稳定性和演示模式
  • scripts/pairs_backtest.py — 使用合成数据进行滚动前推配对交易回测,并报告绩效

评论

支持 Markdown