σμimplied vol · KKmax(S−K,0)udβρᵢⱼfat tailsPnL · drawdownyield · TdSₜ = μSₜ dt + σSₜ dWₜC = S·N(d₁) − K·e⁻ʳᵀ·N(d₂)σₚ² = wᵀΣwd₁ = [ln(S/K) + (r + σ²⁄2)T] ⁄ σ√T∂V/∂t + ½σ²S²·∂²V/∂S² + rS·∂V/∂S − rV = 0Sharpe = (Rₚ − R_f) ⁄ σₚVaR₉₉ = μ − 2.33σρ = Cov(X,Y) ⁄ σₓσᵧE[Rₚ] = Σ wᵢ·E[Rᵢ]φ(x) = e^(−x²/2) ⁄ √2πE[Rᵢ] = R_f + βᵢ(E[Rₘ] − R_f)dXₜ = θ(μ − Xₜ)dt + σ dWₜσ²ₜ = ω + α·ε²ₜ₋₁ + β·σ²ₜ₋₁C − P = S − K·e⁻ʳᵀΔ = ∂V/∂S Γ = ∂²V/∂S²p = (e^(rΔt) − d) ⁄ (u − d)rₜ = ln(Pₜ ⁄ Pₜ₋₁)E[Xₜ₊₁ | ℱₜ] = Xₜf* = (bp − q) ⁄ bz = (x − μ) ⁄ σP(N=k) = λᵏe^(−λ) ⁄ k!Θ = −∂V/∂Tν = S·φ(d₁)·√Tmin wᵀΣw s.t. wᵀμ = μ*∫Σ∂∞λ
σμimplied vol · KKmax(S−K,0)udβρᵢⱼfat tailsPnL · drawdownyield · TdSₜ = μSₜ dt + σSₜ dWₜC = S·N(d₁) − K·e⁻ʳᵀ·N(d₂)σₚ² = wᵀΣwd₁ = [ln(S/K) + (r + σ²⁄2)T] ⁄ σ√T∂V/∂t + ½σ²S²·∂²V/∂S² + rS·∂V/∂S − rV = 0Sharpe = (Rₚ − R_f) ⁄ σₚVaR₉₉ = μ − 2.33σρ = Cov(X,Y) ⁄ σₓσᵧE[Rₚ] = Σ wᵢ·E[Rᵢ]φ(x) = e^(−x²/2) ⁄ √2πE[Rᵢ] = R_f + βᵢ(E[Rₘ] − R_f)dXₜ = θ(μ − Xₜ)dt + σ dWₜσ²ₜ = ω + α·ε²ₜ₋₁ + β·σ²ₜ₋₁C − P = S − K·e⁻ʳᵀΔ = ∂V/∂S Γ = ∂²V/∂S²p = (e^(rΔt) − d) ⁄ (u − d)rₜ = ln(Pₜ ⁄ Pₜ₋₁)E[Xₜ₊₁ | ℱₜ] = Xₜf* = (bp − q) ⁄ bz = (x − μ) ⁄ σP(N=k) = λᵏe^(−λ) ⁄ k!Θ = −∂V/∂Tν = S·φ(d₁)·√Tmin wᵀΣw s.t. wᵀμ = μ*∫Σ∂∞λ
uantCraft Academyロードマップ
Ctrl K
AO
+1.2k 人の学習者
ログイン参加する ↗
ロードマップ
AO
+1.2k 人の学習者
ログイン
  • English
  • Français
  • Español
  • العربية
  • Português
  • Deutsch
  • 日本語
  • 中文
Python ロードマップ›モジュール 4 · 債券とオプションの価格計算›トピック 4.11·~45 分中級

ベガ

ロードマップ上の位置モジュール 4/11 · トピック 11/16
4.11 ベガ
—ラボスコア— / 100合計XP—連続日数—

誰にも観測できない入力

ブラック=ショールズの式で、現物価格、行使価格、金利、期間は分かっています。ボラティリティは分からず、将来の値動きについての市場の期待で、毎日変わります。そのためオプション価格は、推測するしかない数に大きく依存し、それへの感応度であるベガ dC/dsigma は、オプションブックで最大のリスクになることが多いものです。ブラック=ショールズでは S * pdf(d1) * sqrt(T) で、コールとプットで同じ値、かつ正です。ボラティリティが上がるとオプションの価値は常に上がります。

import math

def norm_pdf(x):
    return math.exp(-0.5 * x * x) / math.sqrt(2 * math.pi)

def d1(spot, strike, rate, sigma, t):
    return (math.log(spot / strike) + (rate + 0.5 * sigma ** 2) * t) / (sigma * math.sqrt(t))

def vega(spot, strike, rate, sigma, t):
    return spot * norm_pdf(d1(spot, strike, rate, sigma, t)) * math.sqrt(t)

print(round(vega(100, 100, 0.05, 0.2, 1), 4))             # 37.524   per change of 1.00 in sigma (100 volatility points)
print(round(vega(100, 100, 0.05, 0.2, 1) / 100, 4))       # 0.3752   per volatility point: sigma from 20% to 21%

ベガが最大になる場所

