Polymarket Bot Tutorial · Bab 15 dari 32
Sports microstructure bots di Polymarket: edge saat in-game, mispricing yang didorong scoreline, tag NBA (745) dan Tennis (864), live data sources, serta execution patterns untuk high-frequency sports markets.
Apa yang dibahas dalam bab ini
Sports markets adalah segmen non-political yang paling konsisten aktif di Polymarket. Bot yang benar-benar bekerja terbagi dalam dua kategori yang jelas: pre-game line-catchers yang trading setelah line terbentuk, dan in-game microstructure bots yang bereaksi terhadap pergerakan order book saat pertandingan berlangsung. Bab ini membahas keduanya dengan tag ID, data sources, dan latency budget spesifik yang berlaku untuk masing-masing.
Sports markets adalah segmen non-political tersibuk di Polymarket. Pola eksekusi yang bekerja menggabungkan live-score feed (ESPN, PandaScore) dengan sinyal microstructure order book. Bab ini membahas apa yang bekerja khusus untuk NFL, NBA, soccer, dan tennis, serta perbedaan pada esports.
- Mengapa sports markets bisa ditradingkan
- Pre-game vs in-game (bot yang berbeda)
- Verified tag IDs (745 NBA, 864 Tennis)
- Data sources: ESPN, official APIs, on-screen
- Latency budget untuk in-game
- Jebakan 0.99 / 0.01
- Code: subscribe ke games book dan bereaksi
Mengapa sports markets bisa ditradingkan
Sports markets selesai dalam timeframe yang jelas (jam hingga hari), memiliki public live data, dan menarik arus order yang terus-menerus selama pertandingan. Ketiganya diperlukan agar market bisa ditradingkan - political markets tidak punya "defined timeframe," weather markets tidak punya "continuous flow," turnamen yang tidak populer tidak punya "public live data."
Populasi trader di sports markets juga lebih beragam dibandingkan, misalnya, election markets. Petaruh olahraga kasual memberi harga secara emosional; trader yang lebih terinformasi mengoreksi harga menuju fair value sepanjang pertandingan. Kesenjangan di antara keduanya adalah edge bot.
Distribusi volume tidak merata: NFL Sunday bisa memutar ratusan juta dolar di seluruh sports markets Polymarket; pertandingan Saudi Pro League pada Selasa malam mungkin hanya di bawah $50k. Sesuaikan strategi Anda dengan tempat aktivitas yang benar-benar ada.
Pre-game vs in-game (bot yang berbeda)
Dua desain bot yang secara fundamental berbeda.
Pre-game line-catcher: memindai market yang baru dibuka, mengidentifikasi line yang salah harga terhadap model Anda atau terhadap angka dari venue yang lebih sharp, lalu memasang buy FOK. Menahan posisi sampai in-play, kadang sampai resolusi. Kecepatan: menit, bukan detik. Edge: model + line-shopping.
In-game microstructure: subscribe ke WebSocket order book pertandingan live, bereaksi terhadap sinyal imbalance + event skor dalam hitungan detik. Kecepatan: detik, bukan menit. Edge: latency + membaca order flow.
Keduanya hampir tidak berbagi code. Risiko, data sources, dan exit strategy mereka berbeda. Bot yang mencoba melakukan keduanya biasanya malah tidak melakukan keduanya dengan baik; pilih salah satu.
Verified tag IDs (745 NBA, 864 Tennis)
Production tag IDs yang diverifikasi pada Mei 2026 untuk kategori sports utama. Gunakan ini untuk memfilter panggilan /events secara efisien.
| Sport / League | Tag ID | Tag slug | Notes |
|---|---|---|---|
| NBA | 745 | nba | highest volume Oct-Jun |
| NFL | 450 | nfl | peak Sun/Mon Sep-Feb |
| Tennis (all) | 864 | tennis | year-round, tournament cadence |
| Soccer (general) | 1059 | soccer | combine with sub-tags below |
| EPL | 739 | epl | |
| UCL | 2186 | uefa-champions-league | |
| Esports (all) | 702 | esports | LoL+CS2+Valorant+Dota |
| MLB | 1245 | mlb | peak Apr-Oct |
| NHL | 823 | nhl | peak Oct-Jun |
Tag IDs stabil dari tahun ke tahun. Tag baru ditambahkan (Saudi Pro League, IPL) tetapi tag lama tidak diganti nomor.
Data sources: ESPN, official APIs, on-screen
Untuk traditional sports, gratis ESPN scoreboard API mencakup semua yang Anda butuhkan: skor, period/clock, win-probability, kadang shot location. Tidak perlu key; rate-limited hanya di level IP. Pola endpoint: https://site.api.espn.com/apis/site/v2/sports/<sport>/<league>/scoreboard.
Untuk esports, ESPN tidak punya coverage. Opsi: PandaScore ($30-60/bulan, standard industri), HLTV (khusus CS2, bisa di-scrape, tanpa API), Liquipedia (dikelola komunitas, bisa di-scrape, cadence pembaruan lebih lambat).
On-screen feeds (membayar stream TV dan OCR pada scorebug) bisa bekerja, tetapi operasionalnya berat. Disarankan hanya jika Anda punya strategi yang membutuhkan update sub-3-detik pada sport yang tidak punya API real-time.
Latency budget untuk in-game
End-to-end latency budget untuk bot reaktif in-game.
- Score event terjadi: t=0
- Source feed merefleksikan: t+3-15s (ESPN: ~10s; PandaScore: ~3s)
- Bot Anda membaca feed: t+10-16s
- Bot memutuskan aksi: +50ms
- FOK order ditempatkan: +200-500ms
- Matched di CLOB: +300-1000ms (network + matching)
Total: 11-17 detik. Firma profesional tercepat mencapai 3-5 detik end-to-end dengan paid premium feeds dan co-located VPS. Bot retail yang berjalan di host standar dan ESPN gratis berada di sisi yang lebih lambat.
Strategi yang membutuhkan sub-5 detik tidak layak untuk retail. Strategi yang bekerja dalam window 10-17 detik adalah: line-catching setelah skor, fading overreaction, late-game certainty plays.
The 0.99 / 0.01 trap
Kegagalan bot sports in-play yang paling umum: membeli heavy favorite di 0.99 dengan sisa satu menit, berharap mudah dapat +1¢. Ada tiga alasan mengapa ini gagal.
Pertama, probabilitas implisit 1% dari underdog bukan nol - comeback di menit akhir terjadi dengan frekuensi yang tidak sepele. Kemenangan yang 99,5% pasti, jika dimainkan 200 kali, menghasilkan satu kekalahan untuk ukuran posisi penuh.
Kedua, spread di 0.99/0.01 berarti Anda membayar 99c per share, menang 1c saat berhasil, kalah 99c saat reversal langka terjadi. Risk-reward-nya brutal.
Ketiga, bot yang memakai GTC sell di 0.999 hampir tidak akan terisi - tidak ada buyer di harga itu. Posisi berjalan sampai resolusi. Jika menang, Anda mendapat 1c. Jika reversal terjadi, Anda kalah 99c.
Jebakan ini adalah uang nyata yang hilang oleh builder yang tidak menghitung matematikanya. Jauhi market dengan harga 0.95+ kecuali strategi Anda memang dirancang khusus untuk profil redemption-arbitrage.
Code: subscribe ke games book dan bereaksi
Reference: subscribe ke WebSocket dari satu game NBA tertentu, log update book, jalankan FOK saat sinyal imbalance muncul.
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()
Penambahan produksi: cooldown antar-fire, per-token inventory cap, kill jika book stale (tidak ada pesan selama 30 detik).





