σμ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 AcademyRutas
Ctrl K
AO
+1,2 k estudiantes
Iniciar sesiónUnirse ↗
Rutas
AO
+1,2 k estudiantes
Iniciar sesión
  • English
  • Français
  • Español
  • العربية
  • Português
  • Deutsch
  • 日本語
  • 中文
Ruta de Python›Módulo 4 · Valoración de renta fija y opciones›Tema 4.10·~45 minIntermedio

Gamma

Posición en la rutaMódulo 4 de 11 · Tema 10 de 16
4.10 Gamma
—Puntuación del lab— / 100XP total—Racha—

La delta no es constante

Una cobertura delta solo es exacta un instante. En cuanto se mueve la acción, la delta de la opción cambia y la cobertura es errónea. La gamma es la tasa de cambio de la delta con la acción: gamma = d(delta)/dS, la segunda derivada del precio. Un call o put largo tiene gamma positiva. En Black–Scholes es pdf(d1) / (S * sigma * sqrt(T)), igual para calls y puts, donde pdf es la densidad de la campana. Una gamma grande significa que la cobertura caduca rápido y debe ajustarse a menudo.

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

La gamma crece al acercarse el vencimiento

Para una opción en el dinero, la gamma sube mucho al acercarse el vencimiento: 0,019 con un año por delante, 0,039 con tres meses, 0,141 con una semana. Cerca del vencimiento la opción es casi un cara o cruz entre no valer nada y valer todo el movimiento, así que la delta pasa de 0 a 1 en un rango de precios minúsculo. Por eso los traders vendidos en opciones cerca del vencimiento (gamma corta) duermen mal: la cobertura necesita ajustes constantes y un salto duele. También se puede estimar la gamma de cualquier modelo con la diferencia segunda (f(S + h) - 2 f(S) + f(S - h)) / h², exacta para una parábola.

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

Lo que gana la gamma

Como la delta cambia con la acción, una opción larga gana más de lo que predice la delta sola, se mueva la acción hacia donde se mueva. Una subida de 5 $ lleva la delta de 0,637 a 0,637 + 0,01876 * 5 = 0,731. El beneficio de un movimiento es delta * movimiento + 0,5 * gamma * movimiento²: el segundo término es el beneficio de gamma de una opción larga (una pérdida para una corta). Crece con el cuadrado del movimiento, así que los movimientos grandes, en cualquier sentido, favorecen el lado largo en gamma. Ese beneficio no es gratis: el titular lo paga con la prima de la opción y su desgaste temporal.

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
Estar largo en gamma no es gratisEl beneficio de gamma tiene un precio: el desgaste temporal de la opción (theta). Una opción mantenida mientras la acción no va a ninguna parte pierde valor cada día. Que estar largo en gamma compense depende de si la acción se mueve de verdad tanto como la volatilidad usada para valorar la opción; el equilibrio entre gamma y theta es el compromiso en el corazón de la negociación de opciones.
  • Gamma = pdf(d1) / (S * sigma * sqrt(T)), segunda derivada del precio; igual para calls y puts, máxima cerca del strike y del vencimiento.
  • Gamma numérica (f(S + h) - 2 f(S) + f(S - h)) / h²; delta tras un movimiento delta + gamma * movimiento.
  • Un movimiento da delta * movimiento + 0,5 * gamma * movimiento²: una opción larga gana con grandes movimientos en ambos sentidos, y lo paga con desgaste temporal.

A continuación: la vega, la sensibilidad a la volatilidad, el dato que nadie puede observar directamente.

Lab: qué se califica

  • Medir qué tan rápido cambia la delta con gamma25 pts
  • Medir la curvatura de cualquier precio con numerical_gamma25 pts
  • Actualizar la delta tras un movimiento con delta_after_move25 pts
  • Cuantificar el beneficio de la curvatura con gamma_pnl25 pts
Explorador · lab-75-1
▾ lab-75-1
…
bash · en el navegador
learner@quantcraft:~/lab-75-1$
Python aún no cargadoPythonLn 1, Col 1Spaces: 4UTF-8

¿Restablecer este tema?

Todo lo que hay en lab-75-1 vuelve a los archivos iniciales y se limpia el terminal. Tu solución actual se perderá: no se puede deshacer.

Se restablecerá
  • main.py → código inicial
  • Historial del terminal y salida de pruebas
  • Cambios sin enviar
Se conservará
  • Mejor puntuación del lab
  • Tu XP y tu racha
  • Progreso de la lección y notas

Inicia sesión para ejecutar tu código.

Todas las clases se pueden leer gratis. Crea una cuenta o inicia sesión para ejecutar código, lanzar las pruebas y enviar este lab.

  • IDE en el navegador con terminal bash — sin instalar nada
  • Corrección instantánea, XP y tu lugar en la ruta
Crear una cuentaIniciar sesión
O
Continuar con GitHub