Skip to content
TraderCalcs.io

Monte Carlo Trading Simulator

Resample a strategy's win rate and payoff many times to see the range of equity curves it could plausibly produce.

A trading record is one sequence. The winners landed where they landed, in one order, and it is the only ordering that will ever be observed — which makes it a poor guide to how wide the range of plausible outcomes actually was. Monte Carlo simulation of trading results is the standard way of recovering that range, and this Monte Carlo Trading Simulator does it by taking the win rate and the two averages from that record and dealing them out again, thousands of times, into thousands of different orders.

Formula: simulates many independent sequences from the entered win rate and payoff

Your figures

The share of trades that finish as winners, measured from your own record.

Net of costs, as a positive amount.

Also as a positive amount. These two set the payoff ratio; the sizing below sets the scale.

Percentage sizing risks a share of the running balance, so wins and losses compound. A fixed amount risks the same cash on every trade whatever the balance has done since.

Used with percentage sizing: the share of the running balance risked on each trade.

Used with fixed sizing: the same cash risked on every trade, regardless of the balance.

How many trades each simulated sequence runs for.

More sequences give steadier percentiles. Very long sequences are run fewer times so the work stays bounded, and the count actually used is reported with the results.

Measured from the starting balance, not from the sequence's own peak — a run that doubles and then halves has lost 50% from its peak but nothing from where it started. A sequence that touches this level is counted even if it recovers afterwards.

Optional. Every seed is a different set of draws and the same seed always gives the same answer, so changing it re-rolls the experiment without making the figures unrepeatable.

Simulation results

Median final balance

US$31,604.96

+26.42% on the starting capital, after 200 trades

Middle 90% of outcomesThe 5th and 95th percentile final balances: one sequence in twenty finished below the lower figure and one in twenty above the upper.
US$23,430.69 to US$42,630.99
Sequences that reached the ruin levelAny sequence whose balance touched US$17,500.00 at any point, whatever it went on to finish at.
0.0%
Sequences that finished in profitAbove the starting capital at the final trade.
89.6%
Median worst drawdownThe middle sequence's own largest peak-to-trough decline. Half of the sequences fell further than this at some point.
11.5%
Worst and best final balanceThe two extremes across every sequence run. Both are single draws, so they move about far more between runs than the percentiles do.
US$17,809.25 to US$61,970.94
Mean final balanceThe plain average. It sits above the median whenever a handful of sequences compound a long run of winners, which is why the median is the headline figure.
US$32,028.19
Expectancy per tradeIn multiples of the amount risked: win rate x payoff, less the loss rate. It follows from the three figures entered, not from the simulation.
+0.125 R
Payoff ratioThe average win divided by the average loss.
1.50 : 1
Sequences run
1,000

What this means

Each sequence draws 200 independent trades from the distribution entered — a winner 1.50 times the size of a loser, 45% of the time — and stakes 1.00% of the running balance on each of them. Across 1,000 of those sequences the middle outcome was US$31,604.96, 89.6% finished above the starting capital and 0.0% touched the ruin level. The gap between the 5th and 95th percentile is the whole point of running it: the same edge, sized the same way, produced every balance in that range. What you are reading is the spread of the distribution you entered, not a forecast of what the next 200 trades will do.

  • Every trade is drawn independently of the last. Real wins and losses cluster, and clustered losses produce deeper drawdowns than independent draws ever will.
  • Every winner is the average winner and every loser the average loser. A real record has a spread of sizes around both, and the one loss that does not fit the average is usually the one that matters.
  • The win rate and the two averages are treated as known. They are estimates from a sample, and a 45% win rate measured over forty trades is entirely consistent with a 35% one.
  • A sequence that breaches the ruin level is recorded and then carries on, so every sequence contributes a final balance at the same trade count. Only a balance reaching zero ends its sequence early.
  • With percentage sizing each loss takes a share of what is left, so the balance approaches zero without ever reaching it. The ruin threshold is what marks the account as finished.
  • The draws come from a seeded generator, so the same inputs always produce the same figures and a shared link shows the recipient exactly what you saw.

Median final balance: US$31,604.96

The link reopens this calculator with the same numbers. Nothing you enter is sent to a server.

About the Monte Carlo Trading Simulator calculation

Each simulated sequence starts from the capital entered and runs for the trade count set, drawing a winner with the entered probability and a loser otherwise. Sizing is a choice: a percentage of the running balance, which compounds, or a flat cash amount, which does not. What comes back is a distribution rather than a number — a median final balance, a 5th and 95th percentile, the worst and best sequences, the median worst drawdown, and the share of sequences that touched a decline you have named as ruin, the last two making this as much a drawdown probability simulator as a projection of final balances.

