In February 2025 I had a backtest that made me feel like a genius. A grid-style EA on EURUSD, three years of M15 data, 99% modeling quality, profit factor 2.4, max drawdown 8%. I printed the report, showed it to a trading friend, and put $5,000 on a live account. By June the account was at $3,900 and I was the genius who had curve-fit his way into a slow bleed. What broke me was not the loss. It was a weekend experiment: I took the EA's 412 recorded trades, shuffled their order 2,000 times in a spreadsheet, and discovered that in 31% of those shuffled histories the strategy blew past a 25% drawdown. Same trades. Same win rate. Just a different sequence — and one in three sequences was a disaster.
That is what monte carlo simulation backtesting actually does. It does not predict your future. It shows you how lucky your single backtested history might have been. If your strategy only works when the wins arrive in exactly the order they did in 2021–2024, you do not have a strategy. You have a coincidence with a profit factor.
The Math That Kills Beautiful Backtests
The core idea fits in one paragraph. A backtest gives you one sequence of trades — the sequence that happened. But the market does not promise to replay history in the same order. Monte Carlo takes your trade list, reshuffles it thousands of times, and replays each shuffle as its own equity curve. You end up with 2,000 alternate histories instead of one, and you can measure the spread: how bad could the drawdown have been, what is the median outcome, what fraction of histories ruin the account.
The calculation engine is simple enough to build in a spreadsheet, and understanding it is the difference between trusting the output and worshipping it:
| Variable | Meaning | Example value |
|---|---|---|
| Rshuffled | One trade's return, drawn in random order from your trade list | −0.008 (a −0.8R loss) |
| Equityt | Running balance after t reshuffled trades | $4,610 after 412 trades |
| Total runs | How many shuffled histories you simulate; more is smoother | 2,000 |
| Ruin line | Drawdown level you define as failure (prop-firm daily loss, margin call) | −25% from peak |
Note the blind spot honestly: shuffling destroys the time structure of your trades. If your strategy's edge depends on trades clustering after news events, pure reshuffling understates that. Advanced versions reshuffle blocks of trades to preserve regimes. For a first pass, though, plain shuffling is brutally informative — it killed my grid EA before it killed the rest of my account. Investopedia has a decent primer on the general Monte Carlo concept if you want the statistics background.
How I Overfit a Strategy and Mistook It for Solid
Let me be specific about my February 2025 disaster, because vague "I overfit" confessions help nobody. The EA traded EURUSD M15 breakouts with a 40-pip trailing stop and a session filter. I ran the optimizer over twelve parameters — entry hour windows, ATR multiples, trailing distances — and picked the combination with the best profit factor. That is not optimization. That is asking the data to write you a love letter and then believing it.
When I finally ran the Monte Carlo on the 412-trade list, the median simulated drawdown was 19% — more than double the backtest's tidy 8%. The backtest had simply drawn a lucky sequence: its biggest losers were spread out. In a third of the shuffled histories, five or six of those losers clustered together early, and the equity curve never recovered before the next cluster arrived. The strategy's expectancy was real but thin; thin expectancies die to sequence risk.
Two mistakes compounded the damage. First, I sized positions from the backtest's average drawdown instead of the Monte Carlo's 95th-percentile drawdown — so my 1% risk per trade was calibrated to a fantasy. Second, I had no out-of-sample test; every parameter was tuned on the same data I measured on. The forward testing vs backtesting guide covers the out-of-sample discipline I now enforce before any live dollar goes in.
Two Thousand Histories, One Afternoon
Here is the actual workflow I use now, free and spreadsheet-based, tested on three strategies. Export your backtest trade list from MT5's Strategy Tester (right-click results → save report), pull the profit column into a sheet, and reshuffle with a random sort. Each reshuffled column is one simulated history; compound it and record max drawdown, final return, and whether it crossed your ruin line. Two thousand runs sounds heavy but a modern sheet does it in minutes.
| Strategy tested | Backtest drawdown | Monte Carlo median DD | Ruin % (2,000 runs) | Verdict |
|---|---|---|---|---|
| Grid EA, EURUSD M15 | 8% | 19% | 31% | Rejected — retired Feb 2025 |
| Momentum divergence, H1 | 14% | 16% | 6% | Accepted — trades live today |
| MA crossover, D1 | 22% | 24% | 12% | Accepted at half risk |
The pattern worth memorizing: strategies whose backtest drawdown and Monte Carlo median drawdown nearly match are honest strategies — their risk was visible, not hidden in sequence luck. The grid EA's 8%-vs-19% gap was the lie detector going off. My personal rule now: if ruin probability exceeds 10%, the strategy either gets de-optimized (fewer parameters, wider stops) or gets shelved.
Sizing Positions From the Ugly Percentile
Execution takeaway, and it is the whole point of the exercise: never size risk from the backtest's reported drawdown. Size from the Monte Carlo's 95th-percentile drawdown — the drawdown that was worse in only 5% of simulated histories. If your account must survive a 5% daily loss limit on a prop challenge, and the 95th-percentile drawdown at 1% risk is 12%, you know your risk per trade has to come down or your stop logic has to change before you pay the challenge fee.
Practical math I run for every strategy: take the 95th-percentile max drawdown from the simulation, divide your hard ruin line (say 20% for a personal account) by it, and scale your per-trade risk by that ratio. If the sim says 24% worst-case-ish at 1% risk and your ruin line is 20%, your risk becomes 1% × (20÷24) = 0.83% per trade. Round down to 0.75%. Boring arithmetic. It is also the arithmetic that keeps accounts alive.
One more execution rule: re-run the Monte Carlo quarterly on live trade data, not backtest data. Live fills include slippage and spread widening that the tester never shows. The historical data quality guide explains why tester fills flatter reality — and why your simulation inputs should be live trades whenever you have enough of them.
The $100,000 Challenge That Passed Because of a Spreadsheet
Concrete case study, step by step. In late 2025 I was evaluating a momentum-divergence strategy for a $100k prop challenge with a 10% overall drawdown limit and 5% daily limit. The backtest looked clean: 14% max DD over two years. I ran 2,000 Monte Carlo reshuffles anyway.
| Step | Action | Numbers |
|---|---|---|
| 1. Export | Saved 388 trades from MT5 Strategy Tester | Win rate 54%, avg R 1.6 |
| 2. Simulate | 2,000 reshuffled histories, 1% risk per trade | Median DD 16%, 95th pct 23% |
| 3. Check limits | Ruin defined as −10% overall; count breached runs | Ruin 6% of runs |
| 4. Resize | Trimmed to 0.75% risk; re-ran simulation | Ruin drops to 2.1% |
| 5. Result | Passed challenge in 31 trading days, no limit breach | Peak DD 4.2% live |
The human-value detail: the simulation said 6% ruin at 1% risk and I took the challenge anyway — because 6% is not 0%, and the resize to 0.75% bought me down to 2.1% for the cost of slightly slower profit. That trade-off, risk speed versus survival probability, is a decision a backtest alone can never show you. It only exists in the spread of simulated histories.
What a Single Backtest Hides (and Simulation Reveals)
Mechanics comparison, because the difference is structural, not cosmetic:
| Question | Single backtest answers | Monte Carlo answers |
|---|---|---|
| What happened? | One equity curve, exact history | Distribution of 2,000 possible curves |
| Worst drawdown? | The one that occurred | Median, 95th percentile, worst seen |
| Chance of ruin? | Cannot answer — one sample | Direct percentage from breached runs |
| Sequence risk? | Invisible | Visible as the spread between best and worst runs |
The honest limitation, again: simulation tests the sequence of your recorded trades, not the strategy's future edge. If market regimes shift — a strategy built for trending 2022 meets ranging 2026 — no amount of reshuffling warns you. That is what proper backtesting practices and forward testing are for. Monte Carlo is one layer of a testing stack, not the whole stack. The CFTC's website is worth a visit too, if only for its advisories on how retail trading products get marketed on backtested fantasy numbers.
Checking Your Risk Math Before You Pay for Data
Before you spend a weekend building the spreadsheet, run your strategy's core risk numbers through the DarkWolf MT5 Signal Calculator — position size from your planned stop distance, risk percentage against your account, and the drawdown math for your ruin line. It takes two minutes and catches the dumb errors (wrong pip value on JPY pairs, risk entered as dollars instead of percent) that would otherwise poison every simulation downstream.
| Input Field | What it means | Sample value |
|---|---|---|
| Account Balance | Starting equity for the simulation sizing | 100,000 |
| Risk Per Trade (%) | Fraction risked; derive this FROM the sim, not before it | 0.75 |
| Stop Loss (pips) | Your strategy's stop distance for sizing | 35 |
| Ruin Line (%) | Drawdown that ends the account or challenge | 10 |
| Simulation Runs | How many reshuffled histories to generate | 2,000 |
Get the calculator's position size, feed it into your spreadsheet sim as the fixed fractional risk, and read off the ruin percentage. If it is over 10%, go back to the drawing board before you go live. That loop — calculator, simulation, resize — is the cheapest risk management you will ever do.
Monte Carlo Simulation Backtesting: Questions I Get Asked
How many Monte Carlo runs do I actually need?
One thousand is the practical minimum — below that, the tail statistics jump around between runs and you will chase noise. Two thousand is my standard; the ruin percentage stabilizes to within about a point. Five thousand buys you smoother 99th-percentile estimates but rarely changes the verdict. I once ran 20,000 on the grid EA out of spite. The answer was the same as 2,000: dead strategy.
Does Monte Carlo work for discretionary trading?
Yes, if you have a clean trade log. The method only needs a sequence of trade returns — it does not care whether an EA or your hands produced them. I ran it on 18 months of my own manual divergence trades (143 trades) and found my live drawdown risk was about 30% higher than my journal suggested, because my journal remembered the average month and forgot the clustered losing weeks. Log honestly, simulate honestly.
What ruin percentage is acceptable?
For a personal account, I want under 10% at my planned risk. For a prop challenge with hard daily limits, under 5% — challenges do not forgive a bad sequence the way personal accounts do. Anything over 15% means the strategy is either overfit or sized too aggressively, and no amount of positive thinking fixes the arithmetic. These are my thresholds from running maybe forty strategies through the process, not industry law.
Can Monte Carlo detect overfitting?
Indirectly, and it is quite good at it. Overfit strategies have thin, fragile edges — great average numbers built on a lucky arrangement. Reshuffling breaks that arrangement, so the gap between backtest drawdown and simulated median drawdown blows up. My rule of thumb: if the Monte Carlo median drawdown is more than 1.5× the backtest drawdown, assume the parameters were tuned to the noise and start cutting inputs.
Should I reshuffle trades or randomize prices?
Reshuffling recorded trades is simpler and honest about your actual edge — it uses real fills, real spreads, real slippage. Randomizing prices (bootstrapping returns from the price series) tests the strategy logic more deeply but requires rebuilding every trade from synthetic prices, which is a real coding project. Start with trade reshuffling. Graduate to price bootstrapping only if you can code it cleanly; a buggy bootstrap lies worse than no test at all.
Why did my profitable backtest fail Monte Carlo?
Almost always sequence risk on a thin edge. Your backtest's wins were conveniently spread out; the simulation shows what happens when they cluster badly. Common culprits: martingale-style sizing hidden in the logic, stops too tight for the pair's volatility (so losses cluster in volatile regimes), or twelve optimized parameters fitting 400 trades. The fix is usually fewer parameters and wider stops, not more optimization.
Is Monte Carlo better than forward testing?
They test different things, so "better" is the wrong frame. Monte Carlo stress-tests the sequence risk of your historical edge in an afternoon. Forward testing checks whether the edge still exists in current market regimes — but it takes months. I run Monte Carlo first (cheap, fast, kills the obvious corpses) and forward-test only the survivors. Skipping either one is how February 2025 happened to me.