Mímisbrunnr知恵の泉

← 金融工学 一覧

🎓 レベル:発展 | 重要度:B(標準)・要最新確認

📎 前提:伊藤の補題短期金利モデル(CIR) | 関連:インプライドボラティリティ

要点(BLUF)

1. なぜボラを確率過程にするか

GBM(ブラウン運動と幾何ブラウン運動)のボラ σ\sigma は定数でした。しかし現実のボラは時間とともに大きく動き、荒れた時期と穏やかな時期が固まって現れます(ボラティリティ・クラスタリング)。さらに、ボラが定数なら生まれないはずのスマイル(インプライドボラティリティ)が市場には存在します。これらを説明するには、ボラ自体にランダムな動きを持たせる必要があります。

2. Hestonモデル

Heston モデルは、株価と分散 v=σ2v=\sigma^2 を、相関する2つのブラウン運動で動かします。

dS=μSdt+vSdW1dS = \mu S\,dt + \sqrt{v}\,S\,dW_1 dv=κ(θv)dt+ξvdW2,corr(dW1,dW2)=ρdv = \kappa(\theta - v)\,dt + \xi\sqrt{v}\,dW_2, \qquad \mathrm{corr}(dW_1, dW_2) = \rho

分散 vv の式は 短期金利モデルCIR と同じ形——長期分散 θ\theta への平均回帰(速度 κ\kappa)、v\sqrt{v} で正を保つ、ボラのボラ ξ\xi。相関 ρ\rho が要で、株式では ρ<0\rho<0レバレッジ効果:株価下落とボラ上昇が連動)が普通で、これが左に偏ったスキューを生みます。Heston はこの設定でも準閉形式のオプション価格(特性関数経由)を持つのが実務での強みです。

3. 裾の厚さ:Heston vs GBM

Heston のリターンが GBM よりどれだけ裾が厚いかを、超過尖度(正規なら0)で測ります。

import numpy as np
import matplotlib.pyplot as plt
import japanize_matplotlib
from scipy import stats

rng = np.random.default_rng(0)
S0, v0, mu = 100.0, 0.04, 0.05
kappa, theta, xi, rho = 2.0, 0.04, 0.3, -0.7   # 回帰速度/長期分散/ボラのボラ/相関
T, N, M = 1.0, 252, 5000
dt = T/N

S = np.full(M, S0); v = np.full(M, v0)
daily = np.zeros((M, N))
for i in range(N):
    z1 = rng.normal(size=M)
    z2 = rho*z1 + np.sqrt(1-rho**2)*rng.normal(size=M)   # 相関ρの2変量正規
    vp = np.maximum(v, 0)                                 # 分散の負を切り詰め
    incr = (mu - 0.5*vp)*dt + np.sqrt(vp*dt)*z1
    daily[:, i] = incr
    S = S*np.exp(incr)
    v = v + kappa*(theta - vp)*dt + xi*np.sqrt(vp*dt)*z2  # 分散はCIR型の過程

heston = daily.flatten()
gbm = rng.normal((mu-0.5*theta)*dt, np.sqrt(theta*dt), heston.size)
print(f"Heston日次リターン 超過尖度 = {stats.kurtosis(heston):.3f}")
print(f"GBM日次リターン    超過尖度 = {stats.kurtosis(gbm):.3f}")
print(f"Heston終端価格 平均 {S.mean():.3f}, S0*e^(μT)={S0*np.exp(mu*T):.3f}")

plt.figure(figsize=(7, 5))
plt.hist(heston, bins=300, density=True, alpha=0.5, label="Heston(確率ボラ)")
plt.hist(gbm, bins=300, density=True, histtype="step", color="green", label="GBM(一定ボラ)")
plt.yscale("log")                 # 対数軸で裾を強調
plt.xlim(-0.06, 0.06)
plt.xlabel("日次リターン"); plt.ylabel("密度(対数軸)")
plt.title("確率ボラは裾が厚い(対数軸で比較)")
plt.legend(); plt.tight_layout(); plt.show()

出力:

Heston日次リターン 超過尖度 = 1.267
GBM日次リターン    超過尖度 = 0.008
Heston終端価格 平均 105.513, S0*e^(μT)=105.127

出力の意味:GBM の日次リターンは超過尖度ほぼ0(定義どおり正規)ですが、Heston は 1.267 と明確に裾が厚い。ボラが時間とともに揺れるため、「ボラが高い日にさらに大きく動く」混合が起き、正規より極端な値が増えるのです。対数軸のヒストグラムでは、Heston(塗りつぶし)の裾が GBM(緑線)より外側まで持ち上がっているのが見えます。終端価格の平均は S0eμT=105.13S_0e^{\mu T}=105.13 とほぼ整合——ボラを確率化しても価格の期待成長は μ\mu のままで、変わったのは分布の形(裾)です。

4. スマイルとの関係

Heston が重要なのは、この裾の厚さと相関 ρ\rho が、ちょうど市場のボラティリティ・スマイル/スキューを生むからです。ρ<0\rho<0 だと下落時にボラが上がり、OTM プット(暴落保険)が割高になる——インプライドボラティリティ で見たスキューそのものです。パラメータ (κ,θ,ξ,ρ,v0)(\kappa,\theta,\xi,\rho,v_0) を市場のスマイルにキャリブレーションすれば、BS では1つしか入れられなかったボラを、行使価格・満期にわたって一貫して説明できます。確率ボラは「スマイルを内生的に生むモデル」なのです(実装の詳細・市場慣行は要最新確認)。

⚠️ よくある誤解

関連ノート