Skip to main content
AI Fin Hub

Calculator

Drawdown-Recovery Markov Simulator

Time to recover from an N% drawdown given monthly Sharpe + skew + kurtosis. Cornish-Fisher Monte Carlo, percentile distribution of recovery months.

Runs in your browser. Nothing you enter is uploaded, and no account or API key is needed.

Education, not investment advice. Past performance does not predict future results. How we check our numbers.

Inputs

Monthly Sharpe

Mean monthly return / monthly volatility. 0.30 ≈ 1.04 annualized (× √12).

Monthly volatility

4% a month ≈ 13.9% a year. At the same Sharpe, higher volatility recovers faster.

Monthly skew γ₃

0 = symmetric; negative = more large losses than large gains.

Excess kurtosis (γ₄ − 3)

0 = normal tails; positive = fat tails.

Drawdown to recover from

Each path starts this far below its peak.

Paths
Simulation horizon

Paths still under water at the horizon count as not recovered.

Same inputs + same seed = same result.

Median recovery (months)

17

Months to regain the peak from a 20% drawdown, across 2,000 simulated paths of i.i.d. monthly returns. One path in twenty takes longer than 55 months.

Recovery distribution (months)

25th percentile

11

fast paths

Median

17

75th percentile

27

slow paths

95th percentile

55

tail

Path outcomes

Recovered within 12 months

30.3%

607 of 2,000

Not recovered within 240 months

0.00%

Counted as longer than the horizon in every percentile

Reading the result

Each path starts at the drawdown and compounds monthly returns r = μ + σ·q, where μ = Sharpe × σ and q is a standard-normal draw reshaped by the Cornish-Fisher expansion for your skew and kurtosis, then rescaled to unit variance so the simulated Sharpe equals your input. Recovery takes roughly ln(1 / (1 − drawdown)) / (μ − σ²/2) months on average; negative skew and fat tails stretch the slow end. Returns are independent month to month, so regime persistence in real strategies makes true recoveries longer.

How to use it

  1. Enter your strategy's monthly Sharpe and monthly volatility (4% a month is about 14% a year), plus the skew and excess kurtosis of its monthly returns.
  2. Set the drawdown to recover from (for example 20%), the number of paths and the simulation horizon in months.
  3. Read the median recovery and the 25th, 75th and 95th percentiles in months. A percentile shown as 'more than' the horizon means that share of paths had not recovered when the simulation stopped.
  4. Compare the 95th percentile with the longest drawdown you would sit through. If it is longer, the strategy is too risky at this size or needs a tighter kill switch.
  5. Change the seed to check that the result is stable, and sweep the drawdown and volatility: at the same Sharpe, deeper drawdowns and lower volatility both lengthen recovery.

Questions people ask

Why use a Markov chain to model drawdowns?

The model is a Markov process in the simple sense: each month's equity depends only on the previous month's equity and a fresh random return. It does not estimate drawdown-state transition probabilities from your equity curve. Every path starts at the drawdown you choose and compounds independent monthly returns with your Sharpe, volatility, skew and kurtosis until it regains the peak or hits the horizon.

What's the recovery time output?

Months from the bottom of the drawdown back to the prior peak, summarized as the 25th, 50th, 75th and 95th percentiles across all simulated paths, plus the share recovered within 12 months and the share still under water at the horizon. Paths that never recover count as longer than the horizon, so a percentile can read 'more than 240'.

How many observations do I need?

None: the tool takes summary statistics, not an equity curve. Estimate monthly Sharpe, volatility, skew and excess kurtosis from your own returns; with fewer than about 60 monthly observations those estimates, especially skew and kurtosis, are noisy, so try a range of values. More simulated paths reduce simulation noise, not estimation error.

Does it work for trend-following systems?

Only partly. Trend-followers have long losing stretches followed by sharp gains, which is serial dependence; the simulation draws each month independently, so it captures the skew and fat tails you enter but not the clustering. Treat its recovery times as a lower bound for strategies whose bad months come in runs.

What's the difference between this and Monte Carlo on returns?

It is a Monte Carlo on returns: i.i.d. monthly draws from a distribution shaped by the Cornish-Fisher expansion for your skew and kurtosis and rescaled so the simulated Sharpe and volatility equal your inputs. Compared with a historical bootstrap it can produce losses your sample never saw, but it cannot reproduce volatility clustering or regime persistence, which make real recoveries longer.

Guides, formulas and worked examples

  • Calculators Kelly Criterion Calculator

    Size positions with full, half, quarter, or eighth Kelly and stress-test the choice with a drawdown Monte Carlo simulator. Client-side. Private by default.

  • Calculators Position Sizing under Edge Variance

    Bayesian-Kelly bet sizing when your edge is itself uncertain. Compare deterministic Kelly, Bayesian-adjusted, and conservative lower-bound versions.

  • Calculators Returns Distribution Analyzer

    Paste a returns CSV. Histogram, normal QQ plot, skewness, excess kurtosis, Jarque-Bera test, tail-weight index. See why Sharpe alone misleads.

  • 9 min read How to Read a Backtest Report: 2026 Cheat Sheet

    Five questions a backtest report must answer — edge real, persistent, cheap to trade, bearable, explainable — with the statistics that verify each.

  • 10 min read Retail PnL vs Backtest

    The eleven-point gap between a 14% backtest and 3.2% live PnL, decomposed across eight mechanisms with dollar examples — slippage, latency, fees, fills.

  • 11 min read Drawdown Markov: Recovery Tails Explained

    Canonical input yields p95 = 39 months recovery on a 25% drawdown threshold — the kill-switch parameter most backtest reports omit entirely.

All articles

Use it from code

The same calculation as a JavaScript module you can import. It runs where you import it, with no request, key or rate limit.

import { compute } from "https://aifinhub.io/engines/drawdown-recovery-markov.js";

Input and output contract and the guide for agents.