Skip to content
[OPEN_POKER]

De Zero au Leaderboard Open Poker en 7 Jours : Un Plan Quotidien

JJoão Carvalho||14 min read

Tu peux faire passer un bot de poker de "n'existe pas" a "classe au leaderboard Open Poker" en 7 jours. Pas 7 semaines. La plateforme est concue pour qu'un developpeur puisse s'inscrire, se connecter et jouer le jour 1, puis ajouter une amelioration de strategie par jour jusqu'a etre competitif. Voici le plan qu'on recommande, avec les ameliorations exactes qui font la difference et celles qui n'en font pas.

Pourquoi le plan de 7 jours fonctionne-t-il ?

Parce que chaque jour ajoute une seule amelioration isolee par-dessus un bot fonctionnel. Tu ne construis pas un systeme de bout en bout avant la premiere main. Tu lances une calling station le jour 1 et tu ameliores incrementalement. Au jour 7, chaque amelioration a ete validee contre de vrais adversaires, pas contre un simulateur de self-play qui te ment.

C'est l'oppose de la facon dont la plupart des projets de bots echouent. La plupart des developpeurs passent deux semaines a concevoir une architecture "complete", puis realisent au jour 14 que leur evaluateur de mains ne correspond pas au format de cartes du protocole, ou que leur envoyeur d'actions oublie le turn token, ou que leur calculateur de pot odds utilise le mauvais champ. Le plan de 7 jours reporte tout ca jusqu'a ce que le bot tourne deja.

L'autre raison pour laquelle ca marche : le leaderboard Open Poker recompense le volume plus que le pic de competence. Un bot mediocre qui tourne 7 jours surpasse un bot brillant qui tourne 1 jour. Au jour 7, tu as 4-5 jours d'historique de mains accumule, ce qui est assez de reduction de variance pour monter au-dessus du bas du classement meme si ta strategie est encore brute.

Jour 1 : Fais tourner une calling station

Ton seul objectif le jour 1 est un bot connecte qui joue des mains legales. Ne te preoccupe pas de la strategie. Ne te preoccupe pas des profits. Ne te preoccupe de rien sauf : le bot se connecte, le bot rejoint une table, le bot repond a your_turn avec une action valide, le bot ne crashe pas pendant 30 minutes.

Utilise le guide pour creer un bot de poker en Python comme point de depart. Le bot complet fait moins de 50 lignes. Copie-le, colle ta cle API, lance-le. Tu verras "Connected as TonNomDeBot" en 30 secondes et ta premiere main une ou deux minutes apres avoir rejoint le lobby.

La strategie calling station (check si possible, sinon call, sinon fold) perd des jetons mais produit des boucles d'evenements completes. Chaque type de message est gere. Chaque action est envoyee avec un turn token valide. A la fin du jour 1, ton bot a joue 50-100 mains et tu as un baseline de win rate a ameliorer.

Objectif de fin de journee : le bot a joue au moins 20 mains, pas de crashes, pas de timeouts.

Jour 2 : Ajoute la selection de mains pre-flop

La plus grande amelioration que tu puisses faire par-dessus la calling station. La plupart des mains de depart au Hold'em sont perdantes ; fold les 60 % les plus faibles pre-flop reduit drastiquement les jetons que tu perds au flop et apres.

def should_play_preflop(cards):
    """Top ~40% of starting hands."""
    ranks = "23456789TJQKA"
    r1 = ranks.index(cards[0][0])
    r2 = ranks.index(cards[1][0])
    high, low = max(r1, r2), min(r1, r2)
    pair = r1 == r2
    suited = cards[0][1] == cards[1][1]
 
    if pair: return True
    if high >= 10: return True
    if high >= 8 and suited: return True
    if high == 12 and low >= 7: return True
    return False

Stocke les hole cards quand hole_cards arrive. Sur your_turn, si c'est pre-flop et que should_play_preflop() retourne False, fold. Sinon, reviens a la logique calling station.

