mcpField
V
volatility-modeling

volatility-modeling

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

volatility-modeling について

EWMA、GARCH(1,1)、インプライド・ボラティリティなど、金融市場のボラティリティモデルを解説するスキルです。推定、予測、リスクプレミアムを調べる分析担当者向けに、数式、例、Python スクリプトを含みます。

主な機能

  1. 01EWMA による分散推定
  2. 02GARCH(1,1) の予測と持続性
  3. 03インプライド・ボラティリティの概念
  4. 04ボラティリティ・スマイルと期間構造
  5. 05ボラティリティ・リスクプレミアム分析
  6. 06モデル例を実行する Python スクリプト

活用シーン

  1. 01リターン系列からボラティリティを推定
  2. 02平均回帰するボラティリティを予測
  3. 03インプライドと実現ボラティリティを解釈
  4. 04権利行使価格や満期ごとのオプション変動を分析

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/joellewis/finance_skills --skill volatility-modeling

インストール後、Claude Code で/volatility-modelingを入力して読み込まれたか確認します。

同梱ファイルscripts/volatility_modeling.py

詳細

ボラティリティモデリング

基本概念

EWMA(指数加重移動平均)

最近の観測値により大きな重みを付ける、シンプルなボラティリティモデルです。RiskMetrics は、標準的な減衰係数を用いてこの手法を広く普及させました。

sigma^2_t = lambda * sigma^2_{t-1} + (1 - lambda) * r^2_{t-1}

ここで:

  • lambda = 減衰係数(RiskMetrics の標準値:日次では 0.94、月次では 0.97)
  • r_{t-1} = 期間 t-1 のリターン(通常は平均を差し引きますが、日次リターンでは平均をゼロと仮定することがよくあります)
  • sigma^2_{t-1} = 前期間の分散推定値

特性:

  • 過去の二乗リターンに、指数的に減衰する重みを割り当てます。
  • 実効的なウィンドウは、およそ 1/(1 - lambda) 個の観測値です。lambda = 0.94 の場合、実効的なウィンドウは約 17 日です。
  • 平均回帰はありません。このモデルは alpha + beta = 1 の IGARCH(積分 GARCH)と等価です。ボラティリティショックは無期限に持続します。
  • 実装が簡単で、必要なパラメーターは 1 つだけです。
GARCH(1,1)

一般化自己回帰条件付き異分散モデルは、ボラティリティに平均回帰をもたらす定数項を追加したものです。

sigma^2_t = omega + alpha * r^2_{t-1} + beta * sigma^2_{t-1}

ここで:

  • omega > 0:定数項(長期分散の水準を決定します)
  • alpha >= 0:反応係数(最近のショックに対する感応度)
  • beta >= 0:持続性係数(過去の分散の記憶)

定常性条件: alpha + beta < 1 です。この条件により、過程は共分散定常となり、平均回帰します。

長期(無条件)分散:

V_L = omega / (1 - alpha - beta)

長期年率換算ボラティリティ:sigma_L = sqrt(V_L * 252)。

持続性: alpha + beta の値は、ボラティリティが長期水準にどれほど速く回帰するかを示します。持続性が高いほど、平均回帰は遅くなります。

ボラティリティショックの半減期: ボラティリティショックが半分に減衰するまでの期間数です。

h = -ln(2) / ln(alpha + beta)

alpha + beta < 1 なので、ln(alpha + beta) < 0 となり、h は正になります。

複数ステップ先の予測: h ステップ先の GARCH(1,1) 予測は次のとおりです。

E[sigma^2_{t+h}] = V_L + (alpha + beta)^h * (sigma^2_t - V_L)

h が無限大に近づくにつれ、予測値は V_L に収束します。

インプライドボラティリティ

オプション価格モデル(通常は Black-Scholes)に代入すると、観測された市場価格と等しい理論価格が得られるボラティリティの値です。

Black-Scholes におけるヨーロピアンコールの場合:

C = S * N(d1) - K * exp(-rT) * N(d2)