ベガはアット・ザ・マネーのオプションで最大になります。結果が最も不確実で、追加のボラティリティの影響が最も大きいからで、深いイン・ザ・マネーやアウト・オブ・ザ・マネーでは小さくなります(行使価格80:23.8、100:37.5、120:21.6)。ガンマと違い、ベガは満期までの期間とともに大きくなります。3か月で19.6、1年で37.5、4年で62.5です。期間が長いほどボラティリティが効く時間が増えるからです。したがって長期のオプションはボラティリティの変化に最も敏感で、短期のオプションはガンマに最も敏感です。

for strike in (80, 100, 120):
    print("strike", strike, round(vega(100, strike, 0.05, 0.2, 1), 3))
# strike 80 23.806
# strike 100 37.524
# strike 120 21.601
for t in (0.25, 1, 4):
    print("t", t, round(vega(100, 100, 0.05, 0.2, t), 3))
# t 0.25 19.644
# t 1 37.524
# t 4 62.451       vega grows with time to expiry

測定と活用

ボラティリティはパーセントポイントで表示されるので、リスク部門はポイントあたりのベガ(vega / 100、ボラティリティが20%から21%になったときの価格変化)で示します。市場の動揺のようにボラティリティが10ポイント跳ね上がると、アット・ザ・マネーのオプションは約 0.375 * 10 = 3.75、価格の36%近く動きます。デルタやガンマと同様に、どんなモデルのベガも、sigma + h と sigma - h で評価して中心差分を取ることで測れます。大きな動きでは、価格はボラティリティに対しても曲がっているため、線形の推定は少しずれます。

def bs_call(spot, strike, rate, sigma, t):
    d_1 = d1(spot, strike, rate, sigma, t)
    return spot * 0.5 * (1 + math.erf(d_1 / math.sqrt(2))) - strike * math.exp(-rate * t) * 0.5 * (1 + math.erf((d_1 - sigma * math.sqrt(t)) / math.sqrt(2)))

def numerical_vega(price_function, sigma, bump):
    return (price_function(sigma + bump) - price_function(sigma - bump)) / (2 * bump)

price = lambda s: bs_call(100, 100, 0.05, s, 1)
print(round(numerical_vega(price, 0.2, 1e-4), 4))                # 37.524   the same as the formula

per_point = vega(100, 100, 0.05, 0.2, 1) / 100
print(round(per_point * 10, 3), round(price(0.30) - price(0.20), 3))    # 3.752 3.781   linear estimate vs exact, for +10 points
# Vega of a put equals vega of a call: build the put price from parity and bump the volatility
put_price = lambda s: bs_call(100, 100, 0.05, s, 1) - 100 + 100 * math.exp(-0.05)
print(round(numerical_vega(put_price, 0.2, 1e-4), 4))       # 37.524   the same number as for the call
ベガがインプライド・ボラティリティで提示する理由ボラティリティは唯一観測できない入力で、価格がそれに非常に敏感なため、トレーダーは式を逆に使います。オプションの市場価格から、それを再現するボラティリティを解くのです。この数、インプライド・ボラティリティが、行使価格や日付をまたいでオプションを提示・比較する方法であり、ベガは価格の誤差がボラティリティの誤差にどれだけ変換されるかを示します。次のトピックでまさにこれを作ります。
  • ベガ = S * pdf(d1) * sqrt(T)。正で、コールとプットで同じ、アット・ザ・マネーで最大、期間とともに増える
  • ボラティリティ1ポイントあたり(vega / 100)で示す。数値的には (f(sigma + h) - f(sigma - h)) / (2h) がどのモデルにも使える
  • 価格変化 ≈ ポイントあたりベガ * ポイント数。ボラティリティの跳ね上がりは株の値動きと同じくらい重要で、インプライド・ボラティリティが市場の提示

次はシータとローです。時間と金利への感応度を学びます。

ラボ:採点される内容

  • vega でボラティリティへの感応度を測る25点
  • vega_per_point でボラティリティ1ポイントあたりのベガを示す25点
  • numerical_vega でボラティリティを少し動かして測る25点
  • price_change_from_vol でボラティリティ変動の影響を予測する25点
エクスプローラー · lab-76-1
▾ lab-76-1
…
bash · ブラウザ内
learner@quantcraft:~/lab-76-1$
Pythonは未読み込みPythonLn 1, Col 1Spaces: 4UTF-8

このトピックをリセットしますか?

lab-76-1 の内容はすべてスターターファイルに戻り、ターミナルも消去されます。現在の解答は失われ、元に戻せません。

リセットされるもの
  • main.py → スターターコード
  • ターミナル履歴とテスト出力
  • 未提出の変更
保持されるもの
  • ラボの最高スコア
  • XPと連続日数
  • 講義の進捗とメモ

コードを実行するにはログインしてください。

レクチャーはすべて無料で読めます。コードの実行、テスト、ラボの提出にはアカウントの作成かログインが必要です。

  • ブラウザ内IDEとbashターミナル。インストール不要
  • 即時採点、XP、ロードマップでの現在地
アカウントを作成ログイン
または
GitHubで続ける