# Portfolio Risk

> Analyzes portfolio risk and performance metrics. Computes Value at Risk (VaR), Sharpe ratio, Sortino ratio, beta, correlation matrices, drawdown analysis, and position sizing recommendations. Trigger when the user requests risk analysis, portfolio optimization, or performance attribution.

- Skill: `lisonevf/portfolio-risk` (Agent Skill)
- Install (CLI): `npx skillmds@latest add lisonevf/portfolio-risk`
- Raw SKILL.md: https://api.skillmd.com/api/skills/lisonevf/portfolio-risk/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Coding & Dev Tools
- Author: lisonevf (https://skillmd.com/u/lisonevf)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/lisonevf/portfolio-risk

---


# Portfolio Risk

Analyzes portfolio risk and recommends position sizing and diversification.

## Real Code Reference

- `tradinglearn/backtest/backtester.py` — `Backtester._calculate_performance()` computes Sharpe, max drawdown, win rate, total return, CAGR
- `tradinglearn/utils/parameter_optimizer.py` — `plot_optimization_results()` heatmaps: return, Sharpe, drawdown, win rate
- `tradinglearn/pytdx2/backtest.py` — `BacktestEngine` tracks per-trade P&L for risk analysis

## Risk Metrics

- **VaR**: historical simulation, parametric, Monte Carlo
- **CVaR (Expected Shortfall)**: average loss beyond VaR
- **Maximum Drawdown**: peak-to-trough with recovery duration
- **Volatility**: annualized std of returns

## Performance Metrics

- **Sharpe Ratio**: (R - Rf) / sigma
- **Sortino Ratio**: downside-only volatility
- **Calmar Ratio**: annual return / max drawdown
- **Information Ratio**: active return / tracking error

## Portfolio Analysis

- Correlation matrix between holdings
- Beta to market benchmark
- Position concentration (Herfindahl index)
- Risk parity weights

## Usage

```python
from backtest.backtester import Backtester

bt = Backtester(initial_capital=100000.0)
bt.run_backtest(data, MyStrategy, params)
perf = bt.get_performance()
# {'total_return': 0.15, 'annual_return': 0.12, 'sharpe_ratio': 1.2,
#  'max_drawdown': -0.08, 'win_rate': 0.55, 'total_trades': 42}
portfolio = bt.get_portfolio()
# DataFrame with: portfolio_value, position, cash, returns
```

