Polymarket Bot Tutorial · 32 bölümün 15.si
Polymarket'te sports microstructure botları: oyun içi edge, scoreline odaklı mispricing, NBA tag'i (745) ve Tennis tag'i (864), live data kaynakları ve yüksek frekanslı sports markets için execution patterns.
Bu bölüm neleri kapsıyor
Sports markets, Polymarket'teki siyasi olmayan segmentler arasında en istikrarlı şekilde aktif olanıdır. İşe yarayan botlar iki net gruba ayrılır: line belirlendikten sonra trade yapan pre-game line-catcher'lar ve oyun sırasında order-book hareketine tepki veren in-game microstructure botları. Bu bölüm, her biri için geçerli olan özel tag ID'leri, data sources ve latency budget'larıyla birlikte ikisini de kapsar.
Sports markets, Polymarket'teki siyasi olmayan en yoğun segmenttir. İşe yarayan execution pattern, live-score feed (ESPN, PandaScore) ile order-book microstructure sinyallerini birleştirir. Bu bölüm, özellikle NFL, NBA, soccer ve tennis için neyin işe yaradığını ve esports'un nerede farklılaştığını kapsar.
- Sports markets neden trade edilebilir
- Pre-game ve in-game (farklı botlar)
- Doğrulanmış tag ID'leri (745 NBA, 864 Tennis)
- Data sources: ESPN, resmi APIs, on-screen
- In-game için latency budget
- 0.99 / 0.01 tuzağı
- Kod: bir games book'a subscribe ol ve tepki ver
Sports markets neden trade edilebilir
Sports markets tanımlı zaman dilimlerinde (saatlerden günlere) kapanır, public live data'ya sahiptir ve oyun sırasında sürekli order flow çeker. Trade edilebilir bir market için bu üçünün de gerekli olması gerekir - siyasi marketlerde "tanımlı zaman dilimi" eksiktir, weather markets'te "sürekli flow" eksiktir, belirsiz turnuvalarda ise "public live data" eksiktir.
Sports markets'teki trader kitlesi de, örneğin election markets'e kıyasla, daha çeşitlidir. Sıradan sports bettors duygusal fiyatlama yapar; bilgili traders ise oyun boyunca fair value'ya doğru düzeltme yapar. İkisi arasındaki fark bot edge'idir.
Volume dağılımı eşit değildir: bir NFL Sunday, Polymarket sports markets arasında yüz milyonlarca doları döndürebilir; bir Salı gecesi Saudi Pro League karşılaşması ise 50 bin doların altında kalabilir. Stratejinizi, hareketin gerçekten olduğu yere göre boyutlandırın.
Pre-game ve in-game (farklı botlar)
Temelde birbirinden farklı iki bot tasarımı vardır.
Pre-game line-catcher: yeni açılan marketleri tarar, kendi modelinize veya daha sharp bir venue'nün rakamına göre yanlış fiyatlanan line'ları belirler, FOK buy yerleştirir. In-play'e, bazen resolution'a kadar taşır. Hız: saniyeler değil, dakikalar. Edge: model + line-shopping.
In-game microstructure: canlı bir oyunun order book WebSocket'ine subscribe olur, imbalance sinyalleri + score event'lerine saniyeler içinde tepki verir. Hız: dakikalar değil, saniyeler. Edge: latency + order flow okuma.
İkisinin kodu neredeyse hiç ortak değildir. Risk profilleri, data sources'ları ve exit strategy'leri farklıdır. İkisini birden yapmaya çalışan bir bot sonunda ikisini de iyi yapamaz; birini seçin.
Doğrulanmış tag ID'leri (745 NBA, 864 Tennis)
Majör sports kategorileri için Mayıs 2026'da doğrulanmış production tag ID'leri. Bunları /events çağrılarını verimli şekilde filtrelemek için kullanın.
| Sport / League | Tag ID | Tag slug | Notlar |
|---|---|---|---|
| NBA | 745 | nba | Oct-Jun arasında en yüksek volume |
| NFL | 450 | nfl | Sep-Feb arası Sun/Mon zirvesi |
| Tennis (all) | 864 | tennis | yıl boyu, turnuva ritmi |
| Soccer (general) | 1059 | soccer | aşağıdaki alt tag'lerle birlikte kullanın |
| EPL | 739 | epl | |
| UCL | 2186 | uefa-champions-league | |
| Esports (all) | 702 | esports | LoL+CS2+Valorant+Dota |
| MLB | 1245 | mlb | Apr-Oct arasında zirve |
| NHL | 823 | nhl | Oct-Jun arasında zirve |
Tag ID'leri yıllar boyunca sabittir. Yeni tag'ler eklenir (Saudi Pro League, IPL) ama eski tag'ler yeniden numaralandırılmaz.
Data sources: ESPN, resmi APIs, on-screen
Geleneksel sports'lar için ücretsiz ESPN scoreboard API ihtiyacınız olan her şeyi kapsar: scores, period/clock, win-probability, bazen shot location. Key gerekmez; yalnızca IP seviyesinde rate-limited'dır. Endpoint pattern: https://site.api.espn.com/apis/site/v2/sports/<sport>/<league>/scoreboard.
Esports için ESPN coverage sağlamaz. Seçenekler: PandaScore ($30-60/ay, sektör standardı), HLTV (sadece CS2, scrape edilebilir, API yok), Liquipedia (community-maintained, scrape edilebilir, daha yavaş update cadence).
On-screen feed'ler (bir TV stream'i için ödeme yapıp scorebug'u OCR ile okumak) çalışır, ancak operasyonel olarak ağırdır. Yalnızca hiçbir API'nin real time olarak kapsamadığı bir sport için sub-3-second update gerektiren bir stratejiniz varsa önerilir.
In-game için latency budget
In-game reactive bir bot için uçtan uca latency budget.
- Score event gerçekleşir: t=0
- Source feed bunu yansıtır: t+3-15s (ESPN: ~10s; PandaScore: ~3s)
- Bot'unuz feed'i okur: t+10-16s
- Bot action'a karar verir: +50ms
- FOK order yerleştirilir: +200-500ms
- CLOB'da matched olur: +300-1000ms (network + matching)
Toplam: 11-17 saniye. En hızlı profesyonel firmalar ücretli premium feeds ve co-located VPS ile uçtan uca 3-5 saniye elde eder. Standart host'larda ve ücretsiz ESPN ile çalışan retail botlar daha yavaş uçtadır.
Sub-5s gerektiren stratejiler retail için uygulanabilir değildir. 10-17 saniyelik pencerede çalışan stratejiler şunlardır: score sonrası line-catching, overreaction fade etmek, late-game certainty play'leri.
0.99 / 0.01 tuzağı
In-play sports bot'larının en yaygın başarısızlık biçimi: bir dakika kala ağır favoriyi 0.99'dan almak ve kolay +1¢ beklemek. Bunun başarısız olmasının üç nedeni var.
Birincisi, underdog'un %1'lik implied probability'si sıfır değildir - son dakika geri dönüşleri önemsiz olmayan bir sıklıkla olur. %99.5 kesin görünen bir win, 200 kez oynandığında tam pozisyon boyutunda bir kayıp üretir.
İkincisi, 0.99/0.01 spread'i, share başına 99c ödediğiniz, başarıda 1c kazandığınız ve nadir tersine dönüşte 99c kaybettiğiniz anlamına gelir. Risk-reward çok serttir.
Üçüncüsü, 0.999'da GTC sell kullanan bot nadiren fill alır - o fiyatta buyer yoktur. Position resolution'a kadar taşınır. Kazanırsa 1c aldınız. Tersine dönüş olursa 99c kaybedersiniz.
Bu tuzak, matematiği yapmadan ilerleyen builder'ların gerçek para kaybetmesine yol açar. Redemption-arbitrage profili için özel olarak tasarlanmamış stratejilerde 0.95+ fiyatlı market'lerden uzak durun.
Kod: bir games book'a subscribe ol ve tepki ver
Referans: belirli bir NBA oyununun WebSocket'ine subscribe ol, book update'lerini logla, imbalance sinyali geldiğinde FOK gönder.
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 eklemeleri: tetiklemeler arasında cooldown, token başına inventory cap, stale book'ta kill (30 saniyede mesaj yoksa).





