mean-reversion について
mean-reversion は、暗号資産の平均回帰性を分析し、取引シグナルを設計するスキルです。定量リサーチ担当者や戦略開発者向けに、定常性検定、半減期の推定、zスコアシグナル、ペア分析とスキャンスクリプトを提供します。
主な機能
- 01ADF・Hurst・分散比検定
- 02平均回帰の半減期推定
- 03zスコアによるシグナル設計
- 04OUモデルのパラメーター推定
- 05平均回帰ペアのスキャン
活用シーン
- 01価格系列の平均回帰性を検定する
- 02半減期に基づき参照期間と保有期間を設定する
- 03資産やスプレッドのシグナルを生成する
- 04平均回帰するペアを探して分析する
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ agiprolabs/ claude-trading-skills --skill mean-reversionインストール後、Claude Code で/mean-reversionを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
references/statistical_tests.mdstrategy_design.mdscripts/mean_reversion_test.pypairs_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 つの資産間のスプレッドを取引します。
- 共和分を確認します(
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 | フィルター:レンジ相場のレジームでのみ平均回帰を取引します |
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
このスキルは分析ツールと情報のみを提供します。金融アドバイスや取引の推奨を行うものではありません。