Polymarket Bot Tutorial · Chương 25 trên 32
Các sports market bot trên Polymarket: NFL weekly games, NBA tag (745) microstructure, soccer (Premier League, Bundesliga, Champions League), tennis (864) - liquidity, edge sources, code patterns.
Chương này đề cập những gì
NFL, NBA, Soccer và Tennis là các danh mục sports có volume lớn nhất trên Polymarket. Mỗi môn có mức độ availability dữ liệu, cadence và edge profile riêng. Chương này sẽ đề cập các bot pattern theo từng league và các tag ID mà bạn sẽ filter.
- 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 có nhịp điệu theo tuần mạnh nhất trong tất cả các sports trên Polymarket. Markets mở vào thứ Ba sau các trận của tuần trước, line-shop diễn ra từ thứ Tư đến thứ Sáu, betting volume đạt đỉnh vào thứ Bảy và Chủ nhật. Resolution thường diễn ra vào tối Chủ nhật đối với các trận sớm, và tối thứ Hai đối với trận muộn.
Bot pattern: line-catcher vào thứ Ba-Thứ Tư khi opening line được thiết lập, in-play vào Chủ nhật trong giai đoạn volume cao nhất. Mỗi khung thời gian nên dùng bot khác nhau. Market của Monday Night Football thường có volume mỏng hơn các trận khác - hãy lưu ý vì nó có risk slippage cao hơn khi vào lệnh size nhỏ.
Đỉnh volume là Super Bowl: hơn $50M được trade trên tất cả các SB markets trong tuần diễn ra trận đấu. Ngay cả một bot $100 trong tuần đó cũng chỉ là nhiễu không đáng kể; ở quy mô đó, market đã rất efficient.
NBA (tag 745): in-game microstructure
NBA là sports có tần suất cao nhất trên Polymarket - 25-30 trận mỗi tuần trong mùa regular season, 5-15 trận trong playoffs. Tag ID 745 dùng để filter các event chỉ thuộc NBA.
In-game microstructure hoạt động tốt với NBA vì: (1) ESPN cập nhật scoreboard khoảng mỗi 10 giây, (2) trận đấu kéo dài 2,5 giờ với action liên tục, (3) books của Polymarket cho các trận lớn vẫn giữ độ sâu tốt đến hết hiệp 4.
Chiến lược hiệu quả: subscribe vào WS book của một trận + ESPN feed, phản ứng với imbalance + score events trong 10-15 giây. Chiến lược không hiệu quả: pre-game line catching (đủ efficient để retail không bắt được nhiều), late-game certainty arbitrage (vùng 0.99-trap).
Soccer: international vs club leagues
Soccer trên Polymarket có thể chia thành ba tầng chính.
- Top European leagues (EPL tag 739, La Liga, Bundesliga, Serie A) - volume trung bình, books sâu ở các trận lớn. Bot strategy tương tự NBA.
- Champions League / Europa League (UCL tag 2186) - volume đạt đỉnh ở các vòng knock-out. Books sâu nhất từ vòng 16 đội trở đi.
- International / smaller leagues (Saudi Pro League, MLS, J-League) - books mỏng, spread lớn. Thường không phải vùng dành cho bot.
Scoring rời rạc của soccer (0-1 goals là các biến cố rất lớn) khiến nó khác với dòng chảy liên tục của NBA. Bot pattern cho soccer là: đứng đúng phía trước khi có bàn thắng, thoát nhanh sau khi biến cố xảy ra.
Tennis (tag 864): tournament cadence
Tennis tag 864. ATP và WTA tour diễn ra 11 tháng mỗi năm với Grand Slams vào tháng 1 (Australian Open), tháng 5-6 (French Open), tháng 7 (Wimbledon), và tháng 8-9 (US Open). Volume tập trung vào bốn tuần này cộng thêm loạt Masters 1000.
Tennis có price ladder in-play rõ ràng nhất trong mọi sports (chương 15). Giá giữa trận đi theo các đường cong có thể dự đoán, gắn với trạng thái set và break. Một bot có mô hình price ladder riêng cho tennis có thể phát hiện mispricing theo thời gian thực.
Khoảng thời gian yên ắng: giữa các Grand Slam, những tuần chỉ có giải ATP 250 / ATP 500, books rất mỏng. Hãy tạm dừng bot hoặc chuyển sang sport khác trong các giai đoạn này.
Edge sources that survive
Trên cả bốn sports, những edge tồn tại lâu dài theo thời gian là:
- Pre-game line shop so với số của một venue sắc hơn (Pinnacle, Betfair). Khi Polymarket lệch hơn 3c so với một sharp book, hãy fade Polymarket.
- In-play overreaction với một play đơn lẻ (interception, injury, momentum shift). Chờ 30-60 giây sau play, fade nếu market đã đi quá xa.
- Late-game heavy favorites ở 0.85-0.92 với sizing được quản lý rủi ro. Dưới 0.85 = risk thực sự; trên 0.92 = 0.99 trap.
Những edge không tồn tại lâu: pure technical analysis trên giá, sentiment scraping từ Twitter, các hiệu ứng mùa vụ theo lịch.
Live data: ESPN, official APIs
Ma trận data source cho bốn sports.
| 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 miễn phí và đáng tin cậy cho cả bốn môn. Với cập nhật dưới 10 giây, hãy trả tiền cho một specialized feed (StatsPerform, GeniusSports) - nhưng cải thiện latency biên thường hiếm khi xứng đáng với chi phí đối với 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)
Lưu ý: API của Pinnacle / Betfair yêu cầu tài khoản; không miễn phí. Nếu không có sharp reference, line-catching sẽ chỉ còn là opinion so với opinion, và đó không phải vùng dành cho bot.





