From Drawdown Nightmares to Monte Carlo Sims

I recently stumbled across another drawdown. This one especially hurt.

My supposed edge was small (approx. +1.41%), but I was convinced it was a real, so I doubled down on my stakes at around bet no 300. It didn’t take long and a downward spiral took me from +$2629 to -$3020. A $5649 drawdown in roughly 140 bets.

Brutal.

I was gutted and reverted back to my initial stakes knowing that I now must win double the amount of bets just to get back to where I started (lesson in here).

With a tiny +1.41% edge I expected lots of variance, but really that much?

I needed to know just how unlucky I ran and the best way to find out is via a Monte Carlo Simulation.

Monte Carlo simulations are a simple way to predict what might happen in uncertain situations, like games or investments. It works by running a scenario thousands of times with random tweaks (based on real data), then looking at the range of results to see probabilities, averages, and risks—kind of like rolling dice over and over to guess outcomes.

The script loads your betting data from a CSV file (with details like stakes, odds, and actual profits/losses). It first calculates real-world stats: total bets, total money wagered (turnover), actual profit, ROI (profit as a percentage of turnover), and max drawdown (biggest drop from a profit peak).

Then, it runs a Monte Carlo simulation 100,000 times: For each run, it pretends to replay all your bets, but randomly decides wins/losses based on the odds’ implied probabilities (instead of what actually happened). It tracks the simulated total profit and max drawdown for each run.

The r = random.random() line picks a random number between 0 and 1 for each bet in a simulation. This acts like a dice roll: If it’s ≤ the win probability (1 divided by the odds, e.g., 0.5 for 2.0 odds), you “win” that bet; otherwise, you “lose”. It mimics betting’s luck factor, assuming odds reflect true chances (= no-vig closing odds).

Here are the results.

Surprisingly my final bankroll of -$2345 wasn’t even THAT unlucky (14.34%) as was my drawdown of -$5649 which hits 1 in 12 times (8.39%). Not likely, but all very possible outcomes. That eased my mind somewhat.

The fact that my edge is tiny coupled with varying stakes increases variance.

Small samples, high odds, varying stakes, small edge are all things that introduce volatility. Be aware of that.

If you would like to run a simulation with your own betting data, here is a python script and a sample csv to download mcsim.

2 Replies to “From Drawdown Nightmares to Monte Carlo Sims”

  1. Great read, as always.

    How were you able to get 100k sims in 20 seconds? I was under the impression that these can take far (far) longer. I take it that’s not the case?

Leave a Reply to BettingIsCoolCancel reply