mean-reversion
平均回帰戦略ツール。ハースト指数、半減期推定、Zスコアシグナル、ADF検定、オーンシュタイン・ウーレンベック過程モデリングを含み、資産価格の反転パターンを分析して取引シグナルを生成します。
description の原文を見る
Mean-reversion strategy tools including Hurst exponent, half-life estimation, z-score signals, ADF testing, and Ornstein-Uhlenbeck modeling
SKILL.md 本文
平均回帰
平均回帰とは、価格、スプレッド、またはその他の金融変数が平均値から乖離した後、長期的な平均値に戻る傾向を示す統計的性質です。平均回帰する系列は平均値を超過した後、修正により戻ります。これにより予測可能な振動が生じ、トレード可能になります。
平均回帰が機能する場面
- レンジ相場: 明確なサポート/レジスタンスを伴う横ばい値動き
- ペアスプレッド: 共和分関係にある資産間のスプレッドが均衡に回帰する
- 過売却/過買状態: 定常系列における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 がゼロをクロス | エグジット | ポジション決済(平均値に回帰) |
| 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)ベータから: 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つの資産間のスプレッドをトレードします:
- 共和分を確認(
cointegration-analysisスキルを参照) - スプレッドを計算:
S = Y - beta * X - スプレッドにz-スコアフレームワークを適用
- z < -2 のときスプレッドロング(Y買い、X売り)
- z > +2 のときスプレッドショート(Y売り、X買い)
統計的アービトラージ
ペアトレーディングの複数資産拡張:
- 相関資産のPCAからの固有ポートフォリオ
- 最小の固有値ポートフォリオ(最も平均回帰的)をトレード
- より大規模なユニバース(10資産以上)が必要
暗号資産固有の考慮事項
- ほとんどの暗号資産はトレンド的: BTC、ETH、SOLのハースト指数は通常0.55~0.70。生の価格の平均回帰は稀です。
- 平均回帰が見つかる場所:
- ペアスプレッド(SOL/ETH比率、BTC優位性)
- パーペチュアルのファンディングレート
- 現物先物ベーシス
- ステーブコイン価格乖離
- DEX取引手数料層スプレッド
- 短いルックバック: 暗号資産の平均回帰は短いハーフライフ(数時間~数日、数週間ではない)
- 取引コスト: DEX スワップ手数料(0.25~1%)が平均回帰利益を食い潰す可能性があります。スリッページを考慮してください。
- レジーム認識:
regime-detectionスキルを使用してレンジ相場でのみ平均回帰をトレードしてください。
他のスキルとの統合
| スキル | 統合方法 |
|---|---|
cointegration-analysis | ペアトレーディング用の共和分ペアを発見 |
pandas-ta | 平均回帰指標としてRSI、ボリンジャーバンドを使用 |
regime-detection | フィルター: レンジ相場でのみMRをトレード |
vectorbt | 平均回帰ストラテジーのバックテスト |
volatility-modeling | OUモデルのシグマを推定 |
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
このスキルは分析ツールと情報のみを提供します。財務アドバイスまたはトレード推奨ではありません。
ライセンス: MIT(寛容ライセンスのため全文を引用しています) · 原本リポジトリ
詳細情報
- 作者
- agiprolabs
- ライセンス
- MIT
- 最終更新
- 2026/3/11
Source: https://github.com/agiprolabs/claude-trading-skills / ライセンス: MIT