mcpField
M
mean-reversion

mean-reversion

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

关于 mean-reversion

mean-reversion 是用于分析加密资产均值回归特征并设计交易信号的 Skill,面向量化研究人员和策略开发者。它结合平稳性检验、半衰期估算、z-score 信号及配对交易分析,并提供扫描脚本。

主要功能

  1. 01ADF、Hurst 与方差比检验
  2. 02均值回归半衰期估算
  3. 03基于 z-score 的信号框架
  4. 04OU 模型参数估算
  5. 05均值回归配对扫描

适用场景

  1. 01检验价格序列是否具有均值回归特征
  2. 02按半衰期设置观察和持仓期限
  3. 03为单一资产或价差生成交易信号
  4. 04筛选并分析均值回归资产对

安装

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

$npx skills add https://github.com/agiprolabs/claude-trading-skills --skill mean-reversion

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

包含的文件

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

references/
statistical_tests.md
strategy_design.md
scripts/
mean_reversion_test.py
pairs_scanner.py

详细介绍

均值回归

均值回归是指价格、价差或其他金融变量在偏离长期平均值后,倾向于回归该平均值的统计特性。均值回归序列会超出均值,然后回调回来——形成可预测的振荡,可供交易。

均值回归有效的情况

  • 区间震荡市场:价格横盘,且有明确的支撑位和阻力位
  • 配对价差:协整资产之间的价差回归均衡水平
  • 超卖/超买极端情况:平稳序列中的 RSI、布林带或 z 分数极端值
  • 资金费率套利:永续合约资金费率回归基准水平
  • 稳定币脱锚:典型的均值回归机会(锚定价 = 已知均值)
  • 暴跌后的反弹:PumpFun 初始暴跌后的短暂均值回归窗口

均值回归失效的情况

  • 强趋势市场(大多数时候的加密货币市场)
  • 状态变化:原本平稳的序列变成非平稳序列
  • 结构性变化:代币迁移、协议升级、下架
  • 流动性低:宽幅价差会吞噬均值回归收益

检验均值回归

在交易均值回归之前,必须通过统计检验确认序列具有均值回归特性。以下是三种互补的检验:

1. 增广迪基-富勒(ADF)检验

检验序列存在单位根(非平稳)的原假设。

from scipy import stats
import numpy as np

def adf_test(series: np.ndarray, max_lag: int = 0) -> dict:
    """Run ADF test. Reject null (p < 0.05) → stationary → mean-reverting."""
    # See references/statistical_tests.md for full implementation
    # Use statsmodels.tsa.stattools.adfuller for production
    pass
  • p < 0.01:有力证据表明序列平稳
  • p < 0.05:有证据表明序列平稳
  • p > 0.10:无法拒绝单位根假设——序列可能非平稳
2. Hurst 指数

衡量时间序列的长期依赖性。

Hurst 值解释交易含义
H < 0.5均值回归交易均值回归
H = 0.5随机游走无优势
H > 0.5趋势交易动量
def hurst_exponent(series: np.ndarray) -> float:
    """Compute Hurst exponent via R/S method. H < 0.5 → mean-reverting."""
    # See references/statistical_tests.md for full R/S algorithm
    pass
3. 方差比检验

比较多期收益的方差与单期方差。

  • VR < 1:负自相关(均值回归)
  • VR = 1:随机游走
  • VR > 1:正自相关(趋势)
def variance_ratio(series: np.ndarray, q: int = 5) -> float:
    """Compute variance ratio at horizon q. VR < 1 → mean-reverting."""
    returns = np.diff(np.log(series))
    var_1 = np.var(returns)
    returns_q = np.diff(np.log(series[::q]))
    var_q = np.var(returns_q)
    return var_q / (q * var_1)

完整实现和解读指南请参见 references/statistical_tests.md。


半衰期估算

半衰期表示偏差衰减至原来一半所需的期数。这是均值回归交易中最重要的参数。

AR(1) 回归法

拟合自回归模型:delta_X_t = alpha + beta * X_{t-1} + epsilon

def half_life(series: np.ndarray) -> float:
    """Estimate mean-reversion half-life from AR(1) regression.

    Returns:
        Half-life in periods. Negative means non-mean-reverting.
    """
    y = np.diff(series)
    x = series[:-1]
    x = np.column_stack([np.ones(len(x)), x])
    beta = np.linalg.lstsq(x, y, rcond=None)[0][1]
    if beta >= 0:
        return -1.0  # Not mean-reverting
    return -np.log(2) / np.log(1 + beta)
半衰期的用法
参数经验法则
回溯窗口半衰期的 2 倍
持仓时间半衰期的 1 倍
最大持仓时间半衰期的 3 倍(止损)
信号重算半衰期的 0.5 倍

Z 分数信号框架

z 分数可对偏离均值的程度进行标准化,从而提供标准化的入场/出场信号。

z = (price - rolling_mean) / rolling_std
信号规则
条件信号操作
z < -2.0买入做多(价格低于均值)
z > +2.0卖出做空(价格高于均值)
z crosses 0退出平仓(回归均值)
abs(z) > 3.0止损平仓(均值回归失败)
回溯窗口

将滚动窗口设为约 半衰期的 2 倍:

def z_score_signals(
    prices: np.ndarray,
    lookback: int,
    entry_z: float = 2.0,
    exit_z: float = 0.0,
    stop_z: float = 3.0,
) -> np.ndarray:
    """Generate z-score-based mean-reversion signals.

    Returns:
        Array of signals: 1 (long), -1 (short), 0 (flat).
    """
    rolling_mean = pd.Series(prices).rolling(lookback).mean().values
    rolling_std = pd.Series(prices).rolling(lookback).std().values
    z = (prices - rolling_mean) / rolling_std
    # See scripts/mean_reversion_test.py for full signal generation
    ...
根据 Z 分数调整仓位

根据 z 分数的绝对值调整仓位大小,以获得更好的风险调整后收益:

size = base_size * min(abs(z) / entry_threshold, max_scale)

完整的入场/出场框架和仓位配置请参见 references/strategy_design.md。


Ornstein-Uhlenbeck(OU)过程

OU 过程是均值回归的连续时间模型:

dX = theta * (mu - X) * dt + sigma * dW
参数含义估算方法
theta均值回归速度根据 AR(1) beta 计算:theta = -ln(1+beta)/dt
mu长期均值根据 AR(1) 截距计算:mu = -alpha/beta
sigma创新项波动率AR(1) 残差标准差
参数估算
def estimate_ou_params(series: np.ndarray, dt: float = 1.0) -> dict:
    """Estimate OU process parameters from observed series.

    Returns:
        Dict with keys: theta, mu, sigma, half_life.
    """
    y = np.diff(series)
    x = series[:-1]
    x_with_const = np.column_stack([np.ones(len(x)), x])
    params = np.linalg.lstsq(x_with_const, y, rcond=None)[0]
    alpha, beta = params[0], params[1]

    theta = -np.log(1 + beta) / dt
    mu = -alpha / beta if beta != 0 else np.mean(series)
    residuals = y - (alpha + beta * x)
    sigma = np.std(residuals) * np.sqrt(2 * theta / (1 - np.exp(-2 * theta * dt)))

    return {
        "theta": theta,
        "mu": mu,
        "sigma": sigma,
        "half_life": np.log(2) / theta if theta > 0 else -1,
    }

策略类型

单资产均值回归

直接将 z-score 框架应用于代币价格序列。最适用于:

  • 稳定币(USDC/USDT 价差)
  • 处于既定区间内的代币
  • 使用 ADF 检验确认平稳性后
配对交易

交易两个协整资产之间的价差:

  1. 确认协整关系(参见 cointegration-analysis 技能)
  2. 计算价差:S = Y - beta * X
  3. 将 z-score 框架应用于价差
  4. 当 z < -2 时做多价差(买入 Y,卖出 X)
  5. 当 z > +2 时做空价差(卖出 Y,买入 X)
统计套利

配对交易的多资产扩展:

  • 从相关资产的 PCA 中构建特征投资组合
  • 交易最小特征值对应的投资组合(均值回归性最强)
  • 需要更大的资产池(10+ 个资产)

加密货币专属注意事项

  1. 大多数加密货币都呈趋势:BTC、ETH、SOL 的 Hurst 指数通常为 0.55–0.70。原始价格很少出现均值回归。
  2. 均值回归可能出现的地方:
    • 配对价差(SOL/ETH 比率、BTC 市占率)
    • 永续合约的资金费率
    • 现货与期货之间的基差
    • 稳定币脱锚
    • 不同 DEX 之间的手续费等级价差
  3. 较短的回看窗口:加密货币均值回归的半衰期较短(几小时到几天,而非几周)
  4. 交易成本:DEX 兑换手续费(0.25–1%)可能吞噬均值回归利润。应将滑点纳入考量。
  5. 关注市场状态:使用 regime-detection 技能,仅在区间震荡状态下进行均值回归交易。

与其他技能的集成

技能集成方式
cointegration-analysis寻找协整配对,用于配对交易
pandas-ta使用 RSI、布林带作为均值回归指标
regime-detection筛选:仅在区间震荡状态下进行均值回归交易
vectorbt回测均值回归策略
volatility-modeling估算 OU 模型的 sigma
slippage-modeling将执行成本纳入盈亏估算
position-sizing使用 Kelly + z-score 缩放来确定仓位

文件

参考资料
  • references/statistical_tests.md -- ADF、Hurst 指数、方差比和半衰期估算,包含完整实现与解读
  • references/strategy_design.md -- Z-score 框架、仓位规模、配对交易设置、风险管理和回测注意事项
脚本
  • scripts/mean_reversion_test.py -- 全面的均值回归分析:ADF、Hurst、方差比、半衰期、OU 估算、z-score 信号
  • scripts/pairs_scanner.py -- 扫描多个资产以寻找均值回归配对:相关性、协整、价差分析、排序

快速开始

# Run mean-reversion analysis on synthetic data
python scripts/mean_reversion_test.py --demo

# Scan for mean-reverting pairs
python scripts/pairs_scanner.py --demo

# Analyze a specific token (requires BIRDEYE_API_KEY)
BIRDEYE_API_KEY=your_key TOKEN_MINT=So11...1 python scripts/mean_reversion_test.py

此技能仅提供分析工具和信息,不构成财务建议或交易推荐。

评论

支持 Markdown