Polymarket Bot 教程 · 第 15 章,共 32 章

Polymarket 上的体育微观结构 bots:赛中优势、由比分驱动的错误定价、NBA 标签(745)和 Tennis 标签(864)、实时数据源,以及高频体育市场的执行模式。

本章内容

体育市场是 Polymarket 上最持续活跃的非政治板块。真正有效的 bots 只分成两类:赛前线捕捉器,在盘口刚形成时交易;以及赛中微观结构 bots,在比赛进行中根据订单簿变化做出反应。本章将结合适用的具体 tag ID、数据源和延迟预算,覆盖这两类策略。

体育市场是 Polymarket 上最繁忙的非政治板块。有效的执行模式会把实时比分源(ESPN、PandaScore)与订单簿微观结构信号结合起来。本章具体说明 NFL、NBA、足球和网球中哪些方法有效,以及 esports 有何不同。

  • 为什么体育市场可交易
  • 赛前 vs 赛中(不同 bots)
  • 已验证的 tag ID(745 NBA,864 Tennis)
  • 数据源:ESPN、官方 APIs、屏幕识别
  • 赛中延迟预算
  • 0.99 / 0.01 陷阱
  • 代码:订阅 games book 并做出反应

为什么体育市场可交易

体育市场在明确的时间框架内结算(几小时到几天),拥有公开的实时数据,并且在比赛期间会持续产生订单流。这三点对于一个可交易市场都必不可少-政治市场缺少“明确时间框架”,天气市场缺少“持续流动”,冷门赛事则缺少“公开实时数据”。

体育市场上的 trader 人群也比例如选举市场更为多样。普通体育赌客会情绪化定价;有信息的 trader 则会在比赛过程中把价格修正到合理价值。两者之间的差距,就是 bot 的优势来源。

成交量分布并不均匀:一个 NFL 周日会在 Polymarket 体育市场上轮转数亿美元;而周二晚上的沙特职业联赛可能连 5 万美元都不到。策略规模要根据真正有流动性的地方来定。

赛前 vs 赛中(不同 bots)

这是两种根本不同的 bot 设计。

赛前 line-catcher:扫描刚开盘的市场,识别与你的模型或更锋利的盘口相比被错误定价的线,提交 FOK 买单。持有到比赛进行中,有时一直持有到结算。速度要求:分钟级,而不是秒级。优势来源:模型 + 盘口比较。

赛中 microstructure:订阅某场比赛的实时订单簿 WebSocket,在几秒内对失衡信号 + 比分事件作出反应。速度要求:秒级,而不是分钟级。优势来源:延迟 + 读取订单流。

这两类策略几乎不共享代码。它们的风险画像不同,数据源不同,退出策略也不同。想同时做两者的 bot 往往两边都做不好;最好选一个。

已验证的 tag ID(745 NBA,864 Tennis)

以下是截至 2026 年 5 月、已为主要体育类别验证的 production tag ID。使用它们可以高效过滤 /events 调用。

Sport / LeagueTag IDTag slugNotes
NBA745nba10 月至 6 月成交量最高
NFL450nfl9 月至 2 月的周日/周一高峰
Tennis (all)864tennis全年,按赛事节奏波动
Soccer (general)1059soccer与下方子标签组合使用
EPL739epl
UCL2186uefa-champions-league
Esports (all)702esportsLoL + CS2 + Valorant + Dota
MLB1245mlb4 月至 10 月高峰
NHL823nhl10 月至 6 月高峰

tag ID 会跨年份保持稳定。新的 tag 会被添加(沙特职业联赛、IPL),但旧 tag 不会重新编号。

数据源:ESPN、官方 APIs、屏幕识别

对于传统体育,免费的 ESPN scoreboard API 就能覆盖你需要的一切:比分、节次/时钟、win-probability,有时还有投篮位置。不需要 key;只在 IP 级别限流。endpoint 模式:https://site.api.espn.com/apis/site/v2/sports/<sport>/<league>/scoreboard

对于 esports,ESPN 没有覆盖。可选方案有:PandaScore(每月 30-60 美元,行业标准)、HLTV(仅 CS2,可抓取,无 API)、Liquipedia(社区维护,可抓取,更新节奏较慢)。

屏幕识别型 feed(为电视流付费并通过 OCR 读取 scorebug)虽然可行,但运维开销很大。只建议在你的策略确实需要某项没有任何 API 可实时覆盖的运动,并且需要 3 秒以内更新时使用。

赛中 latency budget

赛中 reactive bot 的端到端延迟预算如下。

  • 比分事件发生:t=0
  • 源 feed 反映出来:t+3-15 秒(ESPN:约 10 秒;PandaScore:约 3 秒)
  • 你的 bot 读取 feed:t+10-16 秒
  • bot 决定动作:+50ms
  • FOK 订单发出:+200-500ms
  • CLOB 成交:+300-1000ms(网络 + 撮合)

总计:11-17 秒。最快的专业机构借助付费 premium feeds 和 co-located VPS,能做到 3-5 秒端到端。运行在标准主机和免费 ESPN 上的零售 bot 则通常处于更慢的一端。

需要 5 秒以内的策略对零售来说不可行。能在 10-17 秒窗口内工作的策略包括:比分后跟随买入、反向交易过度反应、临近结束时的确定性交易。

0.99 / 0.01 陷阱

最常见的赛中体育 bot 失败模式:在只剩一分钟时买入 0.99 的重度热门,期待轻松赚 +1 美分。它失败有三个原因。

第一,1% 的隐含概率并不是零-最后时刻的逆转会以不可忽视的频率发生。一个 99.5% 确定的胜局,重复 200 次,就会出现一次全仓位损失。

第二,0.99/0.01 的价差意味着你每股支付 99 美分,成功时只赚 1 美分,若罕见逆转则亏 99 美分。风险回报极其糟糕。

第三,使用 GTC 卖单挂到 0.999 的 bot 几乎不会成交-那个价位没有买家。仓位会一直持有到结算。赢了,你只赚 1 美分;若发生逆转,你会亏 99 美分。

这个陷阱是真金白银的亏损,很多 builder 都是在没算清楚数学的时候踩进去的。除非你的策略就是专门为 redemption-arbitrage 这种剖面设计的,否则要避开 0.95 以上的市场。

代码:订阅一个 games book 并做出反应

参考示例:订阅某个 NBA 比赛的 WebSocket,记录 book 更新,在失衡信号出现时发出 FOK。

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()

生产环境可添加的内容:两次触发之间的 cooldown、单个 token 的仓位上限、如果 30 秒内没有消息则 kill 掉 stale book。

常见问题

Polymarket 上哪些体育标签最活跃?
NBA(tag_id 745)、Tennis(tag_id 864)以及足球(随比赛而异)在各自赛季的 24 小时成交量领先。我们已在生产环境中验证 NBA 和 Tennis 的 tag ID-其他的在依赖之前应通过 gamma /tags endpoint 进行核实。
我能通过 bot 在赛中体育市场稳定盈利吗?
有可能-但很难。优势是真实存在的(实时比分通常会在 30-90 秒内被错误定价),但别的 bots 也在盯着。我们见过最好的结果,来自把快速实时比分数据源与简单规则结合起来(“对手刚得分,市场还没动,买入”)。没有数据源支撑的纯 stat-arb 会输给更快的竞争者。
我该从哪里获取实时体育数据?
ESPN.com 有非官方 JSON endpoints,会返回实时比分-对很多策略已经够用了。官方 APIs(NBA Stats API、NFL public endpoints)更可靠,但更慢。记者的 Twitter 账号提供文本信息,但需要 LLM 解析。它们都不是 HFT-grade;但对零售来说都算“足够快”。
什么是 0.99 / 0.01 陷阱?
当某个体育市场的 YES 价格到了 99 美分(几乎确定会赢)时,剩余上涨空间几乎没有,而 1 美分的波动就可能抹掉数月的预期收益。很多 bots 会在追最后一美分时买入 0.99,结果在意外事件把价格打到 0.85 时被重击。硬性规则:除非你的 expected value 计算无可挑剔,否则不要买入高于约 0.95 的价格。
Polymarket 的体育市场和传统 sportsbooks 相比如何?
没有盘口上的 house edge(相比之下,FanDuel/DraftKings 的 vig 约为 5-10%),但流动性更薄、价差也可能更宽。Polymarket 更适合传统博彩公司定价偏低的赛事-国际赛事、esports、小众市场。对于主流 NFL/NBA,传统 sportsbooks 流动性更高,但要付出更多 vig。
我的 bot 能否同时交易多个体育市场?
可以-而且你应该这么做。体育微观结构最适合以 5-20 场同时进行的比赛组成组合来操作。每场比赛的仓位上限(例如 50 美元)、组合上限(例如 500 美元),以及跨比赛的不相关敞口。把资金集中在一场比赛上会让方差最大化。