Polymarket Bot Tutorial · Kabanata 15 ng 32
Sports microstructure bots sa Polymarket: in-game edge, scoreline-driven mispricing, ang NBA tag (745) at Tennis tag (864), live data sources, at execution patterns para sa high-frequency sports markets.
Ano ang sinasaklaw ng kabanatang ito
Ang sports markets ay ang pinaka-consistent na active non-political segment sa Polymarket. Ang mga bots na gumagana ay nahahati sa dalawang malinaw na buckets: pre-game line-catchers na nag-trade kapag naka-set na ang line, at in-game microstructure bots na nag-react sa order-book movement habang naglalaro. Sinasaklaw ng kabanatang ito ang pareho na may specific tag IDs, data sources, at latency budgets na nalalapat sa bawat isa.
Ang sports markets ay ang pinaka-abala na non-political segment sa Polymarket. Ang execution pattern na gumagana ay nagsasama ng live-score feed (ESPN, PandaScore) sa order-book microstructure signals. Sinasaklaw ng kabanatang ito kung ano ang gumagana para sa NFL, NBA, soccer, at tennis nang partikular, at kung saan naiiba ang esports.
- Bakit tradeable ang sports markets
- Pre-game vs in-game (magkaibang bots)
- Verified tag IDs (745 NBA, 864 Tennis)
- Data sources: ESPN, official APIs, on-screen
- Latency budget para sa in-game
- Ang 0.99 / 0.01 trap
- Code: mag-subscribe sa games book at mag-react
Bakit tradeable ang sports markets
Ang sports markets ay nag-cle-clear sa defined timeframes (oras hanggang araw), may public live data, at nakakaakit ng tuloy-tuloy na order flow sa panahon ng mga laro. Lahat ng tatlo ay kinakailangan para sa tradeable market - ang political markets ay nawawalan ng "defined timeframe," ang weather markets ay nawawalan ng "continuous flow," ang obscure tournaments ay nawawalan ng "public live data."
Ang trader population sa sports markets ay mas magkakaiba din kaysa sa, halimbawa, election markets. Ang casual sports bettors ay nag-price emotionally; ang informed traders ay nag-correct papunta sa fair value sa kurso ng laro. Ang gap sa pagitan ng dalawa ay ang bot edge.
Hindi pantay ang volume distribution: ang NFL Sunday ay magro-rotate ng daan-daang milyong dolyar sa Polymarket sports markets; ang Tuesday-night Saudi Pro League fixture ay maaaring gumawa ng wala pang $50k. Sukatin ang iyong strategy kung saan talaga ang aksyon.
Pre-game vs in-game (magkaibang bots)
Dalawang pundamental na magkaibang bot designs.
Pre-game line-catcher: i-scan ang markets na kabubukas pa lang, i-identify ang mis-priced lines laban sa iyong model o laban sa numero ng mas matalim na venue, maglagay ng FOK buy. Hawakan sa in-play, minsan hanggang sa resolution. Speed: minuto-hindi-segundo. Edge: model + line-shopping.
In-game microstructure: mag-subscribe sa live game's order book WebSocket, mag-react sa imbalance signals + score events sa loob ng ilang segundo. Speed: segundo-hindi-minuto. Edge: latency + pagbasa ng order flow.
Ang dalawa ay walang halos shared code. Mayroon silang magkaibang risk profiles, magkaibang data sources, magkaibang exit strategies. Ang bot na nagtatangkang gawin ang pareho ay nauuwi sa hindi paggawa ng alinman nang maayos; pumili ng isa.
Verified tag IDs (745 NBA, 864 Tennis)
Production tag IDs verified Mayo 2026 para sa major sports categories. Gamitin ang mga ito upang mag-filter ng /events calls nang efficient.
| Sport / League | Tag ID | Tag slug | Notes |
|---|---|---|---|
| NBA | 745 | nba | pinakamataas na volume Oct-Jun |
| NFL | 450 | nfl | peak Sun/Mon Sep-Feb |
| Tennis (lahat) | 864 | tennis | buong taon, tournament cadence |
| Soccer (general) | 1059 | soccer | pagsamahin sa sub-tags sa ibaba |
| EPL | 739 | epl | |
| UCL | 2186 | uefa-champions-league | |
| Esports (lahat) | 702 | esports | LoL+CS2+Valorant+Dota |
| MLB | 1245 | mlb | peak Apr-Oct |
| NHL | 823 | nhl | peak Oct-Jun |
Ang tag IDs ay matatag sa kabuuan ng mga taon. Ang mga bagong tags ay idinaragdag (Saudi Pro League, IPL) ngunit ang mga lumang tags ay hindi na-renumber.
Data sources: ESPN, official APIs, on-screen
Para sa traditional sports ang libreng ESPN scoreboard API ay sumasaklaw sa lahat ng kailangan mo: scores, period/clock, win-probability, minsan shot location. Walang key na kinakailangan; rate-limited lamang sa IP level. Endpoint pattern: https://site.api.espn.com/apis/site/v2/sports/<sport>/<league>/scoreboard.
Para sa esports, ang ESPN ay walang coverage. Mga opsyon: PandaScore ($30-60/buwan, industry standard), HLTV (CS2 lamang, scrapeable, walang API), Liquipedia (community-maintained, scrapeable, mas mabagal ang update cadence).
Ang on-screen feeds (pagbabayad para sa TV stream at OCR-reading ang scorebug) ay gumagana ngunit operationally heavy. Inirerekomenda lamang kung mayroon kang strategy na nangangailangan ng sub-3-second updates sa isang sport na walang API na sumasaklaw sa real time.
Latency budget para sa in-game
Ang end-to-end latency budget para sa in-game reactive bot.
- Nangyayari ang score event: t=0
- Source feed nagre-reflect: t+3-15s (ESPN: ~10s; PandaScore: ~3s)
- Binabasa ng iyong bot ang feed: t+10-16s
- Nagdedesisyon ang bot ng action: +50ms
- Inilagay ang FOK order: +200-500ms
- Naka-match sa CLOB: +300-1000ms (network + matching)
Total: 11-17 segundo. Ang pinakamabilis na professional firms ay nakakamit ng 3-5 segundo end-to-end na may paid premium feeds at co-located VPS. Ang retail bots na tumatakbo sa standard hosts at libreng ESPN ay nasa mas mabagal na dulo.
Ang mga strategies na nangangailangan ng sub-5s ay hindi viable para sa retail. Ang mga strategies na gumagana sa 10-17s window ay: line-catching pagkatapos ng score, fading overreactions, late-game certainty plays.
Ang 0.99 / 0.01 trap
Ang pinakakaraniwang in-play sports bot failure: pagbili ng heavy favorite sa 0.99 na may isang minuto natitira, na inaasahan ang madaling +1¢. Tatlong dahilan kung bakit ito nabigo.
Una, ang 1% implied probability ng underdog ay hindi zero - ang late comebacks ay nangyayari sa hindi-trivial na frequency. Ang 99.5% certain win, nilaro ng 200 beses, ay gumagawa ng isang pagkawala para sa full position size.
Pangalawa, ang spread sa 0.99/0.01 ay nangangahulugang nagbabayad ka ng 99c bawat share, panalo ng 1c sa tagumpay, talo ng 99c sa bihirang reversal. Ang risk-reward ay brutal.
Pangatlo, ang bot na gumagamit ng GTC sell sa 0.999 ay bihira mag-fill - walang buyers sa presyong iyon. Ang position ay sumasakay sa resolution. Kung manalo, nakakuha ka ng 1c. Kung mangyari ang reversal, mawawalan ka ng 99c.
Ang trap ay totoong pera na nawala ng mga builders na hindi nagpatakbo ng math. Manatiling malayo sa 0.95+ priced markets maliban kung ang iyong strategy ay partikular na binuo para sa redemption-arbitrage profile.
Code: mag-subscribe sa games book at mag-react
Reference: mag-subscribe sa specific NBA game's WebSocket, mag-log ng book updates, mag-fire ng FOK sa imbalance signal.
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 additions: cooldown sa pagitan ng fires, per-token inventory cap, kill sa stale book (walang mensahe sa 30s).





