Skip to content

Portfolio-level Monte Carlo with correlated drawdowns #530

@MDUYN

Description

@MDUYN

Context

The current multi-strategy comparison report handles correlated drawdowns partially:

  • Computes a correlation matrix across strategy returns
  • Overlays equity curves and drawdowns on a shared timeline
  • Surfaces beat-rate vs. benchmarks (Buy & Hold, DCA, risk-free, custom)

This lets users see when strategies draw down together, but Monte Carlo / permutation testing today still runs at the individual strategy level. The result is per-strategy tail-risk distributions, not a portfolio-level tail-risk distribution.

Goal

Add a joint Monte Carlo mode that resamples the correlated return matrix of multiple strategies together, producing:

  • Distribution of portfolio equity curves
  • Distribution of portfolio max drawdown / CVaR / Calmar
  • Probability of joint drawdown exceeding a user-defined threshold
  • Confidence bands on portfolio metrics

Approaches to evaluate

  1. Stationary block bootstrap on the joint return matrix (preserves serial correlation + cross-correlation)
  2. Cholesky-decomposed shuffles of standardized returns (preserves linear cross-correlation, breaks serial)
  3. Copula-based resampling (e.g. Gaussian / t-copula) — preserves dependency structure with arbitrary marginals
  4. Hybrid: block bootstrap for serial structure + copula for cross-sectional dependence

Acceptance criteria

  • New API on the multi-strategy comparison level (e.g. compare_strategies(..., monte_carlo=PortfolioMC(...)))
  • At least one resampling method implemented end-to-end (stationary block bootstrap is the pragmatic starting point)
  • Results integrated into the HTML report: portfolio equity fan chart, drawdown distribution, joint tail-risk metrics
  • Documented assumptions and limitations of each method

Out of scope (separate issue)

  • Regime-conditional resampling (volatility clustering) — tracked separately

Notes

Community feedback on the 1k-stars LinkedIn post suggested this is one of the most-requested capabilities for serious EA / multi-strategy portfolio work. Input on preferred resampling method is welcome.

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions