用途
Portfolio 是一个量化投资组合构建与优化技能,来自 gauss314/skills 仓库。它把课程材料(Clase_08_teoria_2025_portafolio.ipynb 与 Portafolios 2025 Ucema.pdf)中的三类组合优化方法实现为可复用脚本与 CLI,用于计算最优权重、市场隐含收益、后验收益与风险度量。
主要能力
该技能包含三个优化方向:
-
Markowitz / 均值-方差:通过 scipy.optimize 进行凸优化,支持蒙特卡洛模拟、有效前沿(efficient frontier)与资本市场线(CML)。核心函数包括 max_sharpe_optim、min_variance_optim、random_portfolios、efficient_frontier、cml_portfolio、asset_stats。
-
Black-Litterman:以 CAPM 反推的市场均衡收益为先验(prior),与投资者观点进行贝叶斯结合,支持绝对/相对观点,并用 Idzorek 方法构建不确定性矩阵 Ω。函数包括 market_implied_risk_aversion、market_implied_prior_returns、bl_posterior_returns、omega_idzorek。
-
HRP / HERC / NCO:通过聚类(single/complete/average/ward)进行层次化组合构建,包含风险平价与带约束的 NCO。函数包括 hrp_portfolio、herc_portfolio、nco_portfolio、nco_with_constraints、hrp_constraints。
另有 risk_measures.py 提供风险度量(var_historic、cvar、max_drawdown、cdar、diversification_ratio、risk_contribution),covariance.py 提供协方差估计(cov_hist、cov_ledoit_wolf、cov_oas、cov_ewma),以及统一的 cli.py(12 种模式)。
使用方式
命令行(CLI):
Markowitz:
py scripts/cli.py markowitz --assets assets/sample_returns.csv
py scripts/cli.py markowitz --assets assets/sample_returns.csv --rf 0.05
py scripts/cli.py stats --assets assets/sample_returns.csv
Monte Carlo:
py scripts/cli.py montecarlo --assets assets/sample_returns.csv
py scripts/cli.py montecarlo --assets assets/sample_returns.csv --save frontier.csv
有效前沿:
py scripts/cli.py frontier --assets assets/sample_returns.csv --n 50
CML(杠杆/去杠杆):
py scripts/cli.py cml --assets assets/sample_returns.csv --weight 1.0
py scripts/cli.py cml --assets assets/sample_returns.csv --weight 0.6
py scripts/cli.py cml --assets assets/sample_returns.csv --weight 1.5
Black-Litterman:
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 --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
HRP / HERC / NCO:
py scripts/cli.py hrp --assets assets/sample_returns.csv
py scripts/cli.py nco --assets assets/sample_returns.csv --clusters 3
py scripts/cli.py nco-con --assets assets/sample_returns.csv --constraints assets/sample_constraints.csv --classes assets/sample_classes.csv
风险度量:
py scripts/cli.py risk --prices assets/sample_prices.csv
py scripts/cli.py risk --prices assets/sample_prices.csv --measure var
作为库使用:
from scripts.portfolio import *
from scripts.black_litterman import *
from scripts.hierarchical import *
import numpy as np
rets = pd.read_csv('assets/sample_returns.csv', index_col=0)
result = max_sharpe_optim(rets, rf=0.045)
print(result['weights'], result['sharpe'])
cml = cml_portfolio(rets, rf=0.045, weight_tangency=0.6)
print(cml['ret'], cml['vol'], cml['sharpe'])
cml2 = cml_portfolio(rets, rf=0.045, weight_tangency=1.5)
print(cml2['ret'], cml2['vol'], cml2['sharpe'])
port_df = random_portfolios(rets, n_portfolios=10000, rf=0.045)
best = port_df.loc[port_df['sharpe'].idxmax()]
print(best['weights'])
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_result = hrp_portfolio(rets, linkage_method='ward')
print(hrp_result['weights'])
文件结构
skills/portfolio/
├── SKILL.md
├── references/
│ ├── PORTFOLIO_THEORY.md
│ ├── BLACK_LITTERMAN.md
│ ├── HIERARCHICAL.md
│ └── RISK_MEASURES.md
├── assets/
│ ├── sample_prices.csv
│ ├── sample_returns.csv
│ ├── sample_mcaps.json
│ └── defaults.json
├── scripts/
│ ├── __init__.py
│ ├── portfolio.py
│ ├── black_litterman.py
│ ├── hierarchical.py
│ ├── risk_measures.py
│ ├── covariance.py
│ └── cli.py
└── tests/
├── __init__.py
└── test_portfolio.py
依赖
numpy(必需,向量化计算与线性代数)、pandas(必需,CSV I/O 与 DataFrame)、scipy(必需,optimize 用于 Markowitz、cluster.hierarchy 用于 HRP/NCO、stats)。不需要 Riskfolio-Lib、PyPortfolioOpt、sklearn、cvxpy 或 arch。可视化(树状图、有效前沿)可选用 matplotlib。
适用场景
适用于投资组合权重优化、市场隐含收益推导、观点融合后的后验收益计算、层次化组合构建以及风险度量等量化金融任务。可作为库在 Python 中调用,也可通过 CLI 快速执行。
限制
该技能自包含,可独立运行,无需 skills/backtesting。若需优化后的绩效比率(Sharpe、Sortino、VaR、回撤等),需参考其姊妹技能 skills/backtesting。收费、价格与商用条款暂未提供。
理论参考
Markowitz (1952)、Black & Litterman (1992)、Idzorek (2005)、Lopez de Prado (2016, 2019)、Pfitzinger & Katzke (2019)、Meucci (2006)、Avramov (2004)。参考 notebook:temp/Clase_08_teoria_2025_portafolio.ipynb 与 temp/Portafolios 2025 Ucema.pdf。