关于 cointegration-analysis
面向量化分析与配对交易的协整分析技能,用于识别资产价格之间的长期均衡关系。它涵盖多种检验、对冲比率与价差分析,以及滚动稳定性监测和回测脚本。
主要功能
- 01Engle-Granger、Johansen 与 Phillips-Ouliaris 检验
- 02估算对冲比率并构造价差
- 03ADF、Hurst 指数与半衰期分析
- 04滚动协整与关系稳定性监测
- 05配对交易步进式回测脚本
适用场景
- 01筛选均值回归配对交易机会
- 02为配对交易估算对冲比率
- 03监测协整关系是否发生结构变化
- 04用步进式验证回测配对策略
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ agiprolabs/ claude-trading-skills --skill cointegration-analysis安装后在 Claude Code 中输入/cointegration-analysis确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
references/methodology.mdpairs_trading.mdscripts/pairs_backtest.pytest_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.05 | 0.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 代币:很少存在协整关系,风险较高
常见陷阱
-
伪协整 — 两个呈趋势变化的序列(在牛市中都上涨)可能看起来存在协整关系。务必使用足够的数据(>200 个观测值)进行测试,并检查样本外稳定性。
-
结构性突变 — 基本面变化(协议升级、代币经济学变化)可能永久破坏协整关系。请监控滚动 p 值。
-
前视偏差 — 使用完整样本估算对冲比率,再用同一样本进行回测,会夸大结果。务必使用滚动前推估算。
-
样本过短 — 协整检验至少需要 >100 个观测值,理想情况下需要 >200 个,才能获得合理的检验效力。
-
忽略交易成本 — 一轮配对交易涉及 4 笔交易。每笔交易成本为 0.3% 时,总成本为 1.2%,价差必须足以覆盖这部分成本。
-
非对称协整 — 这种关系可能只在一个方向或一种市场状态下成立。用于生产环境时,可考虑阈值协整模型。
与其他技能集成
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— 使用合成数据进行滚动前推配对交易回测,并报告绩效