La martingale à la roulette en Python


Sur internet, c’est bien connu, on peut perdre du poids, trouver une fille facile près de chez soi, et gagner beaucoup d’argent rapidement et sans risque.

Une de ces techniques qu’on vous vend est la fameuse martingale, mais appliquée aux casinos en ligne. Outre le fait que vous ne pouvez pas vous fier à un serveur distant pour ne pas tricher, les jeux de hasard sont de toute façon toujours en faveur de la banque.

Nous allons nous intéresser à la martingale la plus simple, celle appliquée à la roulette. Quand j’étais à l’université, entre deux parties de Munchkins, nous cherchions un moyen de faire du pognon. Et on a failli s’organiser une session au casino de notre ville pour appliquer la technique suivante :

  1. Jouer une petite mise sur une couleur;
  2. Si on perd, revenir en 1 mais avec une mise équivalent au double de ses pertes.
  3. Si on gagne, encaisser, retourner en 1, mais avec la toute petite mise de départ.

L’idée était que si tu perdais, tu doublais ta mise jusqu’à ce que ça te rembourse tes pertes. Sinon, tu gagnes, et tu empoches. Seulement voilà, la roulette à la couleur, ce n’est pas 50% de chance, car il y a le zéro, qui n’est ni rouge, ni noir.

Comme on était des petits cons nuls en probas, mais des petits cons programmeurs, on avait simulé le jeu avec un programme Python, juste au cas où :

import random
 
# Une roulette (en France), c'est un 0 vert, et des numéros de
# 1 à 36 alternativement rouges et noirs.
roulette = ["green"]
roulette.extend("red" for i in range(1, 37, 2))
roulette.extend("black" for i in range(2, 37, 2))
 
# Regardons ce que donne la proba de choper le rouge avec le générateur
# de nombre pseudo-aléatoires de Python.
count = 0
for i in range(100000):
    count += random.choice(roulette) == "red"
print("Average chance of picking red: %s" % (count / 100000 * 100))
 
# Time to play ! Insérer ici la musique d'un film américain ambiance Las Vegas.
def play(rounds, budget=10000, color="red", start_bet=5):
    initial_budget = budget
    max_bet = start_bet
    bet = start_bet
    loss = 0
    # On limite le nombre de paris
    for round in range(rounds):
        # On mise
        budget -= bet
        if random.choice(roulette) != color:
            # On a perdu, on mise le double de ses pertes.
            loss += bet
            bet = loss * 2
            # Si jamais c'est plus que notre pognon, on se couche et on chiale.
            if bet > budget:
                break
            # On garde une trace de notre mise max pour évaluer le budget max.
            if (max_bet < bet):
                max_bet = bet
        else:
            # Si on gagne, on récupère notre mise et le gain, et on recommence.
            budget += bet * 2
            bet = start_bet
            loss = 0
 
    return budget - initial_budget, max_bet
 
print("10 rounds | balance: %s (max=%s)" % play(10))
print("100 rounds | balance: %s (max=%s)" % play(100))
print("1000 rounds | balance: %s (max=%s)" % play(1000))
print("10000 rounds | balance: %s (max=%s)" % play(1000))

Là le budget est large, mais nous on avait 800 euros… Bref, le résultat :

$ python3 roulette.py
Average chance of picking red: 48.78
10 rounds | balance: 10 (max=90)
100 rounds | balance: 1835 (max=2430)
1000 rounds | balance: -3585 (max=2430)
10000 rounds | balance: -3495 (max=2430)
 
$ python3 roulette.py
Average chance of picking red: 48.67
10 rounds | balance: 15 (max=30)
100 rounds | balance: -3620 (max=2430)
1000 rounds | balance: -3180 (max=2430)
10000 rounds | balance: -4670 (max=7290)
 
$ python3 roulette.py
Average chance of picking red: 48.507
10 rounds | balance: 45 (max=90)
100 rounds | balance: 1800 (max=2430)
1000 rounds | balance: -3370 (max=2430)
10000 rounds | balance: -3455 (max=2430)
 
$ python3 roulette.py
Average chance of picking red: 48.4
10 rounds | balance: 50 (max=30)
100 rounds | balance: 1940 (max=2430)
1000 rounds | balance: 1435 (max=7290)
10000 rounds | balance: -970 (max=7290)
 
