SuperAPI AI 工具集

portfolio

数据与分析

查看项目

更新于 10-16 12:57

技能介绍

用途

Portfolio 是一个量化投资组合构建与优化技能,来自 gauss314/skills 仓库。它把课程材料(Clase_08_teoria_2025_portafolio.ipynb 与 Portafolios 2025 Ucema.pdf)中的三类组合优化方法实现为可复用脚本与 CLI,用于计算最优权重、市场隐含收益、后验收益与风险度量。

主要能力

该技能包含三个优化方向:

  1. Markowitz / 均值-方差:通过 scipy.optimize 进行凸优化,支持蒙特卡洛模拟、有效前沿(efficient frontier)与资本市场线(CML)。核心函数包括 max_sharpe_optim、min_variance_optim、random_portfolios、efficient_frontier、cml_portfolio、asset_stats。

  2. Black-Litterman:以 CAPM 反推的市场均衡收益为先验(prior),与投资者观点进行贝叶斯结合,支持绝对/相对观点,并用 Idzorek 方法构建不确定性矩阵 Ω。函数包括 market_implied_risk_aversion、market_implied_prior_returns、bl_posterior_returns、omega_idzorek。

  3. 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。