Construcción y optimización cuantitativa de portafolios: Markowitz (scipy.optimize + Monte Carlo), Black-Litterman (prior CAPM, views absolutas/relativas, posterior bayesiano), HRP/HERC/NCO (clustering jerárquico, risk parity, NCO con restricciones). Todo flat numpy + scipy, sin Riskfolio-Lib ni PyPortfolioOpt.
Construcción y optimización cuantitativa de portafolios: Markowitz (scipy.optimize + Monte Carlo), Black-Litterman (prior CAPM, views absolutas/relativas, posterior bayesiano), HRP/HERC/NCO (clustering jerárquico, risk parity, NCO con restricciones). Todo flat numpy + scipy, sin Riskfolio-Lib ni PyPortfolioOpt.
license
MIT
Portfolio — Optimización Cuantitativa de Portafolios
Este skill implementa 3 enfoques de optimización de portafolios desde el material del curso
(notebook Clase_08_teoria_2025_portafolio.ipynb y PDF Portafolios 2025 Ucema.pdf):
simulación Monte Carlo + frontera eficiente + CML.
Black-Litterman — Combinación bayesiana de retornos de equilibrio de mercado
(CAPM inverso) con views del inversor, incluyendo matriz de incertidumbre Ω
(método Idzorek).
HRP / HERC / NCO — Construcción jerárquica de portafolios mediante clustering
(single/complete/average/ward), risk parity y NCO con restricciones.
Todos los scripts usan solo numpy, pandas y scipy. Sin dependencias pesadas.
Este skill es autónomo: funciona sin skills/backtesting.
Para ratios de performance post-optimización (Sharpe, Sortino, VaR, drawdowns, etc.)
consultar el skill hermana:
skills/backtesting.
El portafolio tangente (máximo Sharpe) se combina con el activo libre de riesgo
para obtener cualquier punto sobre la Capital Market Line (CML), manteniendo
el mismo Sharpe ratio.
# Portafolio tangente puro (w=1)
py scripts/cli.py cml --assets assets/sample_returns.csv --weight 1.0
# Deleverage: 60% en tangencia, 40% en Rf (menos riesgo, mismo Sharpe)
py scripts/cli.py cml --assets assets/sample_returns.csv --weight 0.6
# Leverage: pide prestado 50% a Rf, invierte 150% en tangencia (más riesgo, mismo Sharpe)
py scripts/cli.py cml --assets assets/sample_returns.csv --weight 1.5
No requiere Riskfolio-Lib, PyPortfolioOpt, sklearn, cvxpy ni arch.
Para visualización (dendrogramas, frontera eficiente) se puede usar matplotlib
opcionalmente. Ejemplos de plots están en el notebook de referencia.
Referencias Teóricas
Markowitz (1952): "Portfolio Selection", Journal of Finance.
Black & Litterman (1992): "Global Portfolio Optimization", Financial Analysts Journal.
Idzorek (2005): "A Step-by-Step Guide to the Black-Litterman Model".
Lopez de Prado (2016): "Building Diversified Portfolios that Outperform Out of Sample" (HRP).
De Prado (2019): "Nested Clustered Optimization", SSRN 3469961.
Pfitzinger & Katzke (2019): "NCO with Constraints", SSRN 4409173.
Meucci (2006): "Beyond Black-Litterman: Views on Non-Normal Markets", SSRN 1213325.
Avramov (2004): "Bayesian Variable Selection in Portfolio Analysis", SSRN 3326617.
Para profundizar en ratios de performance (30+ métricas: Sharpe, Sortino,
VaR, cVaR, Kelly, Rachev, Profit Factor, etc.) y backtesting de estrategias:
skills/backtesting.
Notebook de referencia
El contenido teórico y ejemplos numéricos de este skill están basados en:
temp/Clase_08_teoria_2025_portafolio.ipynb — Implementaciones en Python de
Markowitz, Monte Carlo, NCO (Riskfolio-Lib), Black-Litterman (PyPortfolioOpt).