σμ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.11·~45 minIntermedio

Vega

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

El dato que nadie puede observar

En la fórmula de Black–Scholes el precio al contado, el strike, el tipo y el tiempo se conocen. La volatilidad no: es la expectativa del mercado sobre el movimiento futuro, y cambia cada día. El precio de una opción depende, pues, mucho de un número que hay que adivinar, y la sensibilidad a él, la vega, dC/dsigma, suele ser el mayor riesgo de un libro de opciones. En Black–Scholes es S * pdf(d1) * sqrt(T), igual para calls y puts, y positiva: más volatilidad siempre hace más valiosa una opción.

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%

Dónde es mayor la vega

La vega es máxima para opciones en el dinero, donde el resultado es más incierto y la volatilidad extra cambia más, y se desvanece para opciones muy dentro o fuera del dinero (strike 80: 23,8; strike 100: 37,5; strike 120: 21,6). A diferencia de la gamma, la vega crece con el plazo hasta el vencimiento: 19,6 a tres meses, 37,5 a un año, 62,5 a cuatro años, porque una vida más larga da más tiempo a la volatilidad para importar. Las opciones a largo plazo son, pues, las más expuestas a cambios de volatilidad, mientras que las de corto plazo lo están a la 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

Medirla y usarla

La volatilidad se cotiza en puntos porcentuales, así que las mesas de riesgo citan la vega por punto: vega / 100, el cambio de precio cuando la volatilidad pasa del 20 % al 21 %. Un salto de 10 puntos de volatilidad, como en un susto de mercado, mueve la opción en el dinero unos 0,375 * 10 = 3,75, casi el 36 % de su precio. Como con delta y gamma, se puede medir la vega de cualquier modelo perturbando: valorar con sigma + h y sigma - h y tomar la diferencia central. La estimación lineal falla algo en grandes movimientos, porque el precio también es curvo en volatilidad.

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
La vega explica por qué se cotiza la volatilidad implícitaComo la volatilidad es el único dato no observado y el precio es tan sensible a ella, los traders ejecutan la fórmula al revés: a partir del precio de mercado de una opción resuelven la volatilidad que lo reproduce. Ese número, la volatilidad implícita, es como se cotizan y comparan las opciones entre strikes y fechas, y la vega dice hasta qué punto un error de precio se traduce en un error de volatilidad: los siguientes temas construyen justo eso.
  • Vega = S * pdf(d1) * sqrt(T): positiva, igual para calls y puts, máxima en el dinero y creciente con el plazo.
  • Cótala por punto de volatilidad (vega / 100); numéricamente, (f(sigma + h) - f(sigma - h)) / (2h) sirve para cualquier modelo.
  • Cambio de precio ~ vega_por_punto * puntos: un salto de volatilidad importa tanto como un movimiento de la acción; la volatilidad implícita es la cotización del mercado.

A continuación: theta y rho, las sensibilidades al tiempo y a los tipos de interés.

Lab: qué se califica

  • Medir la sensibilidad a la volatilidad con vega25 pts
  • Expresar la vega por punto de volatilidad con vega_per_point25 pts
  • Perturbar la volatilidad con numerical_vega25 pts
  • Prever el efecto de un movimiento de volatilidad con price_change_from_vol25 pts
Explorador · lab-76-1
▾ lab-76-1
…
bash · en el navegador
learner@quantcraft:~/lab-76-1$
Python aún no cargadoPythonLn 1, Col 1Spaces: 4UTF-8

¿Restablecer este tema?

Todo lo que hay en lab-76-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