σμ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 Optimization›Módulo 5 · La optimización en la práctica›Tema 5.2·~1 h 40 minAvanzado

Proyecto final: optimización de cartera con restricciones y límites de rotación y costes

Posición en la rutaMódulo 5 de 5 · Tema 2 de 2
5.2 Proyecto final: optimización de cartera con restricciones y límites de rotación y costes
—Puntuación del lab— / 100XP total—Racha—

De las piezas a un optimizador que funciona

Una cartera de mínima varianza sobre el papel no tiene reglas. Un mandato real es solo largo, totalmente invertido y paga por operar, y la única forma de ver qué hacen esas reglas es construir uno mismo el optimizador y probarlo en días que no vio. Este proyecto final usa tres ideas de la habilidad: el descenso de gradiente para el bucle, una proyección para la regla de presupuesto solo largo y un límite L1 sobre las operaciones. Solo hace falta NumPy y no se permite ningún solucionador de biblioteca.

wₖ₊₁=Π(wₖ-η·2Σwₖ), η=1/(2λₘₐₓ(Σ))

El descenso de gradiente proyectado da un paso de gradiente ordinario sobre la varianza wᵀΣw, cuyo gradiente es 2Σw, y luego devuelve el resultado a la cartera solo larga y totalmente invertida más cercana con la proyección Π. El paso 1/L, con L=2λₘₐₓ(Σ) el mayor valor propio del hessiano, siempre es estable. La proyección sobre {w≥0, Σw=1} tiene una respuesta exacta: ordenar el vector de mayor a menor, tomar las sumas acumuladas menos uno, hallar la última posición ρ en que el valor ordenado aún supera su suma acumulada dividida por k, fijar θ como esa suma acumulada entre ρ+1 y devolver max(v-θ,0). Todos los pesos se desplazan la misma cantidad y los que quedarían negativos se cortan en cero.

w=w₀+α(wₜ-w₀), α=min(1, τ/(‖wₜ-w₀‖₁)), c ‖w-w₀‖₁

La rotación es la norma L1 de la operación, ‖w-w₀‖₁. Para mantenerla bajo un límite τ sin dejar de ser factible, se recorre solo la fracción α del camino entre la cartera actual w₀ y el objetivo wₜ del optimizador. Un punto del segmento entre dos carteras solo largas y totalmente invertidas es de nuevo solo largo y totalmente invertido, y la norma L1 crece linealmente a lo largo del segmento, de modo que la operación es exactamente min(brecha,τ). Cada reequilibrio cuesta entonces c veces su rotación, que el backtest resta del primer día del bloque de tenencia. Los pesos de un bloque solo pueden usar los días anteriores, y el resultado que se informa es la volatilidad y el rendimiento de los días fuera de muestra, netos y concatenados.

Qué dicen los datos realesPara doce grandes acciones estadounidenses desde 2010, con ventana de 126 días reestimada cada 42 días, un coste de 10 puntos básicos y 4058 días fuera de muestra, la cartera solo larga de mínima varianza tiene una volatilidad de alrededor del 13,4 % anual, un rendimiento de alrededor del 13,8 % y una rotación de unos 0,36 por reequilibrio. Limitar la rotación a 0,2 da una volatilidad de alrededor del 13,6 %, un rendimiento de alrededor del 14,0 % y una rotación de 0,20: algo más de riesgo, pero menos operaciones y ninguna pérdida de rendimiento neto. Los pesos iguales tienen una volatilidad de alrededor del 18,4 %, un rendimiento de alrededor del 21,4 % y ninguna operación. Ganan más solo porque estas doce supervivientes, sobre todo Apple, Amazon y Nvidia, lo hicieron muy bien.
  • Descenso de gradiente proyectado: paso de gradiente 2Σw con paso 1/L y luego proyección sobre el símplex.
  • Límite de rotación: avanzar la fracción α=min(1,τ/brecha) hacia el objetivo; la cartera sigue siendo factible.
  • Backtest honesto: estimar con los últimos window días, mantener step días, restar los costes e informar las cifras fuera de muestra concatenadas.
Dos simplificaciones que recordarEl backtest ignora la deriva de los pesos dentro de un bloque (los pesos se mantienen fijos) y cobra un coste plano por unidad de rotación, cuando el impacto real crece con el tamaño operado y la iliquidez. Ambas cosas hacen las cifras algo demasiado amables. Tome el ejercicio como un modelo limpio del equilibrio entre riesgo, rotación y coste, no como una previsión del rendimiento real.

Lab: qué se califica

  • Proyección sobre el símplex20 pts
  • Descenso de gradiente proyectado25 pts
  • Un límite de rotación15 pts
  • Un backtest móvil con costes25 pts
  • Comparar las políticas15 pts
Explorador · lab-op-11
▾ lab-op-11
▾ data
…
bash · en el navegador
learner@quantcraft:~/lab-op-11$
Python aún no cargadoPythonLn 1, Col 1Spaces: 4UTF-8

¿Restablecer este tema?

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