Ce seul changement fait typiquement passer une calling station de -2,5 bb/100 a environ -0,8 bb/100. Tu perds toujours des jetons, mais a un rythme qui ne declenche pas de rebuys frequents. Objectif de fin de journee : 200+ mains jouees, win rate au-dessus de 12 %.

Jour 3 : Ajoute le raise pre-flop

Le bot du jour 2 fold les mauvaises mains mais ne raise jamais les bonnes. Les adversaires voient des flops gratuits contre tes mains premium, ce qui signifie qu'ils font des mains qui te battent. Correction : raise avec tes 15 % de mains les plus fortes au lieu de juste caller.

def should_raise_preflop(cards):
    ranks = "23456789TJQKA"
    r1, r2 = ranks.index(cards[0][0]), ranks.index(cards[1][0])
    pair = r1 == r2
    high, low = max(r1, r2), min(r1, r2)
    suited = cards[0][1] == cards[1][1]
    # Premium pairs
    if pair and r1 >= 8: return True  # 99+
    # Big aces
    if high == 12 and low >= 9: return True  # AT+
    # Suited broadway
    if suited and high >= 10 and low >= 9: return True
    return False

Quand ca retourne True et que raise est dans valid_actions, envoie un min-raise au lieu de juste caller. Le champ amount est le total du raise-to, pas un increment. Utilise la valeur min de l'entree raise comme ton amount.

Objectif de fin de journee : 400+ mains jouees, win rate au-dessus de 16 %, bb/100 approchant le break-even.

Jour 4 : Ajoute les pot odds pour les calls post-flop

Le post-flop est la ou les bots perdent le plus de jetons. Caller des mises aleatoires sans faire le calcul, c'est ce qui fait d'une calling station une calling station. Corrige ca avec les pot odds.

Le calcul : divise le montant du call par le pot apres ton call. Si ta probabilite estimee de gain depasse ce ratio, call. Sinon, fold. Le tutoriel mathematiques du poker pour bots couvre la formule en detail.

def call_is_profitable(your_turn_msg, win_pct=0.30):
    actions = {a["action"]: a for a in your_turn_msg["valid_actions"]}
    if "call" not in actions:
        return False
    pot = your_turn_msg["pot"]
    call_amt = actions["call"]["amount"]
    if call_amt == 0:
        return True
    pot_odds = call_amt / (pot + call_amt)
    return win_pct > pot_odds

Pour le jour 4, utilise une estimation fixe de 30 % de win rate. C'est faux pour la plupart des spots specifiques, mais en moyenne c'est un bien meilleur defaut que "toujours caller". Tu vas fold les rivers ou tu n'as rien et continuer avec les mains qui ont une equity realiste.

Objectif de fin de journee : 600+ mains jouees, bb/100 au break-even ou legerement positif.

Jour 5 : Traque le VPIP des adversaires

Le jour 5, c'est quand tu arretes de jouer chaque main de la meme facon et que tu commences a t'adapter a la table. Construis un tracker simple qui enregistre a quelle frequence chaque joueur met des jetons pre-flop. Le guide de modelisation d'adversaires a l'implementation complete, mais une version minimale viable :

from collections import defaultdict
 
vpip_data = defaultdict(lambda: {"hands": 0, "voluntary": 0})
acted_this_hand = set()
 
def on_hand_start():
    acted_this_hand.clear()
 
def on_player_action(msg):
    name = msg.get("name", f"seat{msg['seat']}")
    if msg["action"] in ("call", "raise", "all_in"):
        if name not in acted_this_hand:
            vpip_data[name]["hands"] += 1
            vpip_data[name]["voluntary"] += 1
            acted_this_hand.add(name)
 
def get_vpip(name, default=0.25):
    data = vpip_data[name]
    if data["hands"] < 20:
        return default
    return data["voluntary"] / data["hands"]

Utilise le VPIP pour ajuster ta range de raise. Contre un adversaire avec un VPIP sous 15 % en position tardive, elargis ta range de steal. Contre un adversaire avec un VPIP au-dessus de 50 %, mise uniquement pour la valeur (ne bluffe pas : ils callent trop).

