Polymarket Bot Tutorial · Hoofdstuk 15 van 32

Sport-microstructuur bots op Polymarket: in-game edge, scoreline-driven mispricing, de NBA tag (745) en Tennis tag (864), live data-bronnen en executie-patronen voor high-frequency sport-markten.

Wat dit hoofdstuk behandelt

Sport-markten zijn het meest consistent actieve niet-politieke segment op Polymarket. De bots die werken vallen in twee schone buckets: pre-game line-catchers die traden zodra de line is gezet en in-game microstructuur-bots die reageren op order-book beweging tijdens spel. Dit hoofdstuk behandelt beide met de specifieke tag-IDs, data-bronnen en latency-budgets die op elk van toepassing zijn.

Sport-markten zijn het drukste niet-politieke segment op Polymarket. Het executie-patroon dat werkt combineert een live-score feed (ESPN, PandaScore) met order-book microstructuur-signalen. Dit hoofdstuk behandelt wat werkt voor NFL, NBA, voetbal en tennis specifiek en waar esports verschilt.

Dit is hoofdstuk 15 van onze 32-delige serie over het bouwen van een Polymarket trading bot. We behandelen het onderwerp in detail in de secties hieronder. De body content voor elke sectie wordt geschreven en hoofdstuk-per-hoofdstuk uitgerold; FAQ-antwoorden en referenties zijn al compleet en weerspiegelen production-ervaring van het draaien van onze eigen trader.

  • Waarom sport-markten tradeable zijn
  • Pre-game vs in-game (verschillende bots)
  • Geverifieerde tag-IDs (745 NBA, 864 Tennis)
  • Data-bronnen: ESPN, officiële API's, on-screen
  • Latency-budget voor in-game
  • De 0,99 / 0,01 valstrik
  • Code: abonneer op een game-book en reageer

Waarom sport-markten tradeable zijn

Sport-markten clearen in gedefinieerde timeframes (uren tot dagen), hebben publieke live data en trekken continue order flow tijdens wedstrijden. Alle drie zijn nodig voor een tradeable markt — politieke markten missen "gedefinieerd timeframe", weer-markten missen "continue flow", obscure toernooien missen "publieke live data".

De trader-populatie op sport-markten is ook diverser dan op, bijvoorbeeld, verkiezingsmarkten. Casual sport-gokkers prijzen emotioneel; informed traders corrigeren naar fair value tijdens de loop van een wedstrijd. De gap tussen de twee is de bot-edge.

Volume-distributie is oneven: een NFL-zondag zal honderden miljoenen dollars roteren over Polymarket sport-markten; een dinsdagavond Saudi Pro League-wedstrijd zou onder 50k $ kunnen doen. Dimensioneer je strategie naar waar de actie daadwerkelijk is.

Pre-game vs in-game (verschillende bots)

Twee fundamenteel verschillende bot-designs.

Pre-game line-catcher: scan markten die net openden, identificeer mis-prijsde lines tegen je model of tegen het getal van een scherpere venue, plaats een FOK buy. Houd tot in-play, soms tot resolution. Snelheid: minuten-geen-seconden. Edge: model + line-shopping.

In-game microstructuur: abonneer op het WebSocket order book van een live game, reageer op imbalance-signalen + score-events binnen seconden. Snelheid: seconden-geen-minuten. Edge: latency + lezen van order flow.

De twee delen bijna geen code. Ze hebben verschillende risicoprofielen, verschillende data-bronnen, verschillende exit-strategieën. Een bot die beide probeert te doen eindigt met niet één goed doen; kies er één.

Geverifieerde tag-IDs (745 NBA, 864 Tennis)

Productie tag-IDs geverifieerd mei 2026 voor grote sport-categorieën. Gebruik deze om /events calls efficiënt te filteren.

Sport / LeagueTag IDTag slugNotes
NBA745nbahoogste volume okt-jun
NFL450nflpiek zo/ma sep-feb
Tennis (all)864tennisjaar-rond, toernooi-cadens
Voetbal (algemeen)1059soccercombineer met sub-tags hieronder
EPL739epl
UCL2186uefa-champions-league
Esports (all)702esportsLoL+CS2+Valorant+Dota
MLB1245mlbpiek apr-okt
NHL823nhlpiek okt-jun

Tag-IDs zijn stabiel over jaren. Nieuwe tags worden toegevoegd (Saudi Pro League, IPL) maar oude tags worden niet hernummerd.

Data-bronnen: ESPN, officiële API's, on-screen

Voor traditionele sport dekt de gratis ESPN scoreboard API alles wat je nodig hebt: scores, period/clock, win-probability, soms shot location. Geen key vereist; rate-limited alleen op IP-niveau. Endpoint-patroon: https://site.api.espn.com/apis/site/v2/sports/<sport>/<league>/scoreboard.

Voor esports heeft ESPN geen dekking. Opties: PandaScore (30-60 $/mo, de industry standard), HLTV (alleen CS2, scrapeable, geen API), Liquipedia (community-onderhouden, scrapeable, langzamer update-cadens).

On-screen feeds (betalen voor een TV-stream en OCR-lezen van de scorebug) werken maar zijn operationeel zwaar. Aanbevolen alleen als je een strategie hebt die sub-3-seconde updates vereist op een sport die geen API real-time dekt.

Latency-budget voor in-game

Het end-to-end latency-budget voor een in-game reactieve bot.

  • Score event gebeurt: t=0
  • Source feed reflecteert: t+3-15s (ESPN: ~10s; PandaScore: ~3s)
  • Je bot leest de feed: t+10-16s
  • Bot beslist actie: +50ms
  • FOK order geplaatst: +200-500ms
  • Matched bij CLOB: +300-1000ms (netwerk + matching)

