volatility-modeling について
volatility-modeling は、暗号資産市場のボラティリティを分析するスキルです。推定、予測、実務への適用を行うトレーダーや定量分析担当者向けに、複数の推定手法、ボラティリティコーン、EWMA・GARCH予測スクリプトを扱います。
主な機能
- 01複数の実現ボラティリティ推定手法
- 02EWMA・GARCHによる予測
- 03ボラティリティコーンの作成と解釈
- 04ボラティリティレジームの分類
- 05サイズ調整とストップ設定の例
活用シーン
- 01実現ボラティリティの推定値を比較する
- 02リスク予算向けにボラティリティを予測する
- 03高・低ボラティリティの局面を特定する
- 04ボラティリティに応じてポジションとストップを調整する
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ agiprolabs/ claude-trading-skills --skill volatility-modelingインストール後、Claude Code で/volatility-modelingを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
references/estimators.mdvolatility_cones.mdscripts/estimate_volatility.pyvol_forecast.py詳細
ボラティリティのモデリング
ボラティリティ、つまり価格変動の大きさは、トレーディングにおいて最も重要な指標だと言っても過言ではありません。ポジションサイズの決定、損切り注文の設定、オプション価格の算出、レジームの検出に影響します。このスキルでは、暗号資産市場におけるボラティリティの推定、予測、実践的な活用方法を解説します。
ボラティリティが重要な理由
| ユースケース | ボラティリティの活用方法 |
|---|---|
| ポジションサイズの決定 | ボラティリティに反比例してポジションサイズを調整し、各取引のリスクを一定の金額に保ちます |
| 損切り注文の設定 | ATR ベースの損切り注文は、高ボラティリティのレジームでは幅を広げ、低ボラティリティのレジームでは幅を狭めます |
| 戦略の選択 | 低ボラティリティでは平均回帰が機能し、高ボラティリティではモメンタムが機能します |
| リスク予算の管理 | ボラティリティ目標型ポートフォリオは、ポートフォリオ全体のリスクを一定に保ちます |
| レジームの検出 | ボラティリティレジームの変化は、市場のダイナミクスが変わったことを示します |
| オプション価格の算出 | インプライド・ボラティリティと実現ボラティリティの差が取引機会を生み出します |
ボラティリティの種類
ヒストリカル(実現)ボラティリティ
過去に観測されたリターンから算出します。最も一般的で、直接測定できる形です。統計的効率性が異なる複数の推定方法があります。
インプライド・ボラティリティ
Black-Scholes などのモデルを用いて、オプション価格から導き出します。流動性の高いオプション市場が少ない暗号資産 DeFi では限られますが、BTC/ETH では Deribit で利用できます。
予測ボラティリティ
EWMA や GARCH などのモデルで将来のボラティリティを予測します。先を見越したポジションサイズの決定やリスク予算の管理に使用します。
推定方法
1. 終値間(対数リターンの標準偏差)
最も単純な推定方法です。対数リターンの標準偏差を算出し、年率換算します。
import numpy as np
log_returns = np.log(closes[1:] / closes[:-1])
vol_daily = np.std(log_returns, ddof=1)
vol_annual = vol_daily * np.sqrt(365) # crypto trades 365 days
- 利点:シンプルで広く理解されています。
- 欠点:終値のみを使用するため、日中の値幅を考慮しません。
2. Parkinson(高値・安値の値幅)
日次の高値・安値の値幅を使用します。終値間の方法より統計的効率性が約 5 倍高くなります。
hl_ratio = np.log(highs / lows)
vol_parkinson = np.sqrt(np.mean(hl_ratio**2) / (4 * np.log(2))) * np.sqrt(365)
- 利点:より効率的で、日中の値動きを捉えます。
- 欠点:離散サンプリングでは下方バイアスが生じ、終値間のジャンプを考慮しません。
3. Garman-Klass(OHLC)
単日 OHLC 推定量の中で最も効率的です。
hl = np.log(highs / lows)
co = np.log(closes / opens)
gk = np.mean(0.5 * hl**2 - (2 * np.log(2) - 1) * co**2)
vol_gk = np.sqrt(gk) * np.sqrt(365)
- 利点:OHLC 推定量の中で最も効率的です。
- 欠点:ドリフトがないことを前提とし、寄り付きギャップの影響を受けやすいです。
4. Yang-Zhang
夜間(終値から始値まで)と寄り付きから終値までの要素を組み合わせます。ギャップを適切に処理します。24 時間 365 日取引される暗号資産では重要性が低いものの、散発的に取引されるトークンには有用です。
5. EWMA(指数加重移動平均)
RiskMetrics の手法で、λ 以外に推定するパラメーターがありません。
lam = 0.94 # RiskMetrics default for daily
ewma_var = np.zeros(len(returns))
ewma_var[0] = returns[0] ** 2
for t in range(1, len(returns)):
ewma_var[t] = lam * ewma_var[t - 1] + (1 - lam) * returns[t - 1] ** 2
vol_ewma = np.sqrt(ewma_var) * np.sqrt(365)
- 日次データでは λ = 0.94(RiskMetrics)。
- 週次データでは λ = 0.97。
- λ が高いほど平滑化され、新しい情報への反応が遅くなります。
6. GARCH(1,1)
自己回帰型ボラティリティモデルの代表的な手法です。ボラティリティ・クラスタリングを捉えます。
σ²_t = ω + α · r²_{t-1} + β · σ²_{t-1}
- ω:長期分散の重み。
- α:最近のショックへの反応(暗号資産では通常 0.05~0.15)。
- β:持続性(暗号資産では通常 0.80~0.90)。
- α + β < 1:定常性の制約。
- 長期分散:ω / (1 − α − β)。
最尤法で推定します。詳細は references/estimators.md を参照してください。
ボラティリティ・コーン
ボラティリティ・コーンは、さまざまなルックバック期間における実現ボラティリティのパーセンタイル分布を示し、現在のボラティリティが過去と比べて高いか低いかを明らかにします。
作成方法
- 1 年以上の日次データを取得します。
- 各ルックバック期間(5、10、20、60、120 日)について、次の操作を行います。
- ローリング実現ボラティリティを算出します。
- パーセンタイルを抽出します:5、25、50、75、95 パーセンタイル。
- パーセンタイルを期間の長さに対してプロットし、「コーン」の形を作ります。
- 各期間の現在の実現ボラティリティを重ねて表示します。
解釈
- 現在のボラティリティ > 75 パーセンタイル:過去と比べて高い状態です。平均回帰が予想されます。
- 現在のボラティリティ < 25 パーセンタイル:過去と比べて圧縮された状態です。拡大が予想されます。
- 長い期間ほどコーンが狭まる:ボラティリティはより長期の時間軸で平均回帰します。
詳しい手法と具体例については、references/volatility_cones.md を参照してください。
暗号資産のボラティリティ特性
暗号資産のボラティリティは、重要な点で従来の資産とは異なります。
| 特性 | 詳細 |
|---|---|
| 水準 | 年率換算で50~150%が一般的です。従来型金融(TradFi)の株式は15~25%です |
| クラスター化 | 強く見られます。ボラティリティの高い日は連続して発生します |
| 曜日パターン | 週末のボラティリティは低くなる傾向がありますが、週末のギャップが大きくなることがあります |
| 出来高との相関 | ボラティリティと出来高には正の相関があります |
| レジーム依存性 | 強気相場のボラティリティと弱気相場のボラティリティは異なり、変動幅も異なります |
| 平均回帰 | ボラティリティは価格よりも安定して平均回帰します |
| テールリスク | 裾が厚く、正規分布の予測を上回る極端な値動きが多く発生します |
ボラティリティによるレジーム分類
| レジーム | 年率換算ボラティリティの範囲 | 特徴 |
|---|---|---|
| 低ボラティリティ | < 40% | レンジ相場で、平均回帰が機能します |
| 通常ボラティリティ | 40~80% | トレンドが発生する可能性があり、バランスの取れた戦略が有効です |
| 高ボラティリティ | 80~120% | 強いトレンド、または急激な反転が見られます |
| 危機的ボラティリティ | > 120% | 清算の連鎖が発生し、ポジションサイズを縮小します |
ボラティリティ予測
EWMA予測
シンプルで効果的です。現在のEWMA分散推定値が、1ステップ先の予測値です。複数ステップ先の予測値は一定で、1ステップ先の予測値と同じです。
GARCH予測
GARCHは、分散予測の期間構造を生成します。
σ²_{t+h} = V_L + (α + β)^h · (σ²_t − V_L)
ここで、V_L = ω / (1 − α − β) は長期分散です。
- 短期予測は現在の状況を反映します。
- 長期予測は長期分散に収束します。
- 収束速度はα + β(持続性)によって決まります。
実装例については、scripts/vol_forecast.py を参照してください。
実践的な活用例
ボラティリティを考慮したポジションサイジング
# Vol-target position sizing
target_vol = 0.02 # 2% daily portfolio vol target
current_vol = 0.05 # 5% daily asset vol (annualized ~95%)
weight = target_vol / current_vol # = 0.40 → 40% allocation
完全な統合については、position-sizing スキルを参照してください。
ATRに基づくストップ注文の設定
atr_14 = talib.ATR(highs, lows, closes, timeperiod=14)
stop_distance = 2.0 * atr_14[-1] # 2x ATR stop
stop_price = entry_price - stop_distance # for longs
ボラティリティレジームに応じた戦略選択
vol_percentile = current_vol_percentile(token, window=30)
if vol_percentile < 25:
strategy = "mean_reversion"
elif vol_percentile > 75:
strategy = "momentum_breakout"
else:
strategy = "balanced"
ファイル
リファレンス
| ファイル | 説明 |
|---|---|
references/estimators.md | すべてのボラティリティ推定手法の詳細な導出と解説 |
references/volatility_cones.md | コーンの構築方法と解釈ガイド |
スクリプト
| ファイル | 説明 |
|---|---|
scripts/estimate_volatility.py | コーン分析を含む、複数の推定手法によるボラティリティ計算 |
scripts/vol_forecast.py | 期間構造を出力するEWMAおよびGARCH予測 |
関連スキル
regime-detection— ボラティリティを主要な入力値として、市場レジームを分類します。position-sizing— ボラティリティに反比例させてポジションサイズを調整します。risk-management— ポートフォリオ全体のボラティリティ目標とリスク予算を管理します。pandas-ta— ATRとボリンジャーバンドは、ボラティリティに基づく指標です。custom-indicators— 暗号資産に特化したボラティリティ指標を構築します。
依存関係
uv pip install pandas numpy scipy
ライブデータを使用する場合はオプションです。
uv pip install httpx