Vibeship-spawner-skills portfolio-optimization

id: portfolio-optimization

install
source · Clone the upstream repo
git clone https://github.com/vibeforge1111/vibeship-spawner-skills
manifest: finance/portfolio-optimization/skill.yaml
source content

id: portfolio-optimization name: Portfolio Optimization category: finance description: Use when constructing portfolios, implementing mean-variance optimization, factor models, risk parity, or Black-Litterman allocation - covers modern portfolio theory and practical enhancements

patterns: golden_rules: - rule: "1/N often wins" reason: "Simple allocation beats complex models out-of-sample" - rule: "Shrink covariance" reason: "Raw sample covariance is unstable" - rule: "Constrain weights" reason: "Unconstrained = concentrated bets" - rule: "Regularize" reason: "Prevents corner solutions" - rule: "Backtest carefully" reason: "In-sample optimal ≠ out-of-sample optimal"

method_selection: strong_return_views: "Black-Litterman" want_diversification: "Risk Parity / HRP" trust_estimates: "Mean-Variance (with shrinkage)" want_simplicity: "1/N Equal Weight" have_factor_exposures: "Factor Model"

markowitz_optimization: | Maximize: w'μ - (λ/2)*w'Σw Subject to: w'1 = 1, w >= 0

Where:
- w = weights
- μ = expected returns
- Σ = covariance matrix
- λ = risk aversion

risk_parity_concept: | Equal risk contribution from each asset: RC_i = w_i * (Σw)_i / σ_p Target: RC_1 = RC_2 = ... = RC_n

hrp_steps: - "Tree clustering on correlation distance" - "Quasi-diagonalize correlation matrix" - "Recursive bisection allocation"

black_litterman: | Prior: π = δΣw_mkt (equilibrium returns) Views: P*μ = Q + ε Posterior: μ_bl = [(τΣ)^-1 + P'Ω^-1P]^-1 * [(τΣ)^-1π + P'Ω^-1Q]

anti_patterns:

  • pattern: "No shrinkage" problem: "Unstable covariance estimates" solution: "Ledoit-Wolf or similar"
  • pattern: "Unconstrained optimization" problem: "Extreme positions" solution: "Max weight constraints"
  • pattern: "Single optimization" problem: "Ignores estimation error" solution: "Resampling or robust methods"
  • pattern: "In-sample only" problem: "Overfits to historical data" solution: "Walk-forward validation"
  • pattern: "Ignoring turnover" problem: "High transaction costs" solution: "Turnover constraints"
  • pattern: "No rebalancing rules" problem: "Drift from target" solution: "Regular or threshold-based"

implementation_checklist: optimization: - "Choose appropriate optimization method for your beliefs" - "Apply shrinkage to covariance matrix" - "Set sensible weight constraints (min/max)" - "Consider transaction costs and turnover" validation: - "Backtest with walk-forward validation" - "Compare to simple benchmarks (1/N)" - "Monitor for concentration risk" production: - "Set rebalancing schedule" - "Document assumptions and limitations" - "Stress test with historical scenarios"

handoffs:

  • skill: risk-modeling trigger: "portfolio VaR and stress testing"
  • skill: algorithmic-trading trigger: "rebalancing execution"
  • skill: derivatives-pricing trigger: "options overlay strategies"

ecosystem: optimization: - "PyPortfolioOpt - Full optimization library" - "skfolio - Scikit-learn style portfolio" - "cvxpy - Convex optimization" data: - "yfinance - Price data" - "pandas-datareader - Multiple sources" risk: - "sklearn.covariance - Shrinkage estimators" - "riskfolio-lib - Risk measures"

sources: tutorials: - "PyPortfolioOpt Documentation" - "skfolio Library Guide" books: - "Advances in Financial ML - Lopez de Prado" - "Expected Returns - Ilmanen"