All checks were successful
continuous-integration/drone/push Build is passing
fundamental-analysis: added statistical risk layer - normality test (Jarque-Bera) — validates Sharpe/VaR reliability - unit root test (ADF) — validates technical analysis applicability - rolling skew/kurtosis — tail risk monitoring - interpretation rules for crash risk detection portfolio-review (NEW): portfolio health check and similarity search - HRP optimization, correlation matrix, risk parity weights - t-SNE clustering for hidden correlations - stock similarity search for diversification - rule-engine BUY_MORE/HOLD/SELL per holding strategy-backtest (NEW): historical strategy validation - SMA crossover, RSI mean-reversion, buy-and-hold, momentum - comparison framework with Sharpe, max DD, win rate - validation workflow for trade-analyze recommendations Coverage: 67% → 79% of API endpoints (104/131)
4.8 KiB
4.8 KiB
name, description, user-invocable, metadata
| name | description | user-invocable | metadata | |||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| portfolio-review | Portfolio health check — optimization, correlation, risk parity, clustering, similarity analysis. Use when user asks about portfolio allocation, diversification, rebalancing, or finding similar stocks. | true |
|
Portfolio Review
Professional portfolio analysis. Think like a portfolio manager at a wealth management firm.
Trigger: User mentions portfolio, allocation, diversification, rebalancing, "how should I weight", or "find stocks like X".
Mode A: Portfolio Health Check
When user provides holdings or references MEMORY.md portfolio:
BASE=https://invest-api.k8s.home
# Rule-engine analysis (BUY_MORE/HOLD/SELL per holding with confidence)
curl -sk -X POST "$BASE/api/v1/portfolio/analyze" \
-H "Content-Type: application/json" \
-d '{"holdings": [{"symbol": "AAPL", "shares": 100, "buy_in_price": 150.0}, ...]}'
# HRP optimal weights (Hierarchical Risk Parity)
curl -sk -X POST "$BASE/api/v1/portfolio/optimize" \
-H "Content-Type: application/json" \
-d '{"symbols": ["AAPL", "MSFT", "GOOGL", ...], "days": 365}'
# Correlation matrix (identify hidden correlations)
curl -sk -X POST "$BASE/api/v1/portfolio/correlation" \
-H "Content-Type: application/json" \
-d '{"symbols": ["AAPL", "MSFT", "GOOGL", ...], "days": 365}'
# Risk parity weights (equal risk contribution)
curl -sk -X POST "$BASE/api/v1/portfolio/risk-parity" \
-H "Content-Type: application/json" \
-d '{"symbols": ["AAPL", "MSFT", "GOOGL", ...], "days": 365}'
# Cluster analysis (which stocks behave similarly)
curl -sk -X POST "$BASE/api/v1/portfolio/cluster" \
-H "Content-Type: application/json" \
-d '{"symbols": ["AAPL", "MSFT", "GOOGL", ...], "days": 180}'
# Per-stock risk metrics
for SYMBOL in AAPL MSFT GOOGL; do
curl -sk "$BASE/api/v1/stock/$SYMBOL/performance?days=365"
done
Report Structure
## Portfolio Review — {date}
### Holdings Summary
| Symbol | Shares | Cost | Current | P&L | P&L% | Signal |
|--------|--------|------|---------|-----|-------|--------|
| {sym} | {n} | ${cost} | ${current} | ${pnl} | {%} | {BUY_MORE/HOLD/SELL} |
### Total Portfolio
- Total value: ${sum}
- Total P&L: ${sum} ({%})
- Positions: {count}
### Diversification Analysis
- Correlation highlights:
- Highest pair: {A} ↔ {B} = {r} — ⚠️ if >0.8 = redundant exposure
- Lowest pair: {A} ↔ {B} = {r} — ✅ good diversification
- Clusters found: {n} groups
- Cluster 1: [{symbols}] — {interpretation, e.g. "tech megacap"}
- Cluster 2: [{symbols}] — {interpretation}
- Diversification score: [well-diversified / concentrated / sector-heavy]
### Optimal Allocation
| Symbol | Current Weight | HRP Weight | Risk Parity | Action |
|--------|---------------|------------|-------------|--------|
| {sym} | {%} | {%} | {%} | [increase/decrease/hold] |
### Risk Metrics per Holding
| Symbol | Sharpe | Volatility | Max DD | Beta |
|--------|--------|-----------|--------|------|
| {sym} | {val} | {%} | {%} | {val} |
### Recommendations
1. {Top priority action with reasoning}
2. {Second action}
3. {Third action}
### ⚠️ Alerts
- {Any BUY_MORE or SELL signals from rule engine}
- {Highly correlated pairs that should be reduced}
- {Overweight positions vs optimal}
Mode B: Find Similar/Different Stocks
When user asks "find stocks like X" or "what's similar to X":
# Find most similar stocks
curl -sk -X POST "$BASE/api/v1/portfolio/similar" \
-H "Content-Type: application/json" \
-d '{"symbol": "{TICKER}", "universe": ["AAPL","MSFT","GOOGL","AMZN","META","NVDA","TSLA","JPM","V","WMT","JNJ","PG","XOM","CVX","HD"], "days": 180, "top_n": 5}'
# Cluster the target with potential alternatives
curl -sk -X POST "$BASE/api/v1/portfolio/cluster" \
-H "Content-Type: application/json" \
-d '{"symbols": ["{TICKER}","AAPL","MSFT","GOOGL","AMZN","META","NVDA","TSLA","JPM","V","WMT","JNJ"], "days": 180}'
Report Structure
## Stocks Similar to {TICKER}
### Most Similar (by return correlation)
| Rank | Symbol | Correlation | Why Similar |
|------|--------|-------------|-------------|
| 1 | {sym} | {r} | {interpretation} |
### Most Different (diversification candidates)
| Rank | Symbol | Correlation | Why Different |
|------|--------|-------------|---------------|
| 1 | {sym} | {r} | {interpretation} |
### Recommendation
- To add exposure like {TICKER}: consider {top similar}
- To hedge {TICKER}: consider {most different}
Rules
- Always read MEMORY.md for existing holdings before analysis
- Correlation > 0.8 = redundant — flag for reduction
- Correlation < 0.2 = good diversification pair
- HRP is generally better than equal-weight for risk-adjusted returns
- Risk parity = each position contributes equal risk (good for conservative portfolios)
- Keep under 500 words