mcpField
P
portfolio

portfolio

github.com/gauss314データ・データベース253267 回インストール20 週間前に更新
リポジトリ

portfolio について

portfolioは、資産リターンデータを扱うユーザー向けのPythonによる定量ポートフォリオ構築スキルです。Markowitz、Black-Litterman、階層型手法を実装し、コマンドラインとライブラリの両方から利用できます。

主な機能

  1. 01Markowitz手法によるポートフォリオ最適化
  2. 02市場の事前分布と投資家の見解の統合
  3. 03HRP、HERC、NCOによるポートフォリオ構築
  4. 04共分散行列の推定
  5. 05ポートフォリオのリスク指標の計算

活用シーン

  1. 01最大シャープレシオまたは最小分散配分の算出
  2. 02市場が示すリターンへの投資見解の反映
  3. 03階層クラスタリングによるポートフォリオ構築

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/gauss314/skills --skill portfolio

インストール後、Claude Code で/portfolioを入力して読み込まれたか確認します。

同梱ファイル

SKILL.md と一緒にインストールされる参考資料やスクリプト。

assets/
defaults.json
sample_classes.csv
sample_constraints.csv
sample_mcaps.json
sample_prices_16.csv
sample_prices.csv
sample_returns_16.csv
sample_returns.csv
references/
BLACK_LITTERMAN.md
HIERARCHICAL.md
PORTFOLIO_THEORY.md
RISK_MEASURES.md
scripts/
__init__.py
black_litterman.py
cli.py
covariance.py
hierarchical.py
portfolio.py
risk_measures.py
tests/
__init__.py
test_portfolio.py

詳細

Portfolio — ポートフォリオの定量的最適化

このスキルでは、コース教材(ノートブック Clase_08_teoria_2025_portafolio.ipynb と PDF Portafolios 2025 Ucema.pdf)に基づく3つのポートフォリオ最適化アプローチを実装しています。

  1. Markowitz/平均・分散 — scipy.optimize による凸最適化 + モンテカルロシミュレーション + 効率的フロンティア + CML。
  2. Black-Litterman — 市場均衡リターン(逆算 CAPM)と投資家のビューをベイズ的に組み合わせます。Ω 不確実性行列(Idzorek 法)にも対応しています。
  3. HRP/HERC/NCO — クラスタリング(single/complete/average/ward)、リスクパリティ、制約付き NCO による階層的なポートフォリオ構築。

すべてのスクリプトで使用するのは numpy、pandas、scipy のみです。重い依存関係はありません。 このスキルは単独で動作し、skills/backtesting は必要ありません。

最適化後のパフォーマンス比率(Sharpe、Sortino、VaR、ドローダウンなど)については、姉妹スキルを参照してください。 skills/backtesting。

Gauss314 Skills Repository の一部です。


ファイル一覧

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 notebook
各スクリプトの役割
スクリプト役割主な関数
portfolio.pyMarkowitz 最適化のコアmax_sharpe_optim、min_variance_optim、random_portfolios、efficient_frontier、cml_portfolio、asset_stats
black_litterman.pyBlack-Litterman の完全実装market_implied_risk_aversion、market_implied_prior_returns、bl_posterior_returns、omega_idzorek
hierarchical.pyHRP/HERC/NCOhrp_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

クイックスタート

Markowitz(scipy.optimize)
# Max Sharpe con 3 activos
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

# Estadísticas individuales
py scripts/cli.py stats --assets assets/sample_returns.csv
モンテカルロ
# Simular 10.000 carteras aleatorias
py scripts/cli.py montecarlo --assets assets/sample_returns.csv

# Guardar frontera a 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 — レバレッジとデレバレッジ

接点ポートフォリオ(最大 Sharpe)と無リスク資産を組み合わせることで、同じ Sharpe 比率を維持しながら、資本市場線(CML)上の任意の点を取得できます。

# 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
Black-Litterman
# Prior: retornos implícitos de mercado (CAPM inverso)
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
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
# Hierarchical Risk Parity
py scripts/cli.py hrp --assets assets/sample_returns.csv

# Nested Clustered Optimization
py scripts/cli.py nco --assets assets/sample_returns.csv --clusters 3

# NCO con restricciones
py scripts/cli.py nco-con --assets assets/sample_returns.csv --constraints assets/sample_constraints.csv --classes assets/sample_classes.csv
リスク
# Todas las medidas de riesgo
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

ライブラリとして使用

from scripts.portfolio import *
from scripts.black_litterman import *
from scripts.hierarchical import *

import numpy as np

# --- 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

# --- CML: leverage/deleverage ---
# 60% en tangencia, 40% en Rf (deleverage)
cml = cml_portfolio(rets, rf=0.045, weight_tangency=0.6)
print(cml['ret'], cml['vol'], cml['sharpe'])  # mismo Sharpe que el tangente

# Leverage: 150% en tangencia (pide prestado 50% a Rf)
cml2 = cml_portfolio(rets, rf=0.045, weight_tangency=1.5)
print(cml2['ret'], cml2['vol'], cml2['sharpe'])  # mismo 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

# --- 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

# --- HRP ---
hrp_result = hrp_portfolio(rets, linkage_method='ward')
print(hrp_result['weights'])  # pesos HRP

依存関係

ライブラリ必須用途
numpy✅ベクトル化計算、線形代数
pandas✅CSV 入出力、DataFrame
scipy✅optimize(Markowitz)、cluster.hierarchy(HRP/NCO)、stats

不要なもの:Riskfolio-Lib、PyPortfolioOpt、sklearn、cvxpy、arch。

可視化(デンドログラム、効率的フロンティア)には、必要に応じて matplotlib を使用できます。プロットの例は参照ノートブックにあります。

理論的参考文献

  • 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、Profit Factor など)と戦略のバックテストについて詳しくは、次を参照してください: skills/backtesting。


参考ノートブック

このスキルの理論的内容と数値例は、以下に基づいています。

  • temp/Clase_08_teoria_2025_portafolio.ipynb — Markowitz、Monte Carlo、NCO(Riskfolio-Lib)、Black-Litterman(PyPortfolioOpt)の Python 実装。
  • temp/Portafolios 2025 Ucema.pdf — 理論的枠組み:MPT、CAPM、Fama-French、クラスタリング、NCO、Black-Litterman。

/scripts/ の flat numpy 実装は、前述のライブラリに依存せず、これらのノートブックの結果を再現します。

コメント