σμ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 3 · Matrices, señales y estructura›Tema 3.4·~55 minIntermedio

Una resolución tridiagonal dispersa para el precio de una opción

Posición en la rutaMódulo 3 de 3 · Tema 4 de 10
3.4 Una resolución tridiagonal dispersa para el precio de una opción
—Puntuación del lab— / 100XP total—Racha—

Almacenar solo lo que hay

Valorar una opción en una malla sustituye una ecuación diferencial por una cadena de sistemas lineales. Cada nodo está unido solo a sus dos vecinos, así que la matriz del sistema es tridiagonal: tres diagonales de números y ceros en todo lo demás. Un arreglo denso n×n guarda n² números, casi todos cero; un formato disperso guarda solo los 3n-2 que importan. scipy.sparse.diags([lower, diag, upper], [-1, 0, 1], format='csc') construye una matriz así a partir de sus diagonales (la subdiagonal tiene n-1 elementos y la superdiagonal también, por eso la diagonal inferior se corta para empezar en la segunda fila y la superior para terminar antes de la última columna). El formato CSC es el que quieren los solucionadores dispersos.

El esquema implícito retrocede el valor de la opción en el tiempo resolviendo A V^new=V^old+borde en cada paso. La matriz A no cambia de un paso a otro, así que se factoriza una vez con scipy.sparse.linalg.splu(A) y cada paso es solo lu.solve(rhs), una operación muy barata para una matriz tridiagonal. La condición de borde en S=0 (un put vale allí Ke^(-rτ)) entra en la primera ecuación, por lo que el primer lado derecho se corrige con lower[0] * K * exp(-r * m * dt). Con una tasa a 1 año del 4,47% y σ=25%, el put en el dinero vale 7,6987 en forma cerrada; el esquema da 7,6958 en una malla de 200×200 y 7,6965 en una de 400×400, a unos 0,003. Una malla de 2000 nodos guarda 5.995 números en forma dispersa en vez de casi 4 millones.

  • Guarde las diagonales, no los ceros: sparse.diags guarda 3n - 2 números en vez de n al cuadrado.
  • Factorice una vez, resuelva muchas: splu paga el costo al inicio y luego cada paso de tiempo es un solve barato.
  • Los bordes viven en el lado derecho: el valor conocido en el borde de la malla pasa al otro lado de la ecuación.

Lab: qué se califica

  • Las tres diagonales20 pts
  • La matriz dispersa15 pts
  • Valorar con una factorización30 pts
  • Disperso contra denso10 pts
  • El error de valoración5 pts
  • El estudio con una tasa real20 pts
Explorador · lab-sp-20
▾ lab-sp-20
▾ data
…
bash · en el navegador
learner@quantcraft:~/lab-sp-20$
Python aún no cargadoPythonLn 1, Col 1Spaces: 4UTF-8

¿Restablecer este tema?

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