σμ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 AcademyParcours
Ctrl K
AO
+1,2 k apprenants
ConnexionRejoindre ↗
Parcours
AO
+1,2 k apprenants
Connexion
  • English
  • Français
  • Español
  • العربية
  • Português
  • Deutsch
  • 日本語
  • 中文
Parcours Python›Module 4 · Valorisation des produits de taux et d'options›Sujet 4.11·~45 minIntermédiaire

Le vega

Position dans le parcoursModule 4 sur 11 · Sujet 11 sur 16
4.11 Le vega
—Score du lab— / 100XP total—Série—

L'entrée que personne ne peut observer

Dans la formule de Black–Scholes, le spot, le prix d'exercice, le taux et le temps sont connus. La volatilité ne l'est pas : c'est l'anticipation du marché sur les mouvements futurs, et elle change chaque jour. Le prix d'une option dépend donc fortement d'un nombre qu'il faut deviner, et la sensibilité à celui-ci, le véga, dC/dsigma, est souvent le plus grand risque d'un livre d'options. Dans Black–Scholes, il vaut S * pdf(d1) * sqrt(T), identique pour les calls et les puts, et positif : plus de volatilité rend toujours une option plus précieuse.

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%

Où le véga est maximal

Le véga est maximal pour les options à la monnaie, où le résultat est le plus incertain et où un surcroît de volatilité change le plus, et il s'estompe pour les options très dans ou hors de la monnaie (prix d'exercice 80 : 23,8 ; 100 : 37,5 ; 120 : 21,6). Contrairement au gamma, le véga croît avec la durée jusqu'à l'échéance : 19,6 à trois mois, 37,5 à un an, 62,5 à quatre ans, car une vie plus longue laisse plus de temps à la volatilité pour compter. Les options à longue échéance sont donc les plus exposées aux variations de volatilité, alors que les options à courte échéance le sont au gamma.

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

La mesurer, et l'utiliser

La volatilité se cote en points de pourcentage, donc les salles de risque citent le véga par point : vega / 100, la variation de prix quand la volatilité passe de 20 % à 21 %. Un saut de 10 points de volatilité, comme dans une panique de marché, déplace l'option à la monnaie d'environ 0,375 * 10 = 3,75, soit presque 36 % de son prix. Comme pour le delta et le gamma, on peut mesurer le véga de tout modèle en perturbant : valoriser avec sigma + h et sigma - h et prendre la différence centrée. L'estimation linéaire est légèrement fausse pour de grands mouvements, car le prix est aussi courbe en volatilité.

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
Le véga explique la cotation en volatilité impliciteComme la volatilité est la seule entrée non observée et que le prix y est si sensible, les traders font tourner la formule à l'envers : à partir du prix de marché d'une option, ils résolvent la volatilité qui le reproduit. Ce nombre, la volatilité implicite, est la manière dont les options sont cotées et comparées d'un prix d'exercice et d'une date à l'autre, et le véga dit dans quelle mesure une erreur de prix se traduit en erreur de volatilité : les sujets suivants construisent exactement cela.
  • Véga = S * pdf(d1) * sqrt(T) : positif, identique pour calls et puts, maximal à la monnaie et croissant avec la durée.
  • Cotez-le par point de volatilité (vega / 100) ; numériquement, (f(sigma + h) - f(sigma - h)) / (2h) marche pour tout modèle.
  • Variation du prix ~ vega_par_point * points : un saut de volatilité compte autant qu'un mouvement de l'action ; la volatilité implicite est la cotation du marché.

À suivre : thêta et rho, les sensibilités au temps et aux taux d'intérêt.

Lab : ce qui est noté

  • Mesurer la sensibilité à la volatilité avec vega25 pts
  • Exprimer le véga par point de volatilité avec vega_per_point25 pts
  • Perturber la volatilité avec numerical_vega25 pts
  • Prévoir l'effet d'un mouvement de volatilité avec price_change_from_vol25 pts
Explorateur · lab-76-1
▾ lab-76-1
…
bash · dans le navigateur
learner@quantcraft:~/lab-76-1$
Python pas encore chargéPythonLn 1, Col 1Spaces: 4UTF-8

Réinitialiser ce sujet ?

Tout le contenu de lab-76-1 revient aux fichiers de départ et le terminal est vidé. Votre solution actuelle sera perdue : cette action est irréversible.

Sera réinitialisé
  • main.py → code de départ
  • Historique du terminal et sortie des tests
  • Modifications non soumises
Sera conservé
  • Meilleur score du lab
  • Votre XP et votre série
  • Progression du cours et notes

Connectez-vous pour exécuter votre code.

Tous les cours sont gratuits à lire. Créez un compte ou connectez-vous pour exécuter du code, lancer les tests et soumettre ce lab.

  • IDE dans le navigateur avec terminal bash — rien à installer
  • Correction instantanée, XP et votre place dans le parcours
Créer un compteSe connecter
OU
Continuer avec GitHub