Polymarket Bot Tutorial · บทที่ 25 จาก 32
บอทตลาดกีฬาใน Polymarket: เกม NFL รายสัปดาห์, microstructure ของแท็ก NBA (745), ฟุตบอล (Premier League, Bundesliga, Champions League), เทนนิส (864) - liquidity, แหล่งที่มาของ edge, รูปแบบโค้ด.
บทนี้ครอบคลุมอะไร
NFL, NBA, Soccer และ Tennis คือหมวดกีฬาที่มีปริมาณซื้อขายสูงที่สุดของ Polymarket แต่ละหมวดมีแหล่งข้อมูล, ความถี่, และลักษณะของ edge ที่ต่างกัน บทนี้จะครอบคลุมรูปแบบบอทเฉพาะของแต่ละลีก และ tag IDs ที่คุณจะใช้กรอง
- NFL: จังหวะรายสัปดาห์, liquidity สูงสุดวันอาทิตย์
- NBA (tag 745): in-game microstructure
- Soccer: ลีกนานาชาติ vs ลีกสโมสร
- Tennis (tag 864): จังหวะของทัวร์นาเมนต์
- แหล่งของ edge ที่ยังอยู่รอด
- ข้อมูลสด: ESPN, official APIs
- ตัวอย่างบอท: pre-game line catcher
NFL: จังหวะรายสัปดาห์, liquidity สูงสุดวันอาทิตย์
NFL มีจังหวะรายสัปดาห์ที่ชัดที่สุดในบรรดากีฬาบน Polymarket ตลาดจะเปิดวันอังคารหลังเกมของสัปดาห์ก่อน, line-shop เกิดวันพุธถึงศุกร์, ปริมาณเดิมพันพุ่งสูงสุดวันเสาร์ถึงอาทิตย์ โดยทั่วไปการตัดสินผลจะเกิดคืนวันอาทิตย์สำหรับเกมช่วงต้น และคืนวันจันทร์สำหรับเกมดึก
รูปแบบบอท: line-catcher วันอังคารถึงพุธเมื่อ opening line ถูกตั้ง, in-play วันอาทิตย์ระหว่างช่วงที่ volume สูงสุด ใช้บอทคนละตัวสำหรับแต่ละช่วงเวลา เกม Monday Night Football มักมี volume บางกว่าเกมอื่น-ระวัง slippage risk ที่สูงกว่าสำหรับการเข้า size เล็ก
จุดพีคของ volume คือ Super Bowl: มีการเทรดมากกว่า $50M รวมทุกตลาดของ SB ในสัปดาห์ของเกม แม้บอท $100 ในสัปดาห์นั้นก็แทบไม่มีนัย ตลาดมีประสิทธิภาพในสเกลนั้น
NBA (tag 745): in-game microstructure
NBA คือกีฬาที่มีความถี่สูงที่สุดบน Polymarket-25-30 เกมต่อสัปดาห์ในช่วง regular season, 5-15 เกมในช่วง playoffs Tag ID 745 ใช้กรองเฉพาะอีเวนต์ NBA
in-game microstructure ใช้ได้กับ NBA เพราะ: (1) ESPN อัปเดต scoreboards ทุก ~10 วินาที, (2) เกมกินเวลาราว 2.5 ชั่วโมงของ action ต่อเนื่อง, (3) order book ของเกมใหญ่ยังคงลึกตลอดจนถึงควอเตอร์ 4
กลยุทธ์ที่ได้ผล: subscribe ทั้ง WS book ของเกม + ESPN feed แล้วตอบสนองต่อ imbalance + score events ภายใน 10-15 วินาที กลยุทธ์ที่ไม่ได้ผล: pre-game line catching (มีประสิทธิภาพมากพอจนรายย่อยแทบจับไม่ได้), late-game certainty arbitrage (ดินแดน 0.99-trap)
Soccer: ลีกนานาชาติ vs ลีกสโมสร
Soccer แบ่งคร่าว ๆ บน Polymarket ออกเป็นสามระดับ
- ลีกยุโรประดับท็อป (EPL tag 739, La Liga, Bundesliga, Serie A)-volume ปานกลาง, books ลึกในแมตช์ใหญ่ กลยุทธ์บอทคล้าย NBA
- Champions League / Europa League (UCL tag 2186)-volume พุ่งในรอบน็อกเอาต์ books ลึกที่สุดตั้งแต่รอบ 16 ทีมเป็นต้นไป
- ลีกนานาชาติ / ลีกเล็กกว่า (Saudi Pro League, MLS, J-League)-books บาง, spreads กว้าง โดยทั่วไปไม่ใช่พื้นที่ของบอท
การทำประตูของ soccer ที่เป็นแบบ discrete (0-1 goals คือเหตุการณ์ใหญ่) ทำให้ต่างจาก NBA ที่ไหลต่อเนื่อง รูปแบบบอทของ soccer คือ: อยู่ฝั่งที่ถูกก่อนจะมีประตู และออกเร็วหลังจากประตูเกิด
Tennis (tag 864): จังหวะของทัวร์นาเมนต์
Tennis tag 864 ATP และ WTA ทัวร์ตลอด 11 เดือนของปี โดยมี Grand Slams ในเดือน Jan (Australian Open), May-Jun (French Open), Jul (Wimbledon), และ Aug-Sep (US Open) volume จะกระจุกตัวในสี่สัปดาห์นั้น รวมถึง Masters 1000 series
Tennis มี price ladder ในเกมที่ชัดเจนที่สุดในบรรดากีฬาใด ๆ (chapter 15) ราคาในระหว่างแมตช์จะเคลื่อนไปตามเส้นโค้งที่คาดเดาได้ โดยยึดตาม state ของ set และ break บอทที่มี model price ladder เฉพาะ tennis สามารถจับ mispricing ได้แบบ real time
ช่วงเงียบ: ระหว่าง Grand Slams, สัปดาห์ที่มีแค่ ATP 250 / ATP 500 books จะบางมาก ให้หยุดบอทหรือสลับไปกีฬาอื่นในช่วงนี้
แหล่งของ edge ที่ยังอยู่รอด
ในทั้งสี่กีฬา edge ที่อยู่รอดได้ในระยะยาวคือ:
- pre-game line shop เทียบกับตัวเลขจาก venue ที่ sharp กว่า (Pinnacle, Betfair) เมื่อ Polymarket ไม่ตรงกับ sharp book มากกว่า > 3c ให้ fade Polymarket
- in-play overreaction ต่อเพลย์เดียว (interception, injury, momentum shift) รอ 30-60 วินาทีหลังเพลย์ แล้ว fade ถ้าตลาด overshot
- late-game heavy favorites ที่ 0.85-0.92 พร้อมการบริหารขนาดการลงทุนอย่างมีความเสี่ยงต่ำกว่า 0.85 = risk จริง; สูงกว่า 0.92 = 0.99 trap
edge ที่ไม่อยู่รอด: pure technical analysis บนราคา, sentiment scraping จาก Twitter, seasonal effects ตามปฏิทิน
ข้อมูลสด: ESPN, official APIs
ตารางแหล่งข้อมูลสำหรับสี่กีฬา
| กีฬา | หลัก | สำรอง | ความถี่การอัปเดต |
|---|---|---|---|
| NFL | ESPN scoreboard | NFL.com feed | ~10s ระหว่างเกม |
| NBA | ESPN scoreboard | stats.nba.com | ~10s ระหว่างเกม |
| Soccer (EPL/UCL) | ESPN scoreboard | SofaScore | ~15-30s |
| Tennis (ATP/WTA) | ESPN scoreboard | tennis.com live | ~30s (ระดับ point) |
ESPN ใช้ฟรีและเชื่อถือได้สำหรับทั้งสี่กีฬา สำหรับการอัปเดตที่เร็วกว่า 10 วินาที ให้จ่ายซื้อ feed เฉพาะทาง (StatsPerform, GeniusSports)-แต่การลด latency เพิ่มเติมมักไม่คุ้มค่าใช้จ่ายสำหรับรายย่อย
ตัวอย่างบอท: pre-game line catcher
อ้างอิง: pseudocode ของ pre-game line-catcher
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)
ข้อควรระวัง: APIs ของ Pinnacle / Betfair ต้องมีบัญชี; ไม่ฟรี หากไม่มี sharp reference การ line-catching ก็จะเหลือแค่ opinion เทียบกับ opinion ซึ่งไม่ใช่พื้นที่ของบอท