$ python3 roulette.py
Average chance of picking red: 48.853
10 rounds | balance: -115 (max=270)
100 rounds | balance: -3535 (max=2430)
1000 rounds | balance: -2100 (max=7290)
10000 rounds | balance: -2120 (max=7290)

C’est pas vraiment la fortune assurée et en prime, dès qu’on veut jouer un peu sérieusement, il faut un budget max énorme. Mais surtout, il y a une grosse contrainte de temps, puisque 10 rounds c’est une bonne heure de jeu dans un casino réel.


Télécharger le code de l’article.

14 thoughts on “La martingale à la roulette en Python

  • Seb

    Salut,

    c’est moche la boucle for…
    une version du code vectorisée avec Numpy serait nettement plus efficace.

    Un tracé de l’évolution du compte en fonction du nb de round est bien sympa aussi (avec Matplotlib par exemple).

    On verrait alors nettement apparaître une jolie évolution linéaire (enfin affine) croissante du solde et puis de temps en temps des grosses gamelles.

    @+

  • bussiere

    C’est pour cela qu’il y a le zero sur les tapies a la roulette et encore en france vous avez de la chance il n’y a qu’un zero :) sur les tapis internationnaux il y en a deux :)

  • Gring

    “trouver une fille facile prêt de chez soit” => “trouver une fille facile près de chez soi”

    “les jeux de hasards” => “les jeux de hasard”

    De rien.

  • Teocali

    De toute facon, le meilleur moyen de gagner du fric dans les casinos, c’est d’eviter les jeu ou tu joues contre la banque et de prendre ceux ou tu joues contre d’autre joueurs (Poker, par exemple). Et deja ca, ca casse pas trois pattes a un canard (en France et en Belgique, les prelevements des casinos sont assez monstrueux. si vraiment vous voulez tenter le coup, mieux vaut chopper un cercle de jeu a Paris)

  • Gring

    Je crois que le Black Jack est un des seuls jeux au casino dont l’espérance est nulle (le casino n’est pas avantagé statistiquement), voire positive si on compte les cartes comme un gros autiste.

  • juju

    @Gring : non, l’espérance de gain est bel et bien en faveur du casino au Black Jack. L’avantage de la banque, c’est que le joueur perd de toute façon sa mise si il dépasse 21, même si la banque dépasse aussi 21 par la suite. Si le jeu était symétrique, ce cas de figure devrait donner un nul.

    Après, le joueur peut compenser un peu ce désavantage en choisissant sa stratégie, et en tirant parti des cas spéciaux (double ou split), tandis que la banque joue toujours de manière prédéterminée (c’est logique, un croupier ne doit pas pouvoir prendre des décisions qui peuvent influencer le gain ou la perte du casino).

  • Teocali

    Voila. Si vous jouez contre le casino en suivant les regles, quelque soit le jeu, sur le long terme, vous perdez. C’est mathematique.

  • hindflo

    Jouer une petite mise sur une couleur;
    Si on perd, revenir en 1 mais avec une mise équivalent au double de ses pertes.
    Si on gagne, encaisser, retourner en 1, mais avec la toute petite mise de départ.

    C’est drôle j’avais développé une stratégie quasiment identique quand j’étais petit (genre en 5eme). oO

    La faille du raisonnement c’est que l’ espérance est toujours négative:
    Avec cette stratégie tu augmente tes chances d’être bénéficiaire mais tu augmente énormément tes pertes quand tu ne l’es pas ce qui fait que ce n’est pas rentable au final.

    En effet la mise que tu mets à chaque tour pour compenser les pertes du précédent évolue de manière exponentielle… :/

    Après dans certains cas très particulier c’est peut être ce que tu veux. “il me manque un euro pour m’acheter ce truc dont j’ai absolument besoin, je vais prendre le risque de perdre 600 euros pour être sur à 99% de gagner cet euro qui me manque”. :p

    ça a fait partie de mes grande désillusion de comprendre ça. =(
    Le même genre que de comprendre que non quand on se met dans le référentielle d’un rayon de lumière, le rayon de lumière qui va dans le sens opposé ne vas pas à deux fois la vitesse de la lumière. :p

  • Irving Poe

    Plus simplement, les casinos imposent un mise minimum et maximum à chaque table. Donc en jouant cette martingale en commençant à 10, tu va buter sur la limite de mise à 100 par exemple. CASINO WIN.

Comments are closed.

Des questions Python sans rapport avec l'article ? Posez-les sur IndexError.