CasinoLove logo

How the Martingale betting strategy works

Promises sure victory in theory, but we put the Martingale betting strategy to a practical test. Does doubling down work? Review with simulations and video.

The Martingale method originated in 18th-century France and remains one of the most well-known betting strategies to this day. Its popularity can be attributed to three things:

How it works in roulette?

As we know, in roulette we can bet on whether the ball will land in a red or black slot. If we guess correctly, we win an amount equal to our bet, meaning if the bet is $100, then the winnings are also $100 (along with the bet, it totals $200, which we get back).

Let's assume that we bet $100 on red. According to the Martingale strategy, if we lose the bet, we double the stake in the next round, that is, we put $200 on red. This ensures that if red wins, we recover the $100 lost in the first round, and we also gain an extra $100. If black were to win again, we would once again double the stake, placing $400 on red. Essentially, we keep doubling our bet on red until it comes up. Once it does, we can restart the process, resetting the base bet back to $100.

Practical limitations

In practice, this method is mainly limited by two factors:

  1. We don't have an infinite amount of money at our disposal. If we're very unlucky, we could lose bets over a long series, and eventually, we won't have enough to recover our losses. It's important to note that there have been recorded instances in history where a particular color came up 32 times in a row on a roulette wheel. Imagine if we were just playing with a starting bet of $100, by the 20th lost bet in a row, we would need to place $52 million.
  2. The casino sets a limit on the maximum bet amount. So even if we had enough capital, due to this restriction, we can't endlessly increase our bets. Therefore, in case of a very long unlucky streak, we could lose a large amount of money.

Betting table

To help you with the use of this strategy, we have created an Excel spreadsheet where you can enter the size of your starting bet, and then find out how much more you have to bet in case of each loss. You can use this for roulette or a similar game where you can win back double your stake. Similarly, you can use the table below which assumes a $100 starting bet. The table also shows the probability for a loosing streak in European roulette (such as black/red bets).

Martingale betting table for European roulette even bets
Loosing step Required bet Chance to happen
1 100 48.600000%
2 200 23.6196000%
3 400 11.4791256%
4 800 5.5788550%
5 1,600 2.7113236%
6 3,200 1.3177032%
7 6,400 0.6404038%
8 12,800 0.3112362%
9 25,600 0.1512608%
10 51,200 0.0735128%
11 102,400 0.0357272%
12 204,800 0.0173634%
13 409,600 0.0084386%
14 819,200 0.0041012%
15 1,638,400 0.0019932%
16 3,276,800 0.0009687%
17 6,553,600 0.0004708%
18 13,107,200 0.0002288%
19 26,214,400 0.0001112%
20 52,428,800 0.0000540%

Does it work long-term? Simulation

To answer the question, we've created a computer program that simulates 10,000 roulette spins and a simulated player who applies this strategy. You can also view the source code of this simulation in this article.

Example simulation of a player using the Martingale strategy on roulette for even bets.
Example simulation of a player using the Martingale strategy on roulette for even bets. The player had a starting balance of $100 and started with $1 bet. We can see the player gradually increasing his balance and overcoming moderate loosing streaks. However, the simulation ends with the player loosing all of his balance due to bad loosing streak.

Having run the simulation, that is, the 10,000 roulette spins, 100 times, we found that this strategy was only able to result in a profit 11 times. In these cases, the player ended up with an amount between twice and six times their starting capital. However, in the majority of cases, that is, the remaining 89 times, the players' balance ran out well before the 10,000th round.


What can be generally said is that this strategy is capable of generating a positive balance in the short term. However, sooner or later, the player encounters a streak of bad luck, resulting in the loss of all their capital.

Simulation source code

You can run the Python code for the Martingale simulation. It is best suited to run in a Jupyter notebook environment, such as the free Google Colab notebook.

import random
import seaborn as sns
import matplotlib.pyplot as plt

mpockets = ["Red"] * 18 + ["Black"] * 18 + ["Green"] * 1
mrolls = []

def makeRandomRolls():
  global mrolls
  mrolls = []
  mi = 0
  while mi < 10000000:
    mi += 1

def always_red_Martingale(bankroll, maxspin):  
    bankroll = 100
    bet = 1
    currentSpin = -1
    pockets = ["Red"] * 18 + ["Black"] * 18 + ["Green"] * 1
    bankroll_history = []
    roll_history = []
    betTrigger = False
    while (bankroll > 0) and (currentSpin < maxspin):
        currentSpin = currentSpin + 1
        roll = mrolls[currentSpin]

        if bet > bankroll:
          bet = bankroll
          #print('!!! BET Larger than bankrol. Setting max bet to: ' + str(bankroll))

        if betTrigger == True:
          if roll == "Red":
            #print('!!! Bet placed and Won. Bet was: ' + str(bet))
            bankroll += bet
            bet = 1
            betTrigger = False
            bankroll -= bet
            bet *= 2
            #print('!!! Bet placed and LOST. New bet is: ' + str(bet))

        if (currentSpin > 2) and \
        (roll_history[-1] == "Black") and \
        (roll_history[-2] == "Red"):
          betTrigger = True
    return bankroll_history


MS = 10000

plt.plot(always_red_Martingale(bankroll=100,maxspin=MS), linewidth=2, label='Player using Martingale strategy, always bets on red (with 1 USD)')
plt.xlabel("Number of roulette spins", fontsize=18, fontweight="bold")
plt.ylabel("Balance (USD)", fontsize=18, fontweight="bold")
plt.xticks(fontsize=16, fontweight="bold")
plt.yticks(fontsize=16, fontweight="bold")
plt.title("How balance changes with each roulette spin (bet)", fontsize=22, fontweight="bold")
plt.legend(loc="upper left")