Objectif de fin de journee : 800+ mains, bot identifiant au moins 5 adversaires distincts.

Jour 6 : Ajoute la variation de bet sizing

Le bet sizing statique est la prochaine fuite. La plupart des bots debutants font toujours un min-raise ou misent toujours la taille du pot. Les deux sont faux. Melange trois tailles selon la situation :

SituationTailleRaisonnement
Open pre-flop en position tardive2,5x BBOpen standard, equilibre la frequence de steal avec la valeur
Continuation bet sur board sec33 % du potPas cher, fait fold les mains faibles
Value bet sur board mouille75 % du potFait payer les draws, construit le pot pour la valeur

Calcule ton montant de raise selon la situation, limite-le au min/max de valid_actions et envoie. Melanger les tailles te rend sensiblement moins exploitable. Les adversaires qui traquent les patterns ne peuvent plus deviner la force de ta main rien qu'a la taille de ta mise. Le tutoriel de strategie de mise a le detail complet.

Objectif de fin de journee : 1 000+ mains, bb/100 mesurablellement positif, top 50 % du leaderboard.

Jour 7 : Fais tourner, surveille, itere

Le jour 7 n'est pas pour les nouvelles fonctionnalites. C'est pour faire tourner ton bot 12+ heures d'affilee, regarder le leaderboard et corriger ce qui casse. Le guide de debug couvre les modes de defaillance les plus courants (problemes d'auth, timeouts, race conditions).

Trois choses a verifier :

1. Log de crashes. Enveloppe ta boucle principale dans un try/except qui logue chaque exception avec un timestamp. Fais tourner 4 heures, puis lis le log. Corrige l'erreur la plus frequente en premier.

2. Decisions lentes. Ajoute du logging de latence depuis le guide de timeout. Tout ce qui depasse 1 seconde merite investigation.

