mcpField
M
mean-reversion

mean-reversion

github.com/agiprolabsデータ・データベース456498 回インストール8 週間前に更新
リポジトリ

mean-reversion について

mean-reversion は、暗号資産の平均回帰性を分析し、取引シグナルを設計するスキルです。定量リサーチ担当者や戦略開発者向けに、定常性検定、半減期の推定、zスコアシグナル、ペア分析とスキャンスクリプトを提供します。

主な機能

  1. 01ADF・Hurst・分散比検定
  2. 02平均回帰の半減期推定
  3. 03zスコアによるシグナル設計
  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急落後に生じる短い平均回帰の機会

平均回帰が失敗する場面

  • 強いトレンド相場(暗号資産市場では、ほとんどの期間でよく見られます)
  • レジーム変化:定常だった時系列が非定常になる
  • 構造変化:トークン移行、プロトコルのアップグレード、上場廃止
  • 流動性の低さ:広いスプレッドによって平均回帰の利益が失われる

平均回帰の検定

平均回帰を取引する前に、時系列が平均回帰することを統計的に確認する必要があります。相互に補完する3つの検定があります。

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. ハースト指数

時系列の長期依存性を測定します。

ハースト値解釈取引上の意味
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を参照してください。


オルンシュタイン・ウーレンベック(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 スコアのフレームワークをトークンの価格系列に直接適用します。次の場合に最も効果を発揮します。

  • ステーブルコイン(USDC/USDT のスプレッド)
  • 確立されたレンジ内で推移するトークン
  • ADF 検定で定常性を確認した後
ペアトレード

共和分する 2 つの資産間のスプレッドを取引します。

  1. 共和分を確認します(cointegration-analysis スキルを参照)
  2. スプレッドを計算します:S = Y - beta * X
  3. スプレッドに z スコアのフレームワークを適用します
  4. z < -2 のとき、スプレッドをロングします(Y を買い、X を売ります)
  5. z > +2 のとき、スプレッドをショートします(Y を売り、X を買います)
統計的アービトラージ

ペアトレードを複数資産に拡張したものです。

  • 相関する資産の PCA から固有ポートフォリオを作成します
  • 最小固有値ポートフォリオ(最も平均回帰性が高いもの)を取引します
  • より大きな資産ユニバース(10 以上の資産)が必要です

暗号資産固有の考慮事項

  1. 暗号資産のトレンドの大半:BTC、ETH、SOL のハースト指数は通常 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-modelingOU モデル用のシグマを推定します
slippage-modeling執行コストを P&L の推定に反映します
position-sizingケリー基準と z スコアによるスケーリングを使ってポジションサイズを決定します

ファイル

リファレンス
  • references/statistical_tests.md -- ADF、ハースト指数、分散比、半減期の推定について、完全な実装と解釈を記載
  • references/strategy_design.md -- z スコアのフレームワーク、ポジションサイズ、ペアトレードの設定、リスク管理、バックテスト時の考慮事項を記載
スクリプト
  • scripts/mean_reversion_test.py -- 包括的な平均回帰分析:ADF、ハースト指数、分散比、半減期、OU 推定、z スコアシグナル
  • 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

このスキルは分析ツールと情報のみを提供します。金融アドバイスや取引の推奨を行うものではありません。

コメント