σμ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.5·~50 minIntermedio

Carteras con restricciones usando minimize

Posición en la rutaMódulo 1 de 3 · Tema 5 de 8
1.5 Carteras con restricciones usando minimize
—Puntuación del lab— / 100XP total—Racha—

Un optimizador es una función más reglas

scipy.optimize.minimize(fun, x0, method='SLSQP', bounds=..., constraints=...) halla el vector que hace mínima a fun. Se le dan tres tipos de información. El objetivo fun(w) devuelve un número a minimizar: para una cartera de varianza mínima es w @ cov @ w, y para maximizar algo se minimiza su opuesto. Los límites son una lista de pares (bajo, alto), uno por peso: (0, cap) significa sin ventas en corto y sin posición por encima del tope. Las restricciones son diccionarios: {'type': 'eq', 'fun': lambda w: w.sum() - 1} obliga a que los pesos sumen uno, porque una función eq debe valer cero, mientras que una función ineq debe ser mayor o igual que cero. El punto de partida x0 también importa: pesos iguales es un inicio razonable y factible.

Dos detalles deciden si la respuesta es correcta. Primero, la escala: las varianzas diarias son números como 0,0001, y SLSQP se detiene cuando el objetivo cambia menos que su tolerancia ftol (1e-6 por defecto), así que con cifras diarias crudas puede detenerse en el punto de partida sin moverse. Anualice las entradas (por 252) y pase options={'ftol': 1e-12, 'maxiter': 500}, y compruebe siempre result.success y que los pesos cumplen las reglas. Segundo, la formulación: maximizar el ratio de Sharpe es un cociente, así que minimice -(w @ mu) / sqrt(w @ cov @ w); la paridad de riesgo pide cuotas de riesgo iguales wᵢ(Σw)ᵢ/ wᵀΣw, así que minimice las brechas al cuadrado respecto a 1/n; y una frontera eficiente es un problema de varianza mínima por rendimiento objetivo, con una segunda restricción eq w @ mu - objetivo.

Qué dicen los datos realesTome diez acciones, la utility DUK y el ETF de oro GLD en los últimos 2.500 días, con un máximo del 25 % en cualquier activo. Los pesos iguales tienen una volatilidad del 14,6%. La cartera de varianza mínima la baja al 11,9% con un 25% de oro, un 18% de JNJ y un 14% de KO, y nada de AAPL ni HD. La cartera de Sharpe máximo gana un 21,3% al año con una volatilidad del 14,3%, un ratio de Sharpe de 1,48, apoyándose en oro, WMT y CAT: una cifra que refleja los últimos diez años, no los próximos diez. La paridad de riesgo mantiene entre un 5,8% y un 19,6% en cada activo, con el oro como el mayor, y cada activo aporta el 8,3% del riesgo.
  • Escala y tolerancia: anualice las entradas y ajuste ftol, o SLSQP puede detenerse donde empezó.
  • Compruebe la respuesta: los pesos deben sumar uno y cumplir los límites; mire result.success.
  • Una herramienta, cuatro problemas: varianza mínima, Sharpe negativo, cuotas de riesgo iguales y un problema por rendimiento objetivo son llamadas a minimize con distintos objetivos y restricciones.

Lab: qué se califica

  • Entradas anuales8 pts
  • Rendimiento y riesgo de una cartera8 pts
  • Varianza mínima con tope18 pts
  • Ratio de Sharpe máximo18 pts
  • Contribuciones al riesgo10 pts
  • Paridad de riesgo16 pts
  • Una frontera punto a punto10 pts
  • Tres carteras12 pts
Explorador · lab-sp-14
▾ lab-sp-14
▾ data
…
bash · en el navegador
learner@quantcraft:~/lab-sp-14$
Python aún no cargadoPythonLn 1, Col 1Spaces: 4UTF-8

¿Restablecer este tema?

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