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
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions