Polymarket Bot 教程 · 第 25 章,共 32 章
Polymarket 上的体育市场 bots:NFL 每周比赛、NBA tag (745) 微观结构、soccer(Premier League、Bundesliga、Champions League)、tennis (864)-流动性、edge 来源、代码模式。
本章涵盖内容
NFL、NBA、Soccer 和 Tennis 是 Polymarket 按类别划分后体育交易量最大的板块。每个板块都有自己的数据可用性、节奏和 edge 特征。本章将介绍各联赛特定的 bot 模式,以及你需要筛选的 tag ID。
- NFL:每周节奏,周日流动性峰值
- NBA(tag 745):比赛中微观结构
- Soccer:国际赛事 vs 俱乐部联赛
- Tennis(tag 864):赛事节奏
- 仍然有效的 edge 来源
- 实时数据:ESPN、官方 APIs
- 示例 bot:赛前盘口捕捉器
NFL:每周节奏,周日流动性峰值
NFL 拥有 Polymarket 所有体育项目中最强的周度节奏。市场通常在前一周比赛结束后的周二开放,周三到周五进行盘口比价,投注量在周六到周日达到峰值。结算通常是周日夜间的早场比赛,晚场则在周一夜间结算。
bot 模式:周二到周三开盘线确定时做 line-catcher,周日流动性峰值期间做 in-play。不同时间窗口使用不同 bots。Monday Night Football 的市场通常比其他比赛更薄-要注意,小仓位进场时滑点风险更高。
交易量峰值是 Super Bowl:比赛周内所有 SB 市场累计交易额超过 5000 万美元。即使那一周有一个 100 美元的 bot,也只是无关噪音;在那个规模下市场是有效的。
NBA(tag 745):比赛中微观结构
NBA 是 Polymarket 上频率最高的体育项目-常规赛期间每周 25-30 场,季后赛期间 5-15 场。tag ID 745 用于筛选仅 NBA 相关事件。
NBA 的比赛中微观结构之所以有效,是因为:(1) ESPN 每约 10 秒更新一次记分牌,(2) 每场比赛有 2.5 小时连续进行的动作,(3) 主要比赛在第四节期间 Polymarket order book 仍保持较深深度。
有效的策略是:订阅某场比赛的 WS book + ESPN feed,在 10-15 秒内对失衡和得分事件做出反应。无效的策略包括:赛前 line-catching(市场已经足够有效,散户很难抓到太多机会),以及比赛末段的确定性套利(会落入 0.99 trap 区域)。
Soccer:国际赛事 vs 俱乐部联赛
Soccer 在 Polymarket 上大致分为三个层级。
- 欧洲顶级联赛(EPL tag 739、La Liga、Bundesliga、Serie A)-交易量中等,重要比赛的 order book 较深。bot 策略与 NBA 类似。
- Champions League / Europa League(UCL tag 2186)-淘汰赛阶段交易量达到峰值。从 16 强开始,order book 最深。
- 国际赛事 / 小型联赛(Saudi Pro League、MLS、J-League)-order book 薄,价差大。通常不属于 bot 交易的理想范围。
Soccer 的离散得分特性(0-1 个进球就是重大事件)使它与 NBA 的连续流不同。Soccer 的 bot 模式是:在进球前站对方向,进球发生后快速退出。
Tennis(tag 864):赛事节奏
Tennis tag 864。ATP 和 WTA 巡回赛全年打 11 个月,四大 Grand Slam 分别在 1 月(Australian Open)、5-6 月(French Open)、7 月(Wimbledon)和 8-9 月(US Open)。交易量主要集中在这四个时段以及 Masters 1000 系列赛。
Tennis 拥有所有体育项目中最清晰的 in-play price ladders(见第 15 章)。比赛中期价格会沿着由 set 和 break 状态决定的可预测曲线变化。一个带有 tennis 专用 price ladder 模型的 bot 可以实时识别错误定价。
安静窗口:Grand Slams 之间,以及只有 ATP 250 / ATP 500 赛事的周,order book 都非常薄。在这些时间暂停 bot,或切换到其他体育项目。
仍然有效的 edge 来源
在这四项体育中,长期仍然有效的 edge 有:
- 赛前盘口比价:对比更锋利的交易场所的盘口(Pinnacle、Betfair)。当 Polymarket 与 sharp book 的差异超过 3c 时,做空 Polymarket。
- 比赛中对单个 play 的过度反应(抄截、伤病、 momentum 变化)。在 play 发生后等待 30-60 秒,如果市场反应过头就逆向。
- 比赛末段 0.85-0.92 的重磅热门方,配合风险管理仓位。低于 0.85 = 真风险;高于 0.92 = 0.99 trap。
不再有效的 edge:纯技术分析价格、从 Twitter 抓取情绪、基于日历的季节性效应。
实时数据:ESPN、官方 APIs
四项体育的数据源矩阵如下。
| Sport | Primary | Backup | Update cadence |
|---|---|---|---|
| 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-level) |
ESPN 对这四项都免费且可靠。如果需要低于 10 秒的更新,付费订阅专门 feed(StatsPerform、GeniusSports)-但对散户来说,边际延迟改善通常不值得这个成本。
示例 bot:赛前盘口捕捉器
参考:赛前 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)
注意:Pinnacle / Betfair APIs 需要账号;并非免费。没有 sharp 参考时,line-catching 会退化成观点对观点,这不属于 bot 交易的范畴。





