σμ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.10·~45 minIntermédiaire

Le gamma

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

Le delta n'est pas constant

Une couverture en delta n'est exacte qu'un instant. Dès que l'action bouge, le delta de l'option change et la couverture est fausse. Le gamma est le taux de variation du delta avec l'action : gamma = d(delta)/dS, la dérivée seconde du prix. Un call ou un put long a un gamma positif. Dans Black–Scholes, il vaut pdf(d1) / (S * sigma * sqrt(T)), identique pour les calls et les puts, où pdf est la densité de la cloche. Un gamma élevé signifie que la couverture se périme vite et doit être ajustée souvent.

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 gamma(spot, strike, rate, sigma, t):
    return norm_pdf(d1(spot, strike, rate, sigma, t)) / (spot * sigma * math.sqrt(t))

for spot in (80, 90, 100, 110, 120):
    print(spot, round(gamma(spot, 100, 0.05, 0.2, 1), 5))
# 80 0.0186
# 90 0.02182
# 100 0.01876
# 110 0.01289
# 120 0.0075      gamma peaks near the strike and fades far from it

Le gamma augmente à l'approche de l'échéance

Pour une option à la monnaie, le gamma augmente fortement à l'approche de l'échéance : 0,019 à un an, 0,039 à trois mois, 0,141 à une semaine. Près de l'échéance, l'option est presque un pile ou face entre sans valeur et valant tout le mouvement, si bien que le delta passe de 0 à 1 sur un intervalle de prix minuscule. C'est pourquoi les traders vendeurs d'options près de l'échéance (gamma court) dorment mal : la couverture demande des ajustements constants et un saut fait mal. On peut aussi estimer le gamma de tout modèle par la différence seconde (f(S + h) - 2 f(S) + f(S - h)) / h², exacte pour une parabole.

for t in (1, 0.25, 0.02):
    print(t, round(gamma(100, 100, 0.05, 0.2, t), 5))
# 1 0.01876
# 0.25 0.03929
# 0.02 0.14087      a week before expiry the at-the-money gamma is 7 times larger

def numerical_gamma(price_function, spot, bump):
    return (price_function(spot + bump) - 2 * price_function(spot) + price_function(spot - bump)) / bump ** 2

price = lambda s: bs_call(s, 100, 0.05, 0.2, 1)               # bs_call as in the previous topic
print(round(numerical_gamma(price, 100, 0.5), 5))             # 0.01876   the same as the formula

Ce que rapporte le gamma

Comme le delta change avec l'action, une option longue gagne plus que ne le prédit le seul delta, quel que soit le sens du mouvement de l'action. Une hausse de 5 $ fait passer le delta de 0,637 à 0,637 + 0,01876 * 5 = 0,731. Le profit d'un mouvement est delta * mouvement + 0,5 * gamma * mouvement² : le second terme est le profit de gamma d'une option longue (une perte pour une option courte). Il croît avec le carré du mouvement : les grands mouvements, dans un sens ou l'autre, favorisent le côté long gamma. Ce profit n'est pas gratuit : le détenteur le paie par la prime de l'option et par son érosion temporelle.

g = gamma(100, 100, 0.05, 0.2, 1)
delta = call_delta(100, 100, 0.05, 0.2, 1)                     # as in the delta topic
print(round(delta, 4), round(delta + g * 5, 4))                 # 0.6368 0.7306   the delta after a $5 rise
print(round(call_delta(105, 100, 0.05, 0.2, 1), 4))             # 0.7237          the exact delta at 105 (gamma is a first-order guide)

move = 5
true_gain = bs_call(105, 100, 0.05, 0.2, 1) - bs_call(100, 100, 0.05, 0.2, 1)
print(round(true_gain - delta * move, 4), round(0.5 * g * move ** 2, 4))   # 0.2232 0.2345   what delta missed, and what gamma explains
# Dollar gamma: how many dollars of stock the delta hedge changes for a 1% move of the stock at 100
print(round(g * 100 ** 2 / 100, 3))      # 1.876
Être long gamma a un coûtLe profit de gamma a un prix : l'érosion temporelle de l'option (thêta). Une option conservée pendant que l'action fait du surplace perd de la valeur chaque jour. Que d'être long gamma rapporte dépend de ce que l'action bouge réellement autant que la volatilité utilisée pour valoriser l'option ; l'équilibre entre gamma et thêta est l'arbitrage au cœur du trading d'options.
  • Gamma = pdf(d1) / (S * sigma * sqrt(T)), dérivée seconde du prix ; identique pour calls et puts, maximal près du prix d'exercice et de l'échéance.
  • Gamma numérique (f(S + h) - 2 f(S) + f(S - h)) / h² ; delta après un mouvement delta + gamma * mouvement.
  • Un mouvement rapporte delta * mouvement + 0,5 * gamma * mouvement² : une option longue gagne des grands mouvements dans les deux sens, et le paie en érosion temporelle.

À suivre : le véga, la sensibilité à la volatilité, l'entrée que personne ne peut observer directement.

Lab : ce qui est noté

  • Mesurer la vitesse de variation du delta avec gamma25 pts
  • Mesurer la courbure d'un prix quelconque avec numerical_gamma25 pts
  • Mettre à jour le delta après un mouvement avec delta_after_move25 pts
  • Chiffrer le bénéfice de la courbure avec gamma_pnl25 pts
Explorateur · lab-75-1
▾ lab-75-1
…
bash · dans le navigateur
learner@quantcraft:~/lab-75-1$
Python pas encore chargéPythonLn 1, Col 1Spaces: 4UTF-8

Réinitialiser ce sujet ?

Tout le contenu de lab-75-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