Polymarket Bot Tutorial · Kapitel 15 von 32
Sports microstructure bots auf Polymarket: In-Game-Edge, scoreline-getriebene Mispricing, der NBA-Tag (745) und Tennis-Tag (864), Live-Data-Quellen und Execution-Patterns für High-Frequency Sports Markets.
Was dieses Kapitel abdeckt
Sports Markets sind das am konstantesten aktive nicht-politische Segment auf Polymarket. Die Bots, die funktionieren, fallen in zwei klare Buckets: Pre-Game Line-Catcher, die handeln, sobald die Line feststeht, und In-Game-Microstructure-Bots, die während des Spiels auf Order-Book-Bewegungen reagieren. Dieses Kapitel behandelt beide mit den konkreten Tag-IDs, Datenquellen und Latenzbudgets, die jeweils gelten.
Sports Markets sind das geschäftigste nicht-politische Segment auf Polymarket. Das funktionierende Execution-Pattern kombiniert einen Live-Score-Feed (ESPN, PandaScore) mit Order-Book-Microstructure-Signalen. Dieses Kapitel behandelt, was speziell für NFL, NBA, Soccer und Tennis funktioniert und wo sich Esports unterscheidet.
- Warum Sports Markets handelbar sind
- Pre-Game vs. In-Game (verschiedene Bots)
- Verifizierte Tag-IDs (745 NBA, 864 Tennis)
- Datenquellen: ESPN, offizielle APIs, On-Screen
- Latenzbudget für In-Game
- Die 0.99 / 0.01-Falle
- Code: ein Games-Book abonnieren und reagieren
Warum Sports Markets handelbar sind
Sports Markets werden in definierten Zeitfenstern abgewickelt (Stunden bis Tage), haben öffentliche Live-Daten und ziehen während der Spiele kontinuierlichen Orderflow an. Alle drei sind notwendig für einen handelbaren Markt - politische Markets verfehlen die „definierte Zeitspanne“, Wetter-Markets den „kontinuierlichen Flow“, obskure Turniere die „öffentlichen Live-Daten“.
Die Trader-Population in Sports Markets ist auch vielfältiger als etwa in Election Markets. Gelegenheits-Sportwetter preisen emotional; informierte Trader korrigieren im Verlauf eines Spiels in Richtung Fair Value. Die Lücke zwischen beiden ist der Bot-Edge.
Die Volumenverteilung ist ungleich: Ein NFL-Sonntag verteilt Hunderte Millionen Dollar über Polymarket-Sports-Markets; ein Spiel der Saudi Pro League am Dienstagabend könnte unter 50.000 US-Dollar liegen. Richte deine Strategie nach dem, wo die Action tatsächlich ist.
Pre-Game vs. In-Game (verschiedene Bots)
Zwei grundlegend verschiedene Bot-Designs.
Pre-Game Line-Catcher: Märkte scannen, die gerade geöffnet wurden, falsch bepreiste Lines gegen dein Modell oder gegen die Zahl eines schärferen Venue identifizieren und einen FOK-Buy platzieren. Halten bis zum In-Play, manchmal bis zur Auflösung. Geschwindigkeit: Minuten, nicht Sekunden. Edge: Modell + Line-Shopping.
In-Game Microstructure: Abo auf das WebSocket des Order Books eines Live-Spiels, auf Ungleichgewichtssignale + Score-Events innerhalb von Sekunden reagieren. Geschwindigkeit: Sekunden, nicht Minuten. Edge: Latenz + Orderflow lesen.
Die beiden teilen fast keinen Code. Sie haben unterschiedliche Risikoprofile, unterschiedliche Datenquellen, unterschiedliche Exit-Strategien. Ein Bot, der versucht, beides zu tun, endet damit, keines von beidem gut zu machen; wähle eines.
Verifizierte Tag-IDs (745 NBA, 864 Tennis)
Production Tag-IDs, im Mai 2026 für große Sportkategorien verifiziert. Nutze diese, um /events-Aufrufe effizient zu filtern.
| Sport / Liga | Tag-ID | Tag-Slug | Notizen |
|---|---|---|---|
| NBA | 745 | nba | höchstes Volumen Okt-Jun |
| NFL | 450 | nfl | Peak So/Mo Sep-Feb |
| Tennis (alle) | 864 | tennis | ganzjährig, Turnier-Rhythmus |
| Soccer (allgemein) | 1059 | soccer | mit Sub-Tags unten kombinieren |
| EPL | 739 | epl | |
| UCL | 2186 | uefa-champions-league | |
| Esports (alle) | 702 | esports | LoL+CS2+Valorant+Dota |
| MLB | 1245 | mlb | Peak Apr-Oct |
| NHL | 823 | nhl | Peak Okt-Jun |
Tag-IDs sind über Jahre hinweg stabil. Neue Tags werden hinzugefügt (Saudi Pro League, IPL), aber alte Tags werden nicht neu nummeriert.
Datenquellen: ESPN, offizielle APIs, On-Screen
Für traditionelle Sports deckt die kostenlose ESPN-Scoreboard-API alles ab, was du brauchst: Scores, Period/Clock, Win-Probability, manchmal Shot Location. Kein Key erforderlich; nur auf IP-Ebene rate-limitiert. Endpoint-Pattern: https://site.api.espn.com/apis/site/v2/sports/<sport>/<league>/scoreboard.
Für Esports hat ESPN keine Coverage. Optionen: PandaScore ($30-60/Monat, der Branchenstandard), HLTV (nur CS2, scrapeable, keine API), Liquipedia (community-maintained, scrapeable, langsamere Update-Frequenz).
On-Screen-Feeds (für einen TV-Stream zahlen und die Scorebug per OCR auslesen) funktionieren, sind operativ aber aufwendig. Empfohlen nur, wenn du eine Strategie hast, die Sub-3-Sekunden-Updates auf einem Sport erfordert, für den keine API Echtzeit-Coverage bietet.
Latenzbudget für In-Game
Das End-to-End-Latenzbudget für einen reaktiven In-Game-Bot.
- Score-Event passiert: t=0
- Source-Feed reflektiert es: t+3-15s (ESPN: ~10s; PandaScore: ~3s)
- Dein Bot liest den Feed: t+10-16s
- Bot entscheidet sich für eine Aktion: +50ms
- FOK-Order platziert: +200-500ms
- Am CLOB gematcht: +300-1000ms (Netzwerk + Matching)
Gesamt: 11-17 Sekunden. Die schnellsten professionellen Firmen erreichen 3-5 Sekunden End-to-End mit bezahlten Premium-Feeds und co-located VPS. Retail-Bots auf Standard-Hosts und mit freiem ESPN liegen am langsameren Ende.
Strategien, die Sub-5s brauchen, sind für Retail nicht praktikabel. Strategien, die im 10-17-Sekunden-Fenster funktionieren, sind: Line-Catching nach einem Score, Fade von Überreaktionen, Late-Game-Certainty-Plays.
Die 0.99 / 0.01-Falle
Das häufigste In-Play-Sports-Bot-Fehlschlagen: den klaren Favoriten bei 0.99 mit einer Minute Restzeit kaufen und auf einfache +1¢ hoffen. Drei Gründe, warum das scheitert.
Erstens ist die 1% implizite Wahrscheinlichkeit des Underdogs nicht null - späte Comebacks passieren mit nicht trivialer Häufigkeit. Ein zu 99,5% sicherer Win, 200-mal gespielt, erzeugt einen Verlust bei voller Positionsgröße.
Zweitens bedeutet der Spread bei 0.99/0.01, dass du 99c pro Share zahlst, im Erfolgsfall 1c gewinnst und bei der seltenen Wende 99c verlierst. Das Risiko-Rendite-Verhältnis ist brutal.
Drittens wird der Bot, der einen GTC-Sell bei 0.999 nutzt, selten gefillt - zu diesem Preis gibt es keine Käufer. Die Position läuft bis zur Auflösung. Wenn sie gewinnt, hast du 1c bekommen. Wenn die Wende eintritt, verlierst du 99c.
Die Falle kostet echte Gelder von Builden, die die Mathematik nicht durchgerechnet haben. Bleib aus Markets mit einem Preis von 0.95+ heraus, es sei denn, deine Strategie ist speziell für das Redemption-Arbitrage-Profil gebaut.
Code: ein Games-Book abonnieren und reagieren
Referenz: das WebSocket eines bestimmten NBA-Spiels abonnieren, Book-Updates loggen, FOK bei einem Ungleichgewichtssignal auslösen.
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()
Production-Ergänzungen: Cooldown zwischen Auslösungen, per-Token Inventory Cap, Kill bei stale book (keine Nachricht in 30s).