3. Win rate par heure. Groupe ton historique de mains par heure de la journee et verifie si ton win rate varie. Certains bots gagnent aux heures de pointe (plus d'adversaires = plus de joueurs faibles a exploiter) mais perdent en heures creuses. Utilise ca pour decider quand garder ton bot en marche.

Objectif de fin de journee : le bot a joue 1 500+ mains sur les 7 jours, est dans le top 25 % du leaderboard de la season en cours et tourne sans surveillance pendant 12+ heures sans intervention.

A quoi ressemble reellement la progression sur 7 jours ?

Voici la trajectoire approximative de win rate qu'on a observee chez plusieurs developpeurs qui ont suivi ce plan :

JourStrategie ajouteeMediane bb/100Mains en fin de journee
1Calling station-2,550
2Range de fold pre-flop-0,8200
3Range de raise pre-flop-0,3400
4Pot odds post-flop+0,4600
5Lecture d'adversaires via VPIP+1,1800
6Variation de bet sizing+1,71 000
7Stabilite et uptime+1,71 500+

Les plus gros sauts sont aux jours 2 et 5 : selection de mains pre-flop et modelisation d'adversaires. Ce sont les ameliorations les moins cheres par ligne de code. Les jours 4 et 6 apportent des gains plus faibles mais ils se composent bien. Le jour 7 n'ajoute pas d'avantage, mais il convertit l'avantage que tu as deja en position au leaderboard en accumulant des mains.

Ce n'est pas une etude rigoureuse. La variance en 6-max est elevee et les resultats individuels varient selon le pool de joueurs de la season, mais directionnellement le pattern est coherent : des ameliorations simples empilees donnent un bot competitif en moins d'une semaine de travail a temps partiel.

Que ne devrais-tu PAS faire la premiere semaine ?

Trois pieges a eviter.

N'ecris pas un evaluateur de mains a partir de zero. C'est tentant parce que ca ressemble au "vrai" travail de poker. C'est un projet de plusieurs jours qui n'ajoute aucun avantage mesurable par rapport a une heuristique simple de probabilite de gain. Si tu as absolument besoin de force de main, utilise PokerKit ou Treys (bibliotheques Python avec des evaluateurs eprouves au combat) au lieu d'ecrire le tien. On utilise PokerKit cote serveur pour la meme raison.

N'essaie pas d'implementer le CFR ou la resolution GTO. Counterfactual Regret Minimization est la technique derriere Pluribus et Libratus. C'est aussi un projet de recherche de plusieurs mois qui necessite des dizaines de millions de mains d'entrainement. Pour un premier bot, tu obtiendras de meilleurs resultats en passant le meme temps sur des heuristiques basiques. Ajoute le CFR plus tard si tu veux depasser le top 20 %.

Ne deploie pas le jour 1 sans gestion d'erreurs. Enveloppe ta boucle d'evenements dans un try/except, logue chaque exception et continue. Les bots qui crashent sur un seul mauvais message perdent tout le temps de table qu'ils auraient accumule pendant la nuit. La solution est un bloc try/except.

Que vient-il apres le jour 7 ?

Une fois que tu as un bot competitif fonctionnel, la prochaine serie d'ameliorations est incrementale et a fort impact :

  • Ranges basees sur la position : plus tight under the gun, plus loose au cutoff et au button
  • Planification multi-street : reflechis a ce que tu feras au turn avant de miser au flop
  • Selection de bluffs : choisis des boards ou les bluffs sont credibles (cartes hautes, moins de draws)
  • Gestion de bankroll : varie ton buy-in en fonction des resultats de la session

Chacune de ces ameliorations ajoute 0,5-1,5 bb/100 supplementaires si bien implementee. Le chemin vers les finishes top 10 au leaderboard n'est pas une percee unique ; c'est empiler 10 petites ameliorations jusqu'a ce que ton bot ait un avantage mesurable dans chaque spot courant. La documentation complete de la plateforme couvre chaque detail du protocole dont tu auras besoin pour la prochaine serie.

FAQ

Combien de temps faut-il reellement pour creer un bot de poker competitif ? Pour un premier bot competitif (top 25 % du leaderboard), 7 jours de travail a temps partiel est realiste. Pour le top 10 %, compte 2-4 semaines d'iteration et d'ajustement. Le top 1 % necessite des algorithmes de type CFR, du profiling d'adversaires a grande echelle et des mois de raffinement.

Puis-je suivre ce plan avec un langage autre que Python ? Oui. Le protocole est du pur WebSocket plus JSON, donc tout langage avec support WebSocket fonctionne. JavaScript, Go, Rust, Java, C++, meme Bash avec websocat ont ete utilises pour construire des bots sur Open Poker. Les exemples Python se traduisent directement.

Combien de mains dois-je jouer pour monter au leaderboard ? Tu as besoin d'au moins 10 mains pour apparaitre au leaderboard. Pour monter significativement, prevois 1 000-2 000 mains sur la saison. Plus de mains reduit la variance et laisse ton avantage se manifester.

Ai-je besoin d'un compte Pro pour suivre ce plan ? Non. Tout dans ce plan fonctionne avec un compte gratuit. Le plan Pro (5 $/season, avec des remises en pack) ajoute des analytics, des strategies personnalisees et des cooldowns de rebuy plus courts, mais les ameliorations de strategie elles-memes sont gratuites. Consulte la comparaison des fonctionnalites Pro pour la liste complete.

Et si mon bot se fait eliminer avant la fin du plan ? L'auto-rebuy s'en charge. Envoie {"type": "set_auto_rebuy", "enabled": true} une fois apres la connexion et le serveur fera automatiquement un rebuy (avec un cooldown de 5 minutes sur le plan gratuit) quand ton bot se fait eliminer. Ta boucle d'evenements continue de tourner et la prochaine main commence des que le cooldown expire.


Sept jours de travail concentre suffisent pour faire passer un bot de poker de zero a competiteur au leaderboard sur Open Poker. La plateforme est concue pour cette vitesse d'iteration. Inscris un bot, suis le plan jour par jour, et tu auras une entree classee d'ici la semaine prochaine.

Continuer la lecture