d1 = [ln(S/K) + (r + sigma^2/2) * T] / (sigma * sqrt(T))
d2 = d1 - sigma * sqrt(T)

インプライドボラティリティは、C_model(sigma) = C_market を満たす sigma です。閉形式解は存在しないため、数値的に求める必要があります(例:ニュートン・ラフソン法、二分法)。

ボラティリティスマイルとスキュー

実際には、インプライドボラティリティは権利行使価格によって異なり、Black-Scholes の一定ボラティリティの仮定に反します。

  • ボラティリティスマイル: 深いイン・ザ・マネーと深いアウト・オブ・ザ・マネーの両方のオプションで IV が高くなり、U 字型を形成します。FX 市場でよく見られます。
  • ボラティリティスキュー(スマーク): 権利行使価格が低いほど IV が高くなります(OTM プットの IV は OTM コールより高くなります)。株式市場で支配的なパターンであり、下落へのヘッジ需要と、左側の裾が厚いという現実を反映しています。
  • スキューは、25 デルタのプットと 25 デルタのコールの IV の差、または権利行使価格のマネーネスが 90%と 110%の場合の IV の差として定量化されることがよくあります。
ボラティリティの期間構造

インプライドボラティリティは、オプションの満期日によって異なります。

  • 順イールド(右肩上がり): 満期の長いオプションほど IV が高くなります。不確実性が時間とともに増加することを反映しています。
  • 逆イールド(右肩下がり): 短期の IV が長期の IV を上回ります。短期的な不確実性が急上昇する市場ストレス時に多く見られます(例:決算、選挙、危機の前後)。
  • ハンプ型: 中間の満期で IV がピークになります。特定の予想イベントの前後で発生することがあります。
ボラティリティサーフェス

権利行使価格(またはデルタ/マネーネス)と満期の両方に対するインプライドボラティリティを表す二次元のサーフェスです。ボラティリティサーフェスは、将来の不確実性に対するオプション市場の見方を最も完全に表現したものです。

実務担当者はサーフェスを補間し、任意の権利行使価格と満期の組み合わせでオプションを評価します。サーフェスの動き(シフト、傾きの変化、湾曲)は、オプションポートフォリオのリスク管理において非常に重要です。

実現ボラティリティとインプライド・ボラティリティ:ボラティリティ・リスク・プレミアム

インプライド・ボラティリティは、その後の実現ボラティリティを平均すると体系的に上回ります。この差が**ボラティリティ・リスク・プレミアム(VRP)**です。

VRP = IV - RV_subsequent

VRPが存在するのは、投資家がオプション(保険)にプレミアムを支払う意思があり、オプションの売り手はテールリスクを負うことへの対価を求めるためです。VRPは通常プラスであり、ボラティリティの売り手にとって継続的なリターン源となっています。

主な考慮事項:

  • VRPは時間とともに変動し、市場ストレスの期間には大きくなります。
  • ボラティリティを売る(VRPを獲得する)ことで安定したプレミアムを得られますが、まれに発生する大きな損失にさらされます。
  • 極端なイベント時には、VRPがマイナスになることがあります。
VIX指数

CBOEボラティリティ指数は、S&P 500オプション価格から算出される、市場が予想する今後30日間のボラティリティを測定します。

  • VIXは年率換算したパーセントポイントで表示されます(例:VIX = 20は、予想年率ボラティリティが約20%であることを意味します)。
  • VIXは、Black-Scholesモデルではなく、幅広い権利行使価格のOTMプットおよびコールオプションから算出されます。
  • VIXの水準:12~15 = 低い/安心感が強い、15~20 = 通常、20~30 = 高い、30以上 = 強いストレス、40以上 = 危機。
  • VIXには強い平均回帰性があり、市場の下落時に急上昇する傾向があります(「恐怖指数」)。

主な公式