Totaal: 11-17 seconden. De snelste professionele firms halen 3-5 seconden end-to-end met paid premium feeds en co-located VPS. Retail bots op standaard hosts en gratis ESPN zitten aan de tragere kant.

Strategieën die sub-5s vereisen zijn niet levensvatbaar voor retail. Strategieën die werken in 10-17s venster zijn: line-catching na een score, fading van overreacties, late-game certainty plays.

De 0,99 / 0,01 valstrik

De meest voorkomende in-play sport-bot failure: de zware favoriet kopen op 0,99 met één minuut over, verwachtend gemakkelijke +1¢. Drie redenen waarom het faalt.

Eerst, de 1% geïmpliceerde probability van de underdog is geen nul — late comebacks gebeuren met niet-triviale frequentie. Een 99,5% zekere win, 200 keer gespeeld, produceert één verlies voor volledige position size.

Tweede, de spread op 0,99/0,01 betekent dat je 99c per share betaalt, 1c wint bij succes, 99c verliest op het zeldzame omkeren. Risk-reward is bruut.

Derde, de bot die GTC sell op 0,999 gebruikt zal zelden vullen — er zijn geen kopers op die prijs. De positie rijdt tot resolution. Als het wint, krijg je 1c. Als de omkeer gebeurt, verlies je 99c.

De valstrik is echt geld verloren door builders die de math niet runden. Blijf weg uit markten geprijsd 0,95+ tenzij je strategie specifiek is gebouwd voor het redemption-arbitrage profiel.

Code: abonneer op een game-book en reageer

Referentie: abonneer op het WebSocket van een specifieke NBA-game, log book-updates, vuur FOK op imbalance-signaal.

import websocket, json
THRESHOLD = 0.5  # imbalance level to trigger

def on_message(ws, message):
    msg = json.loads(message)
    if msg.get("event_type") != "book": return
    bids = msg.get("bids", [])
    asks = msg.get("asks", [])
    bid_depth = sum(float(b["price"]) * float(b["size"]) for b in bids[:5])
    ask_depth = sum(float(a["price"]) * float(a["size"]) for a in asks[:5])
    total = bid_depth + ask_depth
    if total < 100: return  # too illiquid
    imb = (bid_depth - ask_depth) / total
    if abs(imb) > THRESHOLD:
        print(f"signal imb={imb:.2f} bid={bid_depth:.0f} ask={ask_depth:.0f}")
        # fire FOK here

ws = websocket.WebSocketApp(
    "wss://ws-subscriptions-clob.polymarket.com/ws/market",
    on_open=lambda ws: ws.send(json.dumps({"type":"Market","markets":["<CONDITION_ID>"]})),
    on_message=on_message
)
ws.run_forever()

Productie-toevoegingen: cooldown tussen fires, per-token inventory cap, kill op stale book (geen message in 30s).

Veelgestelde vragen

Welke sport-tags zijn het meest actief op Polymarket?
NBA (tag_id 745), Tennis (tag_id 864) en voetbal (varieert per competitie) leiden 24h-volume tijdens hun seizoenen. NFL spike't wekelijks tijdens de regular season en playoffs. We hebben de NBA- en Tennis-tag IDs in productie geverifieerd — anderen moeten gechecked worden via het gamma /tags endpoint voordat je erop vertrouwt.
Kan ik in-game sport-markten winstgevend botten?
Mogelijk — maar het is moeilijk. De edge is echt (live scoreline vaak mispriced voor 30-90 seconden) maar andere bots kijken ook. Beste resultaten die we hebben gezien komen van het combineren van een snelle live-score data bron met simpele regels ("opponent scoorde, markt heeft nog niet bewogen, buy"). Pure stat-arb zonder de data-bron verliest aan snellere competitors.
Waar krijg ik live sport-data?
ESPN.com heeft unofficial JSON-endpoints die live scores teruggeven — goed genoeg voor veel strategieën. Officiële API's (NBA Stats API, NFL publieke endpoints) zijn betrouwbaarder maar langzamer. Twitter-accounts van beat reporters geven tekst maar vereisen LLM-parsing. Geen is HFT-grade; allemaal "snel genoeg" voor retail.
Wat is de 0,99 / 0,01 valstrik?
Wanneer een sport-markt op 99 cent YES staat (zeer waarschijnlijk gewonnen), is er bijna geen upside meer en een 1-cent move kan een maand verwachte winst uitvegen. Veel bots blijven hangen op 0,99 kopen op zoek naar de laatste cent en krijgen een klap wanneer een onverwachte gebeurtenis de prijs naar 0,85 doet zakken. Harde regel: koop niet boven ~0,95 tenzij je expected value math waterdicht is.
Hoe vergelijkt Polymarket sport met traditionele sportsbooks?
Geen house edge op de spread (vs ~5-10% vig bij FanDuel/DraftKings), maar liquiditeit is dunner en spreads kunnen breder zijn. Polymarket excelleert voor events die traditionele books onderprijzen — internationale toernooien, esports, niche-markten. Voor mainstream NFL/NBA zijn traditionele books liquider maar kosten meer in vig.
Kan mijn bot tradeen over meerdere sport-markten tegelijk?
Ja — en dat moet je. Sport-microstructuur werkt het best als portfolio van 5-20 gelijktijdige games. Per-game position cap (bijv. 50 USD), portfolio cap (bijv. 500 USD) en ongecorreleerde exposure over games. Concentreren op één game maxt variantie.