σμ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 AcademyHojas de rutaRutas
Ctrl K
AO
+1,2 k estudiantes
Iniciar sesiónUnirse ↗
Hojas de rutaRutas
AO
+1,2 k estudiantes
Iniciar sesión
  • English
  • Français
  • Español
  • العربية
  • Português
  • Deutsch
  • 日本語
  • 中文
σμ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 AcademyHojas de rutaRutas
Ctrl K
AO
+1,2 k estudiantes
Iniciar sesiónUnirse ↗
Hojas de rutaRutas
AO
+1,2 k estudiantes
Iniciar sesión
  • English
  • Français
  • Español
  • العربية
  • Português
  • Deutsch
  • 日本語
  • 中文
Ruta de SciPy›Módulo 1 · Ajustar y encontrar›Tema 1.6·~45 minIntermedio

Búsqueda de raíces a mano y con brentq

Posición en la rutaMódulo 1 de 3 · Tema 6 de 8
1.6 Búsqueda de raíces a mano y con brentq
—Puntuación del lab— / 100XP total—Racha—

Buscar el número que anula el error

El precio de un bono se calcula fácilmente a partir de un rendimiento; el rendimiento a partir del precio, no. Se resuelve f(y)=P(y)-precio de mercado=0 buscando. El método de Newton sigue la tangente: desde una estimación y salta a y-f(y)/f'(y), y cerca de la respuesta el número de cifras correctas se duplica aproximadamente en cada paso, así que bastan pocas iteraciones, pero necesita la derivada y puede extraviarse desde un mal inicio. La bisección solo necesita un intervalo [lo,hi] donde f cambia de signo: lo divide por la mitad una y otra vez, así que no puede fallar, pero gana un solo dígito binario por paso, 40 pasos para reducir un intervalo de ancho 65 por debajo de 10⁻¹⁰. El método de Brent, scipy.optimize.brentq, conserva la seguridad del intervalo y añade pasos de interpolación, y suele necesitar tantas evaluaciones como unas pocas bisecciones. Con full_output=True devuelve además un registro cuyo campo function_calls dice cuántas veces evaluó su función.

La misma herramienta invierte la fórmula de Black–Scholes. El precio de una call crece con la volatilidad; para cada precio cotizado se pide a brentq el σ en [10⁻⁴,5] que lo reproduce. Solo funciona si el precio está estrictamente entre el valor intrínseco max(S-Ke^(-rT),0) y el precio de la acción S; fuera no existe volatilidad y la respuesta correcta es NaN, no una excepción, para que una cotización mala no detenga toda una sonrisa. El 9 de octubre de 2026 el rendimiento del Tesoro a 10 años es del 5,24%, así que un bono al 5 % anual a 10 años cuesta 97,121. Newton recupera el rendimiento en 4 iteraciones, Brent en 10 llamadas a la función y la bisección en 40. Las volatilidades implícitas del 10 %, 20 %, 40 % y 80 % vuelven con error menor de 10⁻⁶. Saber lo que cuesta cada método y cuándo puede fallar permite elegir el adecuado para toda una curva de bonos o una cadena de opciones.

  • Newton es rápido pero necesita derivada y un inicio decente: aquí tomó 4 pasos.
  • La bisección no puede fallar pero es lenta: 40 pasos para un intervalo de ancho 65.
  • Use brentq y trate los casos imposibles: un intervalo más interpolación, y NaN cuando no hay solución.

Lab: qué se califica

  • Un precio de bono10 pts
  • Newton a mano20 pts
  • Bisección a mano15 pts
  • Brent con scipy15 pts
  • Tres solucionadores lado a lado10 pts
  • Volatilidades implícitas15 pts
  • El estudio con datos reales15 pts
Explorador · lab-sp-15
▾ lab-sp-15
▾ data
…
bash · en el navegador
learner@quantcraft:~/lab-sp-15$
Python aún no cargadoPythonLn 1, Col 1Spaces: 4UTF-8

¿Restablecer este tema?

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