公式数式用途
EWMA分散sigma^2_t = lambda * sigma^2_{t-1} + (1-lambda) * r^2_{t-1}シンプルなボラティリティ予測
GARCH(1,1)分散sigma^2_t = omega + alpha * r^2_{t-1} + beta * sigma^2_{t-1}平均回帰するボラティリティ予測
GARCH長期分散V_L = omega / (1 - alpha - beta)無条件分散水準
GARCH半減期h = -ln(2) / ln(alpha + beta)平均回帰の速さ
GARCHのhステップ予測V_L + (alpha+beta)^h * (sigma^2_t - V_L)複数期間のボラティリティ予測
Black-ScholesコールS * N(d1) - K * exp(-rT) * N(d2)オプション価格の算出(IVの抽出)
ボラティリティ・リスク・プレミアムIV - RV_subsequentボラティリティの売り手が得るプレミアム
EWMAの実効期間約 1 / (1 - lambda)暗黙のルックバック期間

計算例

例1:EWMA分散の更新

条件: 前日の分散推定値 sigma^2_{t-1} = 0.0004(日次ボラティリティ = 2%)、前日のリターン r_{t-1} = -3%(つまり、r = -0.03)、lambda = 0.94とします。

求めるもの: 今日のEWMA分散推定値と日次ボラティリティ。

解答:

sigma^2_t = 0.94 * 0.0004 + (1 - 0.94) * (-0.03)^2
          = 0.94 * 0.0004 + 0.06 * 0.0009
          = 0.000376 + 0.000054
          = 0.000430

日次ボラティリティ:

sigma_t = sqrt(0.000430) = 0.02074 = 2.074%

大きなマイナスのリターン(-3%)により、ボラティリティ推定値は2.0%から2.074%に上昇しました。EWMAはこのショックに反応しましたが、lambdaが大きい(0.94)ため、反応は抑えられました。

例2:GARCH(1,1)の長期ボラティリティと半減期

条件: 日次S&P 500リターンから推定したGARCH(1,1)パラメーター:omega = 0.000002、alpha = 0.08、beta = 0.91。

求めるもの: 長期日次分散、年率換算した長期ボラティリティ、ボラティリティショックの半減期。

解答:

定常性の確認: alpha + beta = 0.08 + 0.91 = 0.99 < 1(定常ですが、持続性は非常に高いです)。

長期分散:

V_L = 0.000002 / (1 - 0.99) = 0.000002 / 0.01 = 0.0002

長期日次ボラティリティ:

sigma_L = sqrt(0.0002) = 0.01414 = 1.414%

年率換算:

sigma_annual = 0.01414 * sqrt(252) = 22.45%

半減期:

h = -ln(2) / ln(0.99) = -0.6931 / (-0.01005) = 68.97 ~ 69 trading days

解釈:ボラティリティショックの後、超過ボラティリティが半減するまでに約69取引日(約3か月)かかります。この高い持続性(alpha + beta = 0.99)は、株価指数リターンでは一般的です。

例 3:インプライド・ボラティリティの解釈

前提: 株価は 100 ドルで取引されています。3 か月物の ATM コール(K = $100)は 6.50 ドルで取引されています。リスクフリーレートは 5% です。Black-Scholes を使用すると、数値ソルバーによりインプライド・ボラティリティは 30% と求められます。

計算: これは何を示していますか。また、実現ボラティリティの 22% と比べてどうでしょうか。

解答:

インプライド・ボラティリティの 30% は、オプション価格に織り込まれた、今後 3 か月間の年率換算ボラティリティに関する市場のコンセンサス予測を表します。

実現(過去の)ボラティリティの 22% と比較すると:

VRP = IV - RV = 30% - 22% = 8%

プラス 8 パーセントポイントの差が、ボラティリティ・リスク・プレミアムです。次のように解釈できます。

  • 市場は、ボラティリティが直近の実現水準を上回ると予想しています。
  • オプションの売り手は、テールリスクを引き受ける対価としてプレミアムを求めています。
  • ボラティリティの急上昇を引き起こす可能性のあるイベント(決算発表、規制当局の判断など)が控えている可能性があります。

体系的なボラティリティ売り戦略では、このオプションを売り、実現ボラティリティが 22% 近辺にとどまれば VRP から利益を得ることを期待します。ただし、売り手は実現ボラティリティが 30% を超えるリスクを負います。

よくある落とし穴

  • GARCH の定常性: GARCH(1,1) プロセスが共分散定常となるには、alpha + beta が厳密に 1 未満でなければなりません。alpha + beta >= 1 の場合、長期分散は定義できず、モデルは IGARCH(または発散型)になります。推定後は必ずこの条件を確認してください。
  • EWMA には平均回帰がない: EWMA は IGARCH(alpha + beta = 1)と等価であるため、ボラティリティ・ショックは減衰しません。このため、平均回帰が予想される長期のボラティリティ予測には EWMA は適していません。
  • インプライド・ボラティリティはモデルに依存する: Black-Scholes を使用して算出する IV は、対数正規リターン、一定のボラティリティ、連続取引、ジャンプなしを仮定します。「スマイル」と「スキュー」が存在するのは、まさにこれらの仮定が成り立たないためです。IV は相場表示の慣行であり、真の予測ではありません。
  • 過去のボラティリティと将来予測ボラティリティの混同: 過去の(実現)ボラティリティは、実際に起きたことを測定します。インプライド・ボラティリティは、将来に関する市場の期待を反映します。両者が答える問いは異なり、大きく乖離することがあります。
  • 期間構造を調整せずに、日次 GARCH を長期予測に使用すること: 日次 GARCH の予測は、長い期間では無条件分散に収束します。複数期間の予測式 E[sigma^2_{t+h}] = V_L + (alpha+beta)^h * (sigma^2_t - V_L) を使用し、適切に集計してください。
  • GARCH モデルの過剰適合: 高次の GARCH(p,q) モデルや拡張モデル(EGARCH、TGARCH、GJR-GARCH)は、サンプル内データに過剰適合することがあります。ほとんどの金融リターン系列では、サンプル外で GARCH(1,1) を上回るのは非常に困難です。まず GARCH(1,1) から始め、複雑さを追加する場合はその理由を明確にしてください。
  • EWMA の lambda 選択: lambda の選択は応答性に大きく影響します。lambda = 0.94 はショックに素早く反応し(実効ウィンドウは約 17 日)、lambda = 0.97 はより滑らかです(実効ウィンドウは約 33 日)。選択する値は、用途の期間に合わせてください。

相互参照

  • historical-risk(wealth-management プラグイン):Close-to-close、Parkinson、Yang-Zhang のボラティリティ推定量は、GARCH 予測とインプライド・ボラティリティを比較するための実現ボラティリティのベンチマークとなります。
  • forward-risk(wealth-management プラグイン):EWMA と GARCH によるボラティリティ予測は、パラメトリック VaR およびモンテカルロ VaR 計算への直接的な入力となります。
  • performance-metrics(wealth-management プラグイン):ボラティリティ推定値は、シャープ、ソルティノなど、リスク調整後リターン比率の分母に影響します。将来予測(GARCH)ボラティリティを使用すると、条件付きのパフォーマンス比率を算出できます。

スクリプトの実行方法

uv run scripts/volatility_modeling.py

PEP 723 ヘッダーにより、numpy と scipy の依存関係が自動的に解決されます。代わりに、pip install numpy scipy を実行してから python3 scripts/volatility_modeling.py を実行してください。

  • 引数なしで実行すると、合成した GARCH ダイナミクスのリターンを用いたデモが出力されます。内容は、EWMA ボラティリティ、GARCH(1,1) の推定と複数ステップ先の予測、実現ボラティリティと Parkinson ボラティリティ、期間構造、ボラティリティコーンです。
  • --verify を指定すると、主要な計算を再実行し、出力がこのスキルの計算例と一致することを検証します(一致すれば PASS、不一致なら FAIL を出力し、不一致時は 0 以外の終了コードを返します)。
  • --help を指定すると、利用可能なクラスとメソッドが表示されます。

このファイルは主にモジュールとしてインポートすることを想定しています。例:from volatility_modeling import VolatilityModeling

コメント