Polymarket Bot Tutorial · Rozdział 25 z 32
Sportowe boty rynkowe na Polymarket: NFL weekly games, NBA tag (745) microstructure, soccer (Premier League, Bundesliga, Champions League), tennis (864) - liquidity, edge sources, code patterns.
Co obejmuje ten rozdział
NFL, NBA, Soccer i Tennis to największe wolumeny sportowe Polymarket w swoich kategoriach. Każdy z tych rynków ma własną dostępność danych, rytm i profil edge. Ten rozdział omawia specyficzne dla lig wzorce botów oraz tag IDs, po których będziesz filtrować.
To jest rozdział 25 z naszej 32-częściowej serii o budowie Polymarket trading bota. Temat omawiamy szczegółowo w sekcjach poniżej. Treść główna dla każdej sekcji jest pisana i publikowana rozdział po rozdziale; odpowiedzi FAQ i referencje są już kompletne i odzwierciedlają doświadczenie produkcyjne z uruchamiania naszego własnego trader.
- NFL: weekly cadence, peak liquidity Sunday
- NBA (tag 745): in-game microstructure
- Soccer: international vs club leagues
- Tennis (tag 864): tournament cadence
- Edge sources that survive
- Live data: ESPN, official APIs
- Sample bot: pre-game line catcher
NFL: weekly cadence, peak liquidity Sunday
NFL ma najsilniejszy tygodniowy rytm spośród wszystkich sportów na Polymarket. Markets otwierają się we wtorek po meczach z poprzedniego tygodnia, line-shop odbywa się od środy do piątku, a volume bettingowy osiąga szczyt w sobotę i niedzielę. Resolution zwykle następuje w niedzielny wieczór dla wcześniejszych meczów, a w poniedziałek wieczorem dla tego późnego.
Wzorzec bota: line-catcher we wtorek i środę, gdy ustalany jest opening line, oraz in-play w niedzielę podczas peak volume. Dla każdego okna potrzebny jest osobny bot. Market Monday Night Football często ma mniejszy volume niż inne mecze — miej świadomość, że przy małych wejściach rośnie ryzyko slippage.
Szczyt volume przypada na Super Bowl: ponad $50M tradingu we wszystkich SB markets w tygodniu meczu. Nawet bot za $100 w tym tygodniu to nieistotny szum; market jest na tej skali efficient.
NBA (tag 745): in-game microstructure
NBA to sport o najwyższej częstotliwości na Polymarket — 25-30 meczów tygodniowo w regular season, 5-15 w playoffs. Tag ID 745 filtruje wydarzenia wyłącznie NBA.
In-game microstructure działa w NBA, ponieważ: (1) ESPN aktualizuje scoreboardy co około 10 sekund, (2) mecze trwają 2,5 godziny ciągłej akcji, (3) książki Polymarket dla dużych meczów pozostają głębokie aż do 4. kwarty.
Strategia, która działa: subscribe do WS book danego meczu + feed ESPN, reaguj na imbalance i zdarzenia punktowe w ciągu 10-15 sekund. Strategie, które nie działają: pre-game line catching (na tyle efficient, że retail niewiele wyłapuje), late-game certainty arbitrage (terytorium 0.99-trap).
Soccer: international vs club leagues
Soccer dzieli się na trzy przybliżone tier na Polymarket.
- Top European leagues (EPL tag 739, La Liga, Bundesliga, Serie A) — moderate volume, deep books na dużych meczach. Strategie botów są podobne do NBA.
- Champions League / Europa League (UCL tag 2186) — peak volume podczas fazy pucharowej. Books są najgłębsze od 1/8 finału wzwyż.
- International / smaller leagues (Saudi Pro League, MLS, J-League) — thin books, duże spreads. Zwykle nie jest to territory dla botów.
Discreet scoring w soccerze (0-1 gole to ogromne zdarzenia) odróżnia go od ciągłego flow NBA. Wzorzec bota dla soccera jest taki: być po właściwej stronie przed padnięciem gola, wyjść szybko po jego trafieniu.
Tennis (tag 864): tournament cadence
Tennis tag 864. ATP i WTA grają przez 11 miesięcy w roku, a Grand Slams odbywają się w styczniu (Australian Open), maju-czerwcu (French Open), lipcu (Wimbledon) oraz sierpniu-wrześniu (US Open). Volume koncentruje się w tych czterech tygodniach oraz w serii Masters 1000.
Tennis ma najczytelniejsze in-play price ladders spośród wszystkich sportów (chapter 15). Mid-match prices podążają za przewidywalnymi krzywymi opartymi na stanach set-and-break. Bot z modelem price ladder specyficznym dla tenisa może wykrywać mispricing w czasie rzeczywistym.
Ciche okna: między Grand Slams, w tygodniach z samymi turniejami ATP 250 / ATP 500 books są bardzo thin. W takich okresach wstrzymaj bota albo przenieś się na inny sport.
Edge sources that survive
We wszystkich czterech sportach edge, które utrzymują się w czasie, to:
- Pre-game line shop względem sharper venue's number (Pinnacle, Betfair). Gdy Polymarket różni się od sharp book o > 3c, fade Polymarket.
- In-play overreaction na pojedynczą akcję (interception, injury, momentum shift). Poczekaj 30-60 sekund po akcji, fade jeśli market przesadził.
- Late-game heavy favorites at 0.85-0.92 z risk-managed sizing. Poniżej 0.85 = real risk; powyżej 0.92 = 0.99 trap.
Edge, które nie utrzymują się: czysta technical analysis cen, sentiment scraping z Twittera, sezonowe efekty oparte na kalendarzu.
Live data: ESPN, official APIs
Macierz źródeł danych dla czterech sportów.
| Sport | Primary | Backup | Update cadence |
|---|---|---|---|
| NFL | ESPN scoreboard | NFL.com feed | ~10s during play |
| NBA | ESPN scoreboard | stats.nba.com | ~10s during play |
| Soccer (EPL/UCL) | ESPN scoreboard | SofaScore | ~15-30s |
| Tennis (ATP/WTA) | ESPN scoreboard | tennis.com live | ~30s (point-level) |
ESPN jest darmowy i reliable dla wszystkich czterech sportów. Dla aktualizacji poniżej 10 sekund zapłać za specjalistyczny feed (StatsPerform, GeniusSports) — ale marginalne zmniejszenie latency rzadko uzasadnia koszt dla retail.
Sample bot: pre-game line catcher
Reference: pre-game line-catcher pseudocode.
def line_catcher():
# Find games starting in the next 2-12 hours
events = gamma_events(tag_id=745, hours_ahead=12)
for ev in events:
for m in ev["markets"]:
polymarket_prob = float(json.loads(m["outcomePrices"])[0])
sharp_prob = fetch_pinnacle_implied(ev["slug"]) # 3rd-party feed
if sharp_prob - polymarket_prob > 0.04:
# Polymarket has the YES side cheap vs sharp
tok = json.loads(m["clobTokenIds"])[0]
place_fok(tok, "BUY", polymarket_prob + 0.01, size=10)
elif polymarket_prob - sharp_prob > 0.04:
# Polymarket has the NO side cheap vs sharp
tok = json.loads(m["clobTokenIds"])[1]
place_fok(tok, "BUY", 1 - polymarket_prob + 0.01, size=10)
Uwagi: Pinnacle / Betfair APIs wymagają kont; nie są darmowe. Bez sharp reference line-catching sprowadza się do opinion vs opinion, a to nie jest territory dla botów.











