Skip to content

feat: Add comprehensive risk metrics to simulation results - #188

Merged
ch55secake merged 4 commits into
mainfrom
copilot/add-risk-metrics-to-simulation-results
Apr 20, 2026
Merged

feat: Add comprehensive risk metrics to simulation results#188
ch55secake merged 4 commits into
mainfrom
copilot/add-risk-metrics-to-simulation-results

Conversation

Copilot AI commented Apr 19, 2026

Copy link
Copy Markdown
Contributor

Description

The simulation returned only basic metrics (final value, return, buy-and-hold, trade count), insufficient to evaluate risk-adjusted strategy quality. This adds 11 standard risk metrics computed from the portfolio history and trade log.

Changes in this pull request

New: src/simulation/risk_metrics.py

  • RiskMetrics dataclass with 11 fields; any field is None when there's insufficient data
  • compute_risk_metrics(portfolio_history, trades, total_return) computing:
    • Sharpe / Sortino — annualised, risk-free rate = 0; Sortino uses downside std dev only
    • Max drawdown — peak-to-trough fraction; drawdown duration — consecutive days below prior peak
    • Calmar ratio — annualised return / |max drawdown|
    • Win rate, profit factor, avg win/loss ratio — derived from pnl_pct per trade
    • Annualised volatility — daily return std dev × √252
    • VaR (95%) — 5th percentile of daily portfolio returns
    • Beta to benchmark — cov(strategy returns, price returns) / var(price returns)

Modified: src/simulation/trading_simulator.py

  • simulate() calls compute_risk_metrics() at the end; result exposed under "risk_metrics" key

Modified: src/simulation/__init__.py

  • Exports RiskMetrics and compute_risk_metrics

New: tests/simulation/test_risk_metrics.py

  • 32 tests: edge cases (empty/single-row → all None), known-value assertions, sign checks, and integration tests on simulate() output
result = sim.simulate(predictions, actual_returns, prices=prices, dates=dates)
rm = result["risk_metrics"]  # RiskMetrics instance
print(rm.sharpe_ratio, rm.max_drawdown, rm.win_rate)

- Add RiskMetrics dataclass and compute_risk_metrics() in src/simulation/risk_metrics.py
  computing 11 metrics: Sharpe, Sortino, max drawdown, drawdown duration, Calmar,
  win rate, profit factor, avg win/loss ratio, annualised volatility, VaR (95%), beta
- Update TradingSimulator.simulate() to call compute_risk_metrics() and return
  results under the 'risk_metrics' key
- Export RiskMetrics and compute_risk_metrics from src/simulation/__init__.py
- Add tests/simulation/test_risk_metrics.py with 32 tests covering all metrics

Agent-Logs-Url: https://github.com/ch55secake/hyperion/sessions/481852c7-cde7-4c10-a0da-0dc8ac3e165a

Co-authored-by: ch55secake <87881861+ch55secake@users.noreply.github.com>
Copilot AI changed the title [WIP] Add comprehensive risk metrics to simulation results feat: Add comprehensive risk metrics to simulation results Apr 19, 2026
Copilot AI requested a review from ch55secake April 19, 2026 23:09
@ch55secake
ch55secake marked this pull request as ready for review April 20, 2026 09:16
@ch55secake
ch55secake merged commit 3f428f1 into main Apr 20, 2026
8 checks passed
@ch55secake
ch55secake deleted the copilot/add-risk-metrics-to-simulation-results branch April 20, 2026 19:48
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Feature: Add comprehensive risk metrics to simulation results

2 participants