Polymarket Bot Tutorial · Chapitre 25 sur 32
Bots de marché sportifs sur Polymarket : matchs hebdomadaires NFL, microstructure NBA (tag 745), soccer (Premier League, Bundesliga, Champions League), tennis (864) - liquidity, edge sources, code patterns.
Ce que couvre ce chapitre
NFL, NBA, Soccer et Tennis sont les plus gros volumes sports de Polymarket par catégorie. Chacun a sa propre disponibilité des données, son cadence et son profil d'edge. Ce chapitre couvre les bot patterns spécifiques à chaque ligue et les tag IDs sur lesquels vous filtrerez.
- NFL : cadence hebdomadaire, pic de liquidité le dimanche
- NBA (tag 745) : microstructure en cours de match
- Soccer : ligues internationales vs ligues de clubs
- Tennis (tag 864) : cadence des tournois
- Sources d'edge qui tiennent dans le temps
- Données live : ESPN, official APIs
- Bot exemple : pre-game line catcher
NFL : cadence hebdomadaire, pic de liquidité le dimanche
La NFL a le rythme hebdomadaire le plus marqué de tous les sports sur Polymarket. Les marchés ouvrent le mardi après les matchs de la semaine précédente, la recherche de meilleures lines se fait du mercredi au vendredi, et le volume de betting culmine samedi-dimanche. La résolution a généralement lieu le dimanche soir pour les matchs de début de journée, et le lundi soir pour le match tardif.
Bot pattern : line-catcher mardi-mercredi lorsque la opening line est fixée, in-play le dimanche pendant le pic de volume. Des bots différents pour chaque fenêtre. Le marché Monday Night Football a souvent un volume plus faible que les autres matchs - attention, le risque de slippage est plus élevé sur les petites entrées.
Le pic de volume est le Super Bowl : plus de 50 M$ tradés sur l'ensemble des marchés SB la semaine du match. Même un bot à 100 $ cette semaine-là est un bruit négligeable ; le marché est efficient à cette échelle.
NBA (tag 745) : microstructure en cours de match
La NBA est le sport le plus fréquent sur Polymarket - 25 à 30 matchs par semaine pendant la saison régulière, 5 à 15 en playoffs. Le tag ID 745 filtre les événements NBA uniquement.
La microstructure in-game fonctionne sur la NBA parce que : (1) ESPN met à jour les scoreboards toutes les ~10 s, (2) les matchs durent 2,5 heures d'action continue, (3) les order books Polymarket des grands matchs restent profonds jusqu'au 4e quart-temps.
La stratégie qui fonctionne : s'abonner au WS book d'un match + au flux ESPN, réagir aux déséquilibres + aux événements de score en 10 à 15 secondes. Les stratégies qui ne fonctionnent pas : le pre-game line catching (assez efficient pour que le retail n'en capte pas grand-chose), l'arbitrage de certitude en fin de match (territoire du piège 0.99).
Soccer : ligues internationales vs ligues de clubs
Le soccer se divise en trois grands niveaux sur Polymarket.
- Grandes ligues européennes (EPL tag 739, La Liga, Bundesliga, Serie A) - volume modéré, books profonds sur les gros matchs. Les stratégies bot sont similaires à celles de la NBA.
- Champions League / Europa League (UCL tag 2186) - pic de volume lors des phases à élimination directe. Les books sont les plus profonds à partir des huitièmes de finale.
- International / ligues plus petites (Saudi Pro League, MLS, J-League) - books fins, spreads larges. En général, ce n'est pas un terrain pour bot.
Le scoring discret du soccer (0 à 1 buts étant des événements majeurs) le rend différent du flux continu de la NBA. Le bot pattern pour le soccer est le suivant : être du bon côté avant qu'un but soit marqué, sortir vite après un but.
Tennis (tag 864) : cadence des tournois
Tag tennis 864. Les circuits ATP et WTA jouent 11 mois par an avec les Grand Slams en janv. (Australian Open), mai-juin (French Open), juil. (Wimbledon) et août-sept. (US Open). Le volume se concentre sur ces quatre semaines ainsi que sur la série Masters 1000.
Le tennis offre les price ladders in-play les plus propres de tous les sports (chapitre 15). Les prix en cours de match suivent des courbes prévisibles, indexées sur les états set-and-break. Un bot avec un modèle de price ladder spécifique au tennis peut détecter les mauvaises cotations en temps réel.
Fenêtres calmes : entre les Grand Slams, les semaines avec uniquement des tournois ATP 250 / ATP 500 ont des books très fins. Mettez le bot en pause ou basculez vers un autre sport pendant ces périodes.
Sources d'edge qui tiennent dans le temps
Sur les quatre sports, les edges qui survivent dans le temps sont :
- Pre-game line shop contre la cote d'une venue plus sharp (Pinnacle, Betfair). Quand Polymarket diverge d'un book sharp de plus de 3 c, fade Polymarket.
- In-play overreaction à une seule action (interception, blessure, changement de momentum). Attendez 30 à 60 secondes après l'action, puis fade si le marché est allé trop loin.
- Gros favoris en fin de match à 0,85-0,92 avec un sizing géré par le risque. En dessous de 0,85 = vrai risque ; au-dessus de 0,92 = le piège 0.99.
Edges qui ne survivent pas : pure technical analysis sur les prix, scraping du sentiment sur Twitter, effets saisonniers basés sur le calendrier.
Données live : ESPN, official APIs
Matrice des sources de données pour les quatre sports.
| Sport | Primaire | Backup | Cadence de mise à jour |
|---|---|---|---|
| NFL | ESPN scoreboard | NFL.com feed | ~10 s pendant le jeu |
| NBA | ESPN scoreboard | stats.nba.com | ~10 s pendant le jeu |
| Soccer (EPL/UCL) | ESPN scoreboard | SofaScore | ~15-30 s |
| Tennis (ATP/WTA) | ESPN scoreboard | tennis.com live | ~30 s (au niveau du point) |
ESPN est gratuit et fiable pour les quatre. Pour des mises à jour sous les 10 s, payez un flux spécialisé (StatsPerform, GeniusSports) - mais l'amélioration marginale de latence ne justifie rarement le coût pour le retail.
Bot exemple : pre-game line catcher
Référence : pseudocode de pre-game line-catcher.
def line_catcher():
# Find games starting in the next 2-12 hours
events = gamma_events(tag_id=745, hours_ahead=12)
for ev in events:
for m in ev["markets"]:
polymarket_prob = float(json.loads(m["outcomePrices"])[0])
sharp_prob = fetch_pinnacle_implied(ev["slug"]) # 3rd-party feed
if sharp_prob - polymarket_prob > 0.04:
# Polymarket has the YES side cheap vs sharp
tok = json.loads(m["clobTokenIds"])[0]
place_fok(tok, "BUY", polymarket_prob + 0.01, size=10)
elif polymarket_prob - sharp_prob > 0.04:
# Polymarket has the NO side cheap vs sharp
tok = json.loads(m["clobTokenIds"])[1]
place_fok(tok, "BUY", 1 - polymarket_prob + 0.01, size=10)
Réserves : les APIs Pinnacle / Betfair nécessitent des comptes ; ce n'est pas gratuit. Sans référence sharp, le line-catching se réduit à opinion contre opinion, ce qui n'est pas un terrain pour bot.