The band between the 5th and 95th percentile is the figure worth carrying away. The same edge, sized the same way, produces every balance inside it, and over a few hundred trades that band is usually wide enough to contain both a run that looks like a broken strategy and a run that looks like genius. Reading it is the cheapest available protection against concluding too much from one equity curve, which is the whole job of an equity curve simulator.

Nothing here is fetched or assumed. Every figure this trading simulation calculator produces comes from a field on the page, and the only account the output describes is the one whose numbers were typed in.

Monte Carlo Trading Simulator formula

for each of N sequences:
  balance = starting capital
  repeat for the trade count:
    stake  = balance × risk %          (percentage sizing)
           = the cash amount entered   (fixed sizing)
    payoff = average win ÷ average loss
    win  → balance += stake × payoff
    loss → balance −= stake
    if balance ≤ ruin level → record a breach, carry on
    if balance ≤ 0          → record a wipe-out, stop

ruin level     = starting capital × (1 − ruin threshold %)
expectancy (R) = (win rate × payoff) − (1 − win rate)

from the N final balances, sorted ascending:
  median          = the 50th percentile
  middle 90%      = the 5th to the 95th percentile
  profitable runs = share finishing above the starting capital
  ruin runs       = share that touched the ruin level at any point
payoff
The average win divided by the average loss — what a winner returns for what a loser costs. Only the ratio of the two averages affects the simulation, never their absolute size.
stake
The cash put at risk on one trade. With percentage sizing it moves with the balance; with fixed sizing it never changes.
ruin level
The balance the entered drawdown threshold corresponds to. A sequence that touches it is counted even if it recovers afterwards.
expectancy (R)
The average result per trade in multiples of the amount risked. It follows from the three entered figures alone and does not depend on the simulation at all.
percentile
The value below which that share of sequences finished, read from the sorted list by linear interpolation between neighbouring outcomes.

The two averages and the sizing do different jobs, and separating them is what makes the simulation useful rather than circular. The averages set the shape of the distribution — a winner is always the payoff ratio times whatever was staked — while the sizing sets the scale. Enter a fixed cash amount equal to your average loss and the run reproduces your own cash figures exactly; switch to percentage sizing and the identical shape compounds instead, which is the whole point of being able to compare the two.

The median is the headline figure rather than the mean because compounded outcomes are skewed to the right. A handful of sequences that happen to string together a long run of winners drag the arithmetic average upwards, so the mean sits above a balance that most sequences never reach. The median is simply the middle sequence: half finished above it and half below, and it is not moved by how spectacular the best few were.

Percentiles are read from the sorted list by the same linear interpolation Excel's PERCENTILE.INC and R's default quantile use, so the 5th percentile means the same thing here as it does in the historical value-at-risk calculator. The band deliberately stops short of the tails. The single worst and single best sequences are individual draws and move about far more between runs than the 5th and 95th do, which is why they are reported separately rather than as the headline range.

Every draw comes from a seeded generator, so identical inputs always produce identical figures and a shared link shows the recipient exactly what the sender saw. The seed field re-rolls the entire experiment without making it unrepeatable, which is the honest way to check whether a result you like is a property of the inputs or of one particular set of draws.

Long sequences are run fewer times than short ones, because the work is done synchronously on every keystroke and the total number of simulated trades has to stay bounded. The count actually used is always reported next to the count requested, so a reduced run is never hidden.

Monte Carlo Trading Simulator: a worked example

A $20,000 account winning 40% of trades, averaging $600 on a winner against $300 on a loser, risking 1.5% of the running balance across 150 trades, with a 25% decline counted as ruin and 5,000 sequences run. Every one of those eight figures differs from the ones the page opens with, so type them in to reproduce the results below — deliberately a lower win rate and a higher payoff than the defaults, to show that the spread of outcomes is wide even where the expectancy is clearly positive. The generator is seeded, so the same inputs give the same figures every time.

  1. Payoff ratio600 ÷ 300 = 2.00 : 1
  2. Expectancy per trade(0.40 × 2.00) − 0.60 = +0.200 R
  3. Ruin level20,000 × (1 − 25%) = $15,000
  4. Median final balance$30,235.99, or +51.18%
  5. Middle 90% of outcomes$19,342.57 to $47,264.40
  6. Worst and best sequence$11,316.25 to $80,787.86
  7. Sequences finishing in profit94.1%
  8. Sequences that touched $15,0002.1%
  9. Median worst drawdown15.7%

The middle sequence finished at $30,235.99, up 51.18% on the starting capital. But one sequence in twenty ended below $19,342.57 — a losing account after 150 trades at a clearly positive expectancy — and one in twenty above $47,264.40. Around one sequence in fifty touched the $15,000 ruin level along the way. Every one of those accounts was produced by exactly the same edge, sized in exactly the same way.

How to use the Monte Carlo Trading Simulator

  1. Enter the starting capital and the win rate from your own record. The win rate is the share of closed trades that finished as winners, not the share that were in profit at some point.
  2. Enter the average winner and the average loser as positive amounts, both net of costs. Only their ratio affects the simulation, so a record kept in R multiples can be entered as, say, 2 and 1.
  3. Choose the sizing. Percentage risks a share of the running balance and compounds both ways; a fixed cash amount risks the same whatever the balance has done since.
  4. Set the trades per sequence to roughly what you place over the horizon you care about, and set the ruin threshold to the decline that would genuinely end your participation rather than to a round number. That decline is measured from the starting balance, not from each sequence's own peak, and a sequence that touches the level is counted even if it recovers — the figure reported is the share of sequences that ever reached it.
  5. Read the 5th-to-95th band before the median. The median is one outcome; the band is what this edge can plausibly produce.
  6. Change the seed and run it again. If the picture moves materially, raise the sequence count until it settles.

Limitations of the Monte Carlo Trading Simulator

Every calculation makes assumptions. These are the ones that matter here.

  • Every trade is drawn independently of the last. Real wins and losses cluster, and clustered losses produce deeper drawdowns than independent draws ever will, so the drawdown figures here are optimistic rather than conservative.
  • Every winner is the average winner and every loser the average loser. A real record has a spread of sizes around both, and the outsized loss that does not fit the average is usually the one that decides the outcome.
  • The win rate and the two averages are treated as known. They are estimates from a sample: a 40% win rate measured over forty trades is entirely consistent with a true rate of 30%, and none of that uncertainty reaches the output.
  • Nothing models a strategy that stops working. The distribution is fixed for the whole sequence, whereas a real edge decays, reverses or vanishes when the conditions that produced it change, and it does not announce that it has.
  • Costs are not deducted anywhere. Enter both averages net of commission, spread, slippage and financing, or every figure on the page describes a gross account that nobody trades.
  • The percentiles themselves carry sampling error. Two runs of 500 sequences will visibly disagree; by 10,000 they settle down, and that stability is the only thing a higher sequence count buys.

Frequently asked questions about Monte Carlo Trading Simulator

Why is the range of outcomes so wide when the expectancy is positive?

Because 150 trades is a small sample, and the order they arrive in compounds. A positive expectancy says the average trade adds to the account; it says nothing about the variance around that average, and over a few hundred draws the variance dominates. Narrowing the band requires more trades or a smaller stake, not a better edge.

Are the results the same every time I open the page?

Yes. The generator is seeded with a fixed constant, so identical inputs always produce identical figures and a shared link shows the same picture to whoever opens it. Entering a different seed re-rolls every draw while keeping that reproducibility, which is what makes it useful for testing whether a result is robust.

How does a Monte Carlo trading calculator handle percentage versus fixed sizing?

Percentage sizing stakes a share of the running balance, so wins compound and losses shrink the next stake, which is why an account can approach zero without reaching it. A fixed cash amount stakes the same figure regardless, so the account can be wiped out outright and a sequence that reaches zero ends there. The two produce noticeably different distributions from identical win rates and payoffs.

Why does the mean final balance sit above the median?

Because compounding is multiplicative and its distribution is skewed right. A sequence cannot lose more than everything, but it can multiply without a ceiling, so a small number of very good sequences pull the arithmetic mean upwards. The median is unaffected by how extreme those outliers are, which is why it is the headline rather than the mean.

Does a low percentage of ruined sequences mean the strategy is sound?

No. It means that under these assumptions — independent trades, fixed win rate, every winner the same size — few sequences touched the level entered. The assumptions are all optimistic in the same direction, and a figure calculated from a small record inherits the uncertainty of the record. Treat it as a floor on the real risk rather than a measurement of it.

How many trades and how many sequences should I run?

Set the trade count to the horizon you actually care about, since the distribution widens with length and a 1,000-trade answer is not relevant to someone placing 80 trades a year. For sequences, more is steadier: 500 gives percentiles that visibly move between seeds, while 10,000 gives figures stable to the second decimal. Long sequences are automatically run fewer times to keep the work bounded.

Last reviewed . See our methodology and editorial policy.

More performance calculators