qkit5: Stochastic Volatility and Monte Carlo Pricing
Hestonモデル、フーリエ変換プライシング、モンテカルロ法、そしてラフ・ボラティリティ
pt.1〜4では、BSMの定数ボラティリティ仮定の下で価格計算とリスク管理をやってきた。pt.5ではこの仮定を根本から覆す。ボラティリティ自体が確率過程に従うモデルを扱う。
Heston (1993) の確率的ボラティリティモデルは、IVサーフェスのスマイル/スキューを自然に再現して、特性関数の解析解を持つから、フーリエ変換(FFT)で高速にプライシングできる。解析解を持たないエキゾチックオプションにはモンテカルロ・シミュレーション(MC)を使う。最後に、2014年以降の最大のパラダイムシフトであるラフ・ボラティリティへの接続も整理しておく。
1. Hestonモデル:確率的ボラティリティ
Heston (1993) は原資産価格 と瞬間分散 の2因子モデルを提案した。
5つのパラメータがある。 は初期瞬間分散(SPXだと くらい、)。 は平均回帰速度(〜)。 は長期平均分散(〜)。 はvol-of-vol、ボラティリティの変動性(〜)。 は株価-ボラティリティ相関(〜)。
パラメータの直感的理解
平均回帰()について。 は長期平均 に向かって速度 で引き戻される。 が大きいほど回帰が速い。分散の半減期は 。
Vol-of-vol()は、 が大きいほど分散自体の変動が激しくなって、IVサーフェスのスマイルが急峻になる(ファットテール効果)。
相関()は、 がレバレッジ効果を捕捉する。株価下落時にボラティリティが上昇して、IVサーフェスにスキューを生む。
Feller条件として のとき、 はゼロに到達しない(a.s.)。だけど実データのキャリブレーションではしばしば破られる。
リスク中立測度Qのダイナミクス
オプション価格付けには の下でのダイナミクスを使う。ボラティリティのリスクの市場価格に依存するけど、アフィン構造を保つために標準的な仮定を置くと、
、。 と は測度変換で不変。
なぜHestonがIVスマイルを生むか
BSMの仮定( 一定)だとIVはフラット。Hestonではボラティリティ自体が確率的に変動するから、 でリターン分布がファットテールになってスマイル(OTM側のIV上昇)が生まれる。 でレバレッジ効果からスキュー(プット側のIVがコール側より高い)が出る。 はタームストラクチャーの形状を決定する。
2. Hestonの特性関数
Hestonモデルのアフィン構造から、対数株価 の特性関数が閉形式で得られる。
は残存期間、 はフォワード対数株価。
と の解析解は、
補助変数は、
Little Heston Trap
上の標準的な定式化は、 の複素平方根の分岐切断(branch cut)で数値的に不安定になることがある(Albrecher et al., 2006)。回避策として を等価形式に書き換える。
を に置き換えて の符号を反転させたもの。数値的に安定だから、実装では常にこっちを使う。
3. フーリエ変換プライシング
Gil-Pelaez反転
ヨーロピアン・コール価格はHeston (1993) の原論文の方法で計算できる。
はフーリエ反転で計算される行使確率で、
はそれぞれ異なるニューメレール( 測度と 測度)の下での特性関数。
Carr-Madan FFT法
Carr & Madan (1999) は上記を改良して、FFTで一度に全ストライクのコール価格を計算する手法を提案した。
対数ストライク のコール価格 は で に漸近して 可積分じゃない。ダンピング因子 ()を導入して可積分にする。
この修正コール価格のフーリエ変換は、
コール価格はフーリエ逆変換で復元。
FFTの適用条件は 。 のとき (約0.6%刻み)で実用上十分。
計算効率について。Gil-Pelaez法は各ストライクごとに積分が必要()だけど、Carr-Madan FFTは で全ストライクを同時に計算。キャリブレーション(数百回の再計算が必要)では桁違いに速い。
ダンピング因子 はMGFの存在域内でなければならない。実用的には が標準(Carr & Madan, 1999)。小さすぎると被積分関数の振動が激しくて、大きすぎると数値的に不安定。
COS法(Fang & Oosterlee, 2008)はCarr-Madanの代替で、特性関数をフーリエ余弦級数で展開する。ダンピング因子のチューニングが不要で収束が指数的。
4. モンテカルロ・シミュレーション
GBMのオイラー離散化
リスク中立測度 の下で、GBM の離散化は、
対数をとって離散化する(対数オイラー法)。ドリフト補正項 を忘れるとマルチンゲール性が崩れるから注意。
Hestonモデルの離散化
2つの相関するブラウン運動を生成するのにコレスキー分解を使う。
は独立。
オイラー法(最も単純だけどFeller条件が破られると になりうる)は、
はフルトランケーション(Full Truncation)スキームで、 が負になったらゼロにクランプする。Lord, Koekkoek & van Dijk (2010) はこのスキームがバイアスと分散の両面で最も優れていることを示した。
実務標準はAndersen (2008) のQE(Quadratic Exponential)スキーム。 の条件付き分布が非心カイ二乗分布に従うことを利用して、 が小さいときは指数分布近似、大きいときは二次多項式近似。オイラー法よりはるかに正確で、タイムステップ数を大幅に削減できる。
オプション価格は 本のパスの満期ペイオフの平均。
MCの標準誤差は 。95%信頼区間は 。 で通常十分な精度。
5. 分散削減技法
対称変量法(Antithetic Variates)
と の両方のパスを生成して平均を取る。
コール/プットのペイオフだと実効的に分散が約50%削減される。計算コストの追加はほぼゼロ。
制御変量法(Control Variates)
解析解が既知のBSM価格を制御変量として使う。
最適 は 。HestonとBSMの相関が高い場合(特にATM付近)、分散を90%以上削減可能。けっこうすごい。
準モンテカルロ(Quasi-Monte Carlo)
擬似乱数の代わりにソボル列(Sobol sequence)みたいな低食い違い量列を使う。QMCの収束速度は で、標準MCの より高次元でも速い。
だけどQMCは次元 (= タイムステップ数 × 因子数)が大きいと効率が落ちる。主成分分析(PCA)によるブラウニアン・ブリッジで有効次元を削減するのが標準。
重点サンプリング(Importance Sampling)
Deep OTMオプション(ペイオフがゼロになるパスが大部分)で有効。ドリフトを変更してITM領域から集中的にサンプリングして、ラドン・ニコディム微分(尤度比)で補正する。
6. エキゾチックオプション
解析解が存在しないから、MCが事実上の唯一の汎用的手法。
バリアオプションは原資産がバリア価格 に到達すると消滅(knock-out)または発生(knock-in)する。Down-and-Outコール()は、
MCでは離散タイムステップで を観測するけど、連続バリアとの間にバイアスが生じる。Broadie, Glasserman & Kou (1997) の補正で、
は普遍定数。
アジアンオプションは平均価格で決済する。算術平均コールは、
算術平均の分布には閉形式がない(対数正規分布の和は対数正規じゃない)から、MCが標準手法。幾何平均アジアンには閉形式解があるから、制御変量として使える。
ルックバックオプションは期間中の最大値/最小値で決済する。
連続モニタリングならGoldman, Sosin & Gatto (1979) の閉形式解があるけど、離散モニタリングではMCが必要。
バスケットオプションは複数原資産の加重平均。
多次元MCが必要。相関行列のコレスキー分解で相関する乱数を生成する。
7. ラフ・ボラティリティ
Rough Bergomiモデル (Bayer, Friz & Gatheral, 2016)
はWick指数関数、 はハースト指数、 はvol-of-vol、。
なぜ「ラフ」かというと、 のときボラティリティのパスはブラウン運動()よりもラフ(不規則)になる。ヘルダー正則性が で、 はほぼ至るところ微分不可能なパスを意味する。
ATMスキューの短期爆発
ラフモデルの最も劇的な帰結。
だと 。Hestonでは でスキューは定数。この差は短期オプション(1週間以内)で顕著に表れて、実データとの整合性が劇的に改善される。これはけっこう面白い。
ハースト指数の推定
対数ボラティリティの増分の2次モーメントのスケーリングを使う。
両辺の対数をとって に対して回帰すると、傾きが を与える。リアライズド・ボラティリティのプロキシで推定する。
分数ブラウン運動(fBM)のシミュレーションにはCholesky法が と高コスト。Bennedsen, Lunde & Pakkanen (2017) のハイブリッドスキームが実用的で、近い時点はCholesky、遠い時点はリーマン和近似を使う。
8. モデルキャリブレーション
市場で観測されたIV にモデルをフィットする。
重み は通常Vega加重(流動性の高いATM付近を重視)。
キャリブレーション手法をざっくり言うと、Levenberg-Marquardtは計算コスト低いけど局所最適で初期値依存。Differential Evolutionは計算コスト高いけど大域最適で勾配不要、堅牢。NN特性関数近似は訓練は高いけど推論は低くて、1msでサーフェス計算できる(Romer, 2022)。大域最適化(DE)で初期値を見つけてLMで精密化するのが標準。FFTプライシングを使えばキャリブレーション全体が数秒で終わる。
Pythonで書くとこうなる
Heston特性関数(Little Trap版)
import numpy as np
def heston_cf(u, S0, r, tau, V0, kappa, theta, xi, rho):
u = np.asarray(u, dtype=complex)
i = 1j
d = np.sqrt((rho * xi * i * u - kappa)**2 + xi**2 * (i * u + u**2))
g = (kappa - rho * xi * i * u + d) / (kappa - rho * xi * i * u - d)
C = (kappa * theta / xi**2) * (
(kappa - rho * xi * i * u + d) * tau
- 2 * np.log((1 - g * np.exp(d * tau)) / (1 - g))
)
D = ((kappa - rho * xi * i * u + d) / xi**2) * (
(1 - np.exp(d * tau)) / (1 - g * np.exp(d * tau))
)
return np.exp(C + D * V0 + i * u * (np.log(S0) + r * tau))
Carr-Madan FFT
from scipy.fft import fft
def carr_madan_fft(S0, K_target, r, tau, V0, kappa, theta, xi, rho,
N=4096, alpha=1.5, eta=0.25):
lam = 2 * np.pi / (N * eta)
b = N * lam / 2
u = np.arange(N) * eta
k = -b + np.arange(N) * lam
w = eta * (3 + (-1)**np.arange(N)) / 3
w[0] = eta / 3
cf_vals = heston_cf(u - (alpha + 1) * 1j, S0, r, tau, V0,
kappa, theta, xi, rho)
denom = (alpha + 1j * u) * (alpha + 1 + 1j * u)
psi = np.exp(-r * tau) * cf_vals / denom
x = np.exp(1j * b * u) * psi * w
fft_result = np.real(fft(x))
call_prices = np.exp(-alpha * k) / np.pi * fft_result
strikes = np.exp(k)
return np.interp(K_target, strikes, call_prices)
Hestonモンテカルロ(Full Truncation)
def heston_mc(S0, K, r, tau, V0, kappa, theta, xi, rho,
n_paths=100_000, n_steps=252):
dt = tau / n_steps
sqrt_dt = np.sqrt(dt)
S = np.full(n_paths, S0)
V = np.full(n_paths, V0)
for _ in range(n_steps):
Z1 = np.random.standard_normal(n_paths)
Z2 = rho * Z1 + np.sqrt(1 - rho**2) * np.random.standard_normal(n_paths)
V_pos = np.maximum(V, 0)
S = S * np.exp((r - 0.5 * V_pos) * dt + np.sqrt(V_pos) * sqrt_dt * Z1)
V = V + kappa * (theta - V_pos) * dt + xi * np.sqrt(V_pos) * sqrt_dt * Z2
payoff = np.maximum(S - K, 0)
return np.exp(-r * tau) * payoff.mean()
参考文献
- Heston, S. (1993). "A Closed-Form Solution for Options with Stochastic Volatility." Review of Financial Studies, 6, 327-343
- Albrecher, H. et al. (2006). "The Little Heston Trap." Working paper
- Andersen, L. (2008). "Simple and Efficient Simulation of the Heston Stochastic Volatility Model." J. Computational Finance, 11(3), 1-42
- Lord, R., Koekkoek, R. & van Dijk, D. (2010). "A Comparison of Biased Simulation Schemes for Stochastic Volatility Models." Quantitative Finance, 10(2), 177-194
- Carr, P. & Madan, D. (1999). "Option Valuation using the Fast Fourier Transform." J. Computational Finance, 2(4), 61-73
- Fang, F. & Oosterlee, C.W. (2008). "A Novel Pricing Method for European Options Based on Fourier-Cosine Series Expansions." SIAM J. Scientific Computing, 31(2), 826-848
- Lee, R. (2004). "Option Pricing by Transform Methods." Encyclopedia of Quantitative Finance
- Glasserman, P. (2003). Monte Carlo Methods in Financial Engineering. Springer
- Broadie, M., Glasserman, P. & Kou, S. (1997). "A Continuity Correction for Discrete Barrier Options." Mathematical Finance, 7(4), 325-349
- Goldman, M.B., Sosin, H. & Gatto, M.A. (1979). "Path Dependent Options: Buy at the Low, Sell at the High." J. Finance, 34(5), 1111-1127
- Kemna, A. & Vorst, A. (1990). "A Pricing Method for Options Based on Average Asset Values." J. Banking & Finance, 14(1), 113-129
- Gatheral, J., Jaisson, T. & Rosenbaum, M. (2018). "Volatility is Rough." Quantitative Finance, 18(6), 933-949
- Bayer, C., Friz, P. & Gatheral, J. (2016). "Pricing under rough volatility." Quantitative Finance, 16(6), 887-904
- Bennedsen, M., Lunde, A. & Pakkanen, M. (2017). "Hybrid scheme for Brownian semistationary processes." Finance & Stochastics, 21(4), 931-965
- Romer, S.E. (2022). "Empirical analysis of rough and classical stochastic volatility models." Quantitative Finance
- Bayer, Friz, Fukasawa, Gatheral, Jacquier & Rosenbaum (2023). Rough Volatility. SIAM