portfolio
Compare original and translation side by side
🇺🇸
Original
English🇨🇳
Translation
ChinesePortfolio — Optimización Cuantitativa de Portafolios
Portfolio — 量化投资组合优化
Este skill implementa 3 enfoques de optimización de portafolios desde el material del curso
(notebook y PDF ):
Clase_08_teoria_2025_portafolio.ipynbPortafolios 2025 Ucema.pdf- Markowitz / Media-Varianza — Optimización convexa vía
scipy.optimize- 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 , y . Sin dependencias pesadas.
Este skill es autónomo: funciona sin .
numpypandasscipyskills/backtestingPara ratios de performance post-optimización (Sharpe, Sortino, VaR, drawdowns, etc.)
consultar el skill hermana:
.
skills/backtestingPart of the Gauss314 Skills Repository.
本Skill实现了课程资料中的3种投资组合优化方法(参考笔记本和PDF):
Clase_08_teoria_2025_portafolio.ipynbPortafolios 2025 Ucema.pdf- Markowitz / 均值-方差 — 通过实现凸优化
scipy.optimize- 蒙特卡洛模拟 + 有效前沿 + CML(资本市场线)。
- Black-Litterman — 市场均衡收益(逆CAPM)与投资者观点的贝叶斯组合,包含不确定性矩阵Ω(Idzorek方法)。
- HRP / HERC / NCO — 通过聚类(单链接/完全链接/平均链接/Ward方法)、风险平价和带约束的NCO实现分层投资组合构建。
所有脚本仅使用、和,无重型依赖。本Skill是独立模块:无需依赖即可运行。
numpypandasscipyskills/backtesting如需优化后的绩效指标(Sharpe、Sortino、VaR、回撤等),请参考姊妹Skill:
。
skills/backtestingFile Map
文件结构
skills/portfolio/
├── SKILL.md ← Este archivo
├── references/
│ ├── PORTFOLIO_THEORY.md ← MPT, Markowitz, frontera eficiente (ES)
│ ├── BLACK_LITTERMAN.md ← BL: prior, views, posterior, omega (ES)
│ ├── HIERARCHICAL.md ← HRP, HERC, NCO, clustering (ES)
│ └── RISK_MEASURES.md ← VaR, CVaR, MAD, MSV, DR, MDD (ES)
├── assets/
│ ├── sample_prices.csv ← Precios multi-activo para ejemplos
│ ├── sample_returns.csv ← Retornos multi-activo
│ ├── sample_mcaps.json ← Market caps para Black-Litterman
│ └── defaults.json ← Parámetros default
├── scripts/
│ ├── __init__.py
│ ├── portfolio.py ← Core: Markowitz, Sharpe, Monte Carlo, frontera
│ ├── black_litterman.py ← BL: prior, posterior, omega, views
│ ├── hierarchical.py ← HRP/HERC/NCO: clustering, risk parity, constraints
│ ├── risk_measures.py ← VaR, CVaR, MAD, MSV, MDD, DR
│ ├── covariance.py ← Covarianza: hist, ledoit-wolf, oas, ewma
│ └── cli.py ← CLI unificada (12 modos)
└── tests/
├── __init__.py
└── test_portfolio.py ← Tests + validación contra notebookskills/portfolio/
├── SKILL.md ← 本文件
├── references/
│ ├── PORTFOLIO_THEORY.md ← MPT、Markowitz、有效前沿(西班牙语)
│ ├── BLACK_LITTERMAN.md ← BL:先验、观点、后验、omega(西班牙语)
│ ├── HIERARCHICAL.md ← HRP、HERC、NCO、聚类(西班牙语)
│ └── RISK_MEASURES.md ← VaR、CVaR、MAD、MSV、DR、MDD(西班牙语)
├── assets/
│ ├── sample_prices.csv ← 示例多资产价格数据
│ ├── sample_returns.csv ← 示例多资产收益数据
│ ├── sample_mcaps.json ← Black-Litterman用市值数据
│ └── defaults.json ← 默认参数
├── scripts/
│ ├── __init__.py
│ ├── portfolio.py ← 核心模块:Markowitz、Sharpe、蒙特卡洛、有效前沿
│ ├── black_litterman.py ← Black-Litterman完整实现:先验、后验、omega、观点
│ ├── hierarchical.py ← HRP/HERC/NCO:聚类、风险平价、约束
│ ├── risk_measures.py ← 风险指标:VaR、CVaR、MAD、MSV、MDD、DR
│ ├── covariance.py ← 协方差估计:历史法、Ledoit-Wolf、OAS、EWMA
│ └── cli.py ← 统一CLI(12种模式)
└── tests/
├── __init__.py
└── test_portfolio.py ← 测试 + 与参考笔记本结果校验Qué hace cada script
各脚本功能说明
| Script | Rol | Funciones clave |
|---|---|---|
| Core de optimización Markowitz | |
| Black-Litterman completo | |
| HRP / HERC / NCO | |
| Medidas de riesgo | |
| Estimación de covarianza | |
| 脚本 | 角色 | 核心函数 |
|---|---|---|
| Markowitz优化核心 | |
| 完整Black-Litterman实现 | |
| HRP / HERC / NCO实现 | |
| 风险指标计算 | |
| 协方差估计 | |
Quick Start
快速开始
Markowitz (scipy.optimize)
Markowitz(scipy.optimize)
bash
undefinedbash
undefinedMax Sharpe con 3 activos
3资产最大化Sharpe比率
py scripts/cli.py markowitz --assets assets/sample_returns.csv
py scripts/cli.py markowitz --assets assets/sample_returns.csv
Con tasa libre de riesgo personalizada
自定义无风险利率
py scripts/cli.py markowitz --assets assets/sample_returns.csv --rf 0.05
py scripts/cli.py markowitz --assets assets/sample_returns.csv --rf 0.05
Estadísticas individuales
单个资产统计
py scripts/cli.py stats --assets assets/sample_returns.csv
undefinedpy scripts/cli.py stats --assets assets/sample_returns.csv
undefinedMonte Carlo
蒙特卡洛模拟
bash
undefinedbash
undefinedSimular 10.000 carteras aleatorias
模拟10000个随机投资组合
py scripts/cli.py montecarlo --assets assets/sample_returns.csv
py scripts/cli.py montecarlo --assets assets/sample_returns.csv
Guardar frontera a CSV
将有效前沿保存为CSV
py scripts/cli.py montecarlo --assets assets/sample_returns.csv --save frontier.csv
undefinedpy scripts/cli.py montecarlo --assets assets/sample_returns.csv --save frontier.csv
undefinedFrontera Eficiente
有效前沿
bash
py scripts/cli.py frontier --assets assets/sample_returns.csv --n 50bash
py scripts/cli.py frontier --assets assets/sample_returns.csv --n 50Black-Litterman
Black-Litterman
bash
undefinedbash
undefinedPrior: retornos implícitos de mercado (CAPM inverso)
先验:市场隐含收益(逆CAPM)
py scripts/cli.py bl-prior --assets assets/sample_returns.csv --market-prices assets/sample_prices.csv --mcaps assets/sample_mcaps.json
py scripts/cli.py bl-prior --assets assets/sample_returns.csv --market-prices assets/sample_prices.csv --mcaps assets/sample_mcaps.json
BL completo con views + optimización
完整BL模型(含观点+优化)
py scripts/cli.py bl --assets assets/sample_returns.csv --market-prices assets/sample_prices.csv --mcaps assets/sample_mcaps.json --views '{"BMA": 0.25, "LOMA": 0.4, "MELI": -0.1}' --confidences "0.3,0.5,0.8" --optimize
undefinedpy scripts/cli.py bl --assets assets/sample_returns.csv --market-prices assets/sample_prices.csv --mcaps assets/sample_mcaps.json --views '{"BMA": 0.25, "LOMA": 0.4, "MELI": -0.1}' --confidences "0.3,0.5,0.8" --optimize
undefinedHRP / HERC / NCO
HRP / HERC / NCO
bash
undefinedbash
undefinedHierarchical Risk Parity
层次风险平价(HRP)
py scripts/cli.py hrp --assets assets/sample_returns.csv
py scripts/cli.py hrp --assets assets/sample_returns.csv
Nested Clustered Optimization
嵌套聚类优化(NCO)
py scripts/cli.py nco --assets assets/sample_returns.csv --clusters 3
py scripts/cli.py nco --assets assets/sample_returns.csv --clusters 3
NCO con restricciones
带约束的NCO
py scripts/cli.py nco-con --assets assets/sample_returns.csv --constraints assets/sample_constraints.csv --classes assets/sample_classes.csv
undefinedpy scripts/cli.py nco-con --assets assets/sample_returns.csv --constraints assets/sample_constraints.csv --classes assets/sample_classes.csv
undefinedRiesgo
风险指标
bash
undefinedbash
undefinedTodas las medidas de riesgo
计算所有风险指标
py scripts/cli.py risk --prices assets/sample_prices.csv
py scripts/cli.py risk --prices assets/sample_prices.csv
Medida específica
计算特定风险指标
py scripts/cli.py risk --prices assets/sample_prices.csv --measure var
---py scripts/cli.py risk --prices assets/sample_prices.csv --measure var
---Usar como Librería
作为库使用
python
from scripts.portfolio import *
from scripts.black_litterman import *
from scripts.hierarchical import *
import numpy as nppython
from scripts.portfolio import *
from scripts.black_litterman import *
from scripts.hierarchical import *
import numpy as np--- Markowitz ---
--- Markowitz ---
rets = pd.read_csv('assets/sample_returns.csv', index_col=0)
result = max_sharpe_optim(rets, rf=0.045)
print(result['weights'], result['sharpe']) # pesos óptimos, Sharpe
rets = pd.read_csv('assets/sample_returns.csv', index_col=0)
result = max_sharpe_optim(rets, rf=0.045)
print(result['weights'], result['sharpe']) # 最优权重、Sharpe比率
--- Monte Carlo ---
--- 蒙特卡洛模拟 ---
port_df = random_portfolios(rets, n_portfolios=10000, rf=0.045)
best = port_df.loc[port_df['sharpe'].idxmax()]
print(best['weights']) # mejor combinación Monte Carlo
port_df = random_portfolios(rets, n_portfolios=10000, rf=0.045)
best = port_df.loc[port_df['sharpe'].idxmax()]
print(best['weights']) # 蒙特卡洛最优组合
--- Black-Litterman ---
--- Black-Litterman ---
import json
with open('assets/sample_mcaps.json') as f:
mcaps = json.load(f)
spy = pd.read_csv('assets/sample_prices.csv')['SPY'].pct_change().dropna()
bl_result = bl_pipeline(rets, spy.values, mcaps,
view_dict={'BMA': 0.25, 'LOMA': 0.4},
view_confidences=[0.3, 0.5], rf=0.045)
print(bl_result['posterior']) # retornos a posteriori
import json
with open('assets/sample_mcaps.json') as f:
mcaps = json.load(f)
spy = pd.read_csv('assets/sample_prices.csv')['SPY'].pct_change().dropna()
bl_result = bl_pipeline(rets, spy.values, mcaps,
view_dict={'BMA': 0.25, 'LOMA': 0.4},
view_confidences=[0.3, 0.5], rf=0.045)
print(bl_result['posterior']) # 后验收益
--- HRP ---
--- HRP ---
hrp_result = hrp_portfolio(rets, linkage_method='ward')
print(hrp_result['weights']) # pesos HRP
---hrp_result = hrp_portfolio(rets, linkage_method='ward')
print(hrp_result['weights']) # HRP权重
---Dependencias
依赖项
| Librería | Requerida | Uso |
|---|---|---|
| ✅ | Cómputo vectorizado, álgebra lineal |
| ✅ | CSV I/O, DataFrames |
| ✅ | |
No requiere Riskfolio-Lib, PyPortfolioOpt, sklearn, cvxpy ni arch.
Para visualización (dendrogramas, frontera eficiente) se puede usar
opcionalmente. Ejemplos de plots están en el notebook de referencia.
matplotlib| 库 | 是否必需 | 用途 |
|---|---|---|
| ✅ | 向量化计算、线性代数 |
| ✅ | CSV读写、DataFrame处理 |
| ✅ | |
无需依赖 Riskfolio-Lib、PyPortfolioOpt、sklearn、cvxpy或arch。
如需可视化(树状图、有效前沿),可可选使用。参考笔记本中包含绘图示例。
matplotlibReferencias 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- 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。
如需深入了解绩效指标(30+种指标:Sharpe、Sortino、VaR、cVaR、Kelly、Rachev、盈利因子等)和策略回测,请参考:
。
skills/backtestingNotebook de referencia
参考笔记本
El contenido teórico y ejemplos numéricos de este skill están basados en:
- — Implementaciones en Python de Markowitz, Monte Carlo, NCO (Riskfolio-Lib), Black-Litterman (PyPortfolioOpt).
temp/Clase_08_teoria_2025_portafolio.ipynb - — Marco teórico: MPT, CAPM, Fama-French, clustering, NCO, Black-Litterman.
temp/Portafolios 2025 Ucema.pdf
Las implementaciones flat numpy en replican los resultados de esos
notebooks sin depender de las librerías mencionadas.
scripts/本Skill的理论内容和数值示例基于:
- — Markowitz、蒙特卡洛、NCO(基于Riskfolio-Lib)、Black-Litterman(基于PyPortfolioOpt)的Python实现。
temp/Clase_08_teoria_2025_portafolio.ipynb - — 理论框架:MPT、CAPM、Fama-French、聚类、NCO、Black-Litterman。
temp/Portafolios 2025 Ucema.pdf
scripts/