You backtest a strategy. The equity curve climbs steadily. Drawdowns look manageable. You size up and go live. Three months later, you hit a losing streak that never appeared in the backtest, and your account is down 30%. The backtest was not wrong. You just saw one path through the data and assumed it was the only one.
Monte Carlo equity curves fix that blind spot. Instead of relying on a single historical sequence of trades, you reshuffle the same results thousands of times to generate thousands of possible equity paths. Each path represents a different order in which those wins and losses could have arrived. The spread of outcomes tells you what your strategy might actually feel like to trade, not just what it happened to do on one pass through history.
If you have already worked through how expectancy and R-multiples quantify edge, Monte Carlo simulation is the natural next step. Expectancy tells you the average gain per unit of risk. Monte Carlo tells you how bumpy the ride gets between here and that average.
What Monte Carlo Simulation Does for Traders
The core idea is resampling. Take your completed trade list, whether from a backtest or live track record, and randomly reorder the sequence. Run the equity calculation on that new order. Repeat 1,000 or 10,000 times. Each pass produces a different equity curve with a different maximum drawdown, a different peak-to-trough timing, and a different ending balance.
The result is a distribution, not a point estimate. Instead of saying “my strategy had a 15% max drawdown,” you can say “across 5,000 simulations, the median max drawdown was 18%, the 95th percentile was 29%, and the worst case was 41%.” That second statement is far more useful for setting position size and deciding whether you can stomach the strategy at all.
I run Monte Carlo on every strategy before allocating real capital. The single biggest surprise is how often a strategy with a “clean” backtest equity curve produces 95th-percentile drawdowns that are double the backtest max. That gap between what happened and what could have happened is where accounts blow up.
Inputs You Need for a Monte Carlo Test
You need a trade list. Each row is one closed trade with at least a profit/loss figure. Better inputs include the R-multiple per trade (profit or loss divided by the initial risk), because R-multiples let you test different position sizes without re-running the simulation from scratch.
From that trade list, the simulation extracts a win rate and a payoff distribution. Win rate alone is not enough. Two strategies with a 50% win rate can have wildly different Monte Carlo profiles if one wins 1R and loses 1R while the other wins 3R and loses 1.5R. The full distribution of outcomes matters, not just the average.
The number of simulations controls how stable the output is. At 100 runs, the tails are noisy. At 1,000, percentile estimates settle down. I use 5,000 as a default. Going higher costs compute time but rarely changes the 95th-percentile number meaningfully beyond 5,000 runs.
The simulation length matters too. If your trade list has 200 trades, each reshuffled path is 200 trades long. Shorter lists produce wider confidence bands because there is less data to resample. If you have fewer than 30 trades, the Monte Carlo output is unstable enough that I would not trust it for sizing decisions.
How the Reshuffling Works
The simplest version is sampling with replacement. For each simulated equity curve, you draw N trades randomly from your trade list (where N equals the number of trades in the original list), allowing repeats. This approach captures the win rate and payoff distribution without assuming the exact set of trades will repeat.
The alternative is sampling without replacement, which is a pure shuffle. Every trade from the original list appears exactly once per simulation, just in a different order. This preserves the exact composition of wins and losses but only randomises sequencing.
Both methods assume trade independence. That is the biggest limitation and the one most people ignore. If your strategy clusters winners during trending markets and losers during chop, the real-world sequence has serial correlation that a random reshuffle destroys. Monte Carlo does not model regime effects. It tells you what would happen if trade outcomes arrived in random order. For trend-following systems, this means Monte Carlo drawdown estimates may actually be conservative during regime transitions and optimistic during sustained trends.
I have seen traders treat Monte Carlo output as if it captures every possible risk. It does not. It captures sequencing risk only. Market structure risk, correlation breakdown, liquidity gaps, and regime shifts are outside its scope.
Reading the Output: Drawdown Ranges and Risk of Ruin
The primary output is a drawdown distribution. You want the median, the 75th percentile, the 95th percentile, and the maximum across all simulations. The 95th percentile is the number I size against. If I cannot tolerate a drawdown that large, I reduce position size until I can.
Risk of ruin is the percentage of simulations that hit a predefined loss threshold. If you set ruin at a 50% account drawdown and 3% of 5,000 simulations reach it, your risk of ruin is 3%. That sounds low until you realise it means roughly 1 in 33 possible trade sequences wipes out half your account. Whether that is acceptable depends on your situation. For most retail traders, anything above 1% risk of ruin at a 50% drawdown level should trigger a position-size reduction.
Losing-streak distributions are equally revealing. Your backtest might show a maximum of 7 consecutive losers. Monte Carlo might show a 95th-percentile losing streak of 12. That difference matters for psychology and for any rules you have around pausing a strategy after a streak. If you planned to stop trading after 8 losers in a row, the Monte Carlo output tells you whether that cutoff gets triggered by normal variance or only by genuine strategy failure.
The concept ties directly into hard drawdown stops that protect capital. Monte Carlo output gives you the data to set those stops at levels that distinguish bad luck from broken strategy.
Position Sizing with Monte Carlo Confidence Bands
Here is where the simulation earns its keep. Run Monte Carlo at your current position size. Read the 95th-percentile drawdown. If it exceeds your tolerance, cut size. Rerun. Repeat until the 95th-percentile drawdown sits inside your pain threshold.
Suppose your strategy trades at 2% risk per trade and the Monte Carlo 95th-percentile max drawdown is 35%. You are not comfortable with 35%. Drop to 1% risk per trade. The drawdown percentiles roughly halve (not exactly, because compounding is nonlinear, but the scaling is close for small sizes). Now the 95th percentile might land near 19%. That is a number you can live with.
This process is more rigorous than picking a position size by gut feel or by applying a fixed Kelly Criterion fraction. Kelly gives you the theoretically optimal size for maximum geometric growth. Monte Carlo shows you what that size actually feels like in terms of drawdown variance. Most traders who run both discover that full Kelly produces drawdowns they cannot tolerate, which is why fractional Kelly (half or quarter Kelly) is common in practice.
Ralph Vince’s position sizing research formalised much of this thinking. His optimal-f framework and the concept of the “leverage space portfolio” both rely on resampling trade distributions to find sizing that maximises terminal wealth without crossing ruin thresholds.
Common Mistakes That Ruin Monte Carlo Results
The first mistake is running Monte Carlo on curve-fitted backtest results. If your backtest is over-optimised, the trade list is unrealistically good, and reshuffling unrealistic trades 5,000 times still produces unrealistic output. Monte Carlo does not fix a bad backtest. It only tells you what the range of outcomes looks like given the trades you feed it. Garbage in, confidence intervals around garbage out. Run walk-forward analysis to validate parameter stability before feeding results into a Monte Carlo simulation.
The second mistake is ignoring the independence assumption. If your strategy takes multiple positions simultaneously and they are correlated, treating each trade as independent underestimates drawdown risk. A portfolio of five correlated trend-following positions can gap down together. Monte Carlo on individual trades will not catch that because it reshuffles each trade independently.
The third mistake is using too few trades. With a 20-trade sample, the win rate estimate alone has a wide confidence interval, and resampling that small set produces output that swings wildly between runs. If running the same Monte Carlo twice gives meaningfully different 95th-percentile numbers, your sample is too small.
The fourth mistake is treating the output as a hard boundary rather than an estimate. The 95th-percentile drawdown is a statistical construct. Real markets can produce outcomes worse than anything in your simulation because the simulation only reshuffles what already happened. Black swan events, flash crashes, and overnight gaps are not in the trade list and therefore not in the Monte Carlo output.
Running Monte Carlo Without Code
You do not need to write Python to run a basic Monte Carlo simulation. A spreadsheet works for simple versions. Export your trade list as a column of R-multiples. Use a random-sort formula to reshuffle the column. Calculate cumulative equity. Record the max drawdown. Repeat with a new random sort. After 100-200 manual iterations (or with a macro), you have a usable drawdown distribution.
Dedicated tools handle this more efficiently. Most backtesting platforms that produce a trade list can feed it into a Monte Carlo module. The specifics vary by platform, but the input is always the same: a list of trade results, a number of simulations, and sometimes a starting account balance and risk-per-trade parameter.
If you do write code, the logic fits in roughly 20 lines. Shuffle the trade array, compute the running equity, record the max drawdown, repeat in a loop, and plot the percentile bands. The maths is not complex. The value is in the habit of doing it before every live deployment.
When Monte Carlo Is Not Enough
Monte Carlo resampling assumes stationary trade statistics. Your win rate, average win, and average loss stay constant across the simulation. In reality, strategies degrade. Market regimes shift. A strategy that won 55% of the time over the past two years might win 45% over the next six months as the regime changes.
One partial fix is running Monte Carlo on subsets of your data, such as the most recent 100 trades versus the full 500. If recent performance is worse, the Monte Carlo on the recent subset will show wider drawdown bands. That gives you a more conservative estimate.
Another limitation: Monte Carlo tells you nothing about why a strategy failed. If every simulation shows acceptable drawdowns but the strategy still loses money live, the problem is not sequencing. It is execution, slippage, changed market conditions, or something else Monte Carlo does not capture.
Use it as one layer in a validation stack, not the whole stack. Backtest, walk-forward test, Monte Carlo resample, then paper trade. Each layer catches different failure modes.
What the Simulation Should Change About Your Trading
After running Monte Carlo on a few strategies, your relationship with drawdowns changes. You stop being surprised by losing streaks because you have already seen thousands of possible streak lengths in the simulation. You size positions based on what you can actually survive, not what the single best backtest path suggests.
The biggest practical shift is that you stop treating the backtest equity curve as a promise. It is one sample from a distribution. Monte Carlo shows you the distribution. Trade the distribution, not the sample.
Educational content only. Not investment advice. Trading involves risk. You are responsible for your decisions.
