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

在 Polymarket 上做做市:如何报价买一卖一、捕捉价差、赚取 maker rebates(taker fees 的 20-25%)、库存风险数学,以及做市(MM)在预测市场中何时可行。

本章涵盖什么

在 Polymarket 上做市,意思是在同一个市场同时挂出一个买价和一个卖价,反复进行,并赚取两者之间那一点点差额(spread,价差)。你不是在赌谁会赢,而是在出租流动性、并为此收取费用。这个策略在传统金融里早已成熟。Polymarket 的特殊之处有两点:一是 maker rebate 计划(Polymarket 会因为你提供流动性而给你一笔奖励),二是它的 adverse selection(逆向选择)比大多数金融场所更严重-所谓 adverse selection,是指吃掉你报价的那个人往往掌握着你不知道的信息,他一旦跟你成交,你当下就站到了错误的一边。本章讲的,就是这背后诚实的数学:做市到底值不值得做。

  • 用大白话讲做市(market making)
  • spread + rebate 优势
  • inventory risk 和 skew
  • Polymarket 上 MM 何时可行(以及何时不可行)
  • 代码骨架:在 +/- N 美分处双边报价
  • 根据 news flow 调整报价
  • 在 adverse selection 激增时关闭 bot

用大白话讲做市(market making)

market maker(做市商)会在市场中间价下方挂一个买价(bid),在中间价上方挂一个卖价(ask)。那个中间点-最优买价和最优卖价的正中间-叫做 mid(中间价)。当另一个交易者卖给你时,他「打到了你的 bid」,你便宜买入;当另一个交易者从你这里买走时,他「抬走了你的 ask」,你高价卖出。你的 bid 和 ask 之间的差额,就是你每完成一次来回交易(round trip)的收入。

用一个例子就能讲清整个优势。假设 mid 是 $0.46,你在 $0.45 挂买价、在 $0.47 挂卖价。有人以 $0.45 卖给你一股;过一会儿又有人以 $0.47 从你手里买走这一股。你的仓位重新归零,口袋里却多了两美分-而你自始至终都不需要对结果是否发生有任何看法。一天做上几百次,这些零钱就攒起来了。

问题在于,你无法控制哪一边成交、何时成交。这个策略是由 order flow(订单流)驱动的,而不是方向性交易:你押的是交易会持续、spread 会不断被支付,而不是 YES 或 NO 谁会赢。真正的风险是 adverse selection-吃掉你报价的人往往掌握着你不知道的信息,于是你总是在价格即将下跌前买入。做市到底赚不赚钱,归根结底就一个问题:你的 spread 够不够宽,能不能覆盖这些消息灵通的交易者带来的亏损?

spread + rebate 优势

Polymarket maker 的两条收入来源。

Spread capture:围绕 0.46 的 mid 报 bid 0.45 和 ask 0.47。你在 bid 上成交后,若之后能在 ask 上退出,就能赚 2 美分。净优势取决于成交不平衡和价格漂移。

Maker rebate:Polymarket 的 liquidity-rewards program 会对符合条件市场中的 maker 成交按每股发放 rebate。数值会变化;请查看官方 rewards 页面获取当前值。rebate 以 pUSD 定期发放,独立于交易本身。

对大多数市场而言,spread capture 是更大的收入来源。对于可以报更宽 spread 的市场(大选年、重大体育季后赛),Polymarket 会提高 rebate 以吸引流动性,此时 rebate 才更有意义。

inventory risk 和 skew

一个不断被 bid 打中的 MM 会积累多头头寸。风险在于 mid 下跌,而你持有的是多头;即使算上 spread 收入,maker 仍可能在头寸上亏损。

防御手段:quote skew(当库存偏多时压低 bid,当库存偏空时抬高 ask,以抑制单边成交);inventory cap(在你已经过度偏多的一侧停止报价);active rebalancing(当库存接近上限时,偶尔主动跨 spread 平掉部分仓位)。

数学上:如果 bid 上 60% 的成交在价格向不利方向移动 2 美分之前都无法退出,那么仅这些成交就会让策略亏钱。当成交不平衡超过 65/35 时,要积极 skew。

Polymarket 上 MM 何时可行(以及何时不可行)

当以下三个条件成立时,MM 在 Polymarket 上才可行。

  • Liquid book:有足够多的报价竞争,你的 spread 既有竞争力又不是零。2024 大选市场、重大 NFL/NBA 比赛、BTC 上涨/下跌 5m 都符合。
  • Two-sided flow:买卖双方都活跃。单边市场(接近 0.95+ 的“已接近结算”市场)没有 maker 可捕捉的空间。
  • Bounded price moves:spread capture 不会被 5 美分的跳动吞没。稳定的中间区间市场(0.40-0.60)最友好。

MM 在以下情况会失败:新闻驱动型市场,mid 的跳动比你重新报价更快;流动性不足的订单簿,你是唯一报价者,而下一笔交易会连续扫过 5 个档位;接近结算的市场,一侧正收敛到 0 或 1。

代码骨架:在 +/- N 美分处双边报价

一个最简单、可用的 maker 的伪代码。

SPREAD_CENTS = 2
INVENTORY_CAP_SHARES = 50

def make_loop(token_id):
    while True:
        book = fetch_book(token_id)
        mid = (book.best_bid + book.best_ask) / 2
        inv = chain_balance(token_id)

        # Skew: pull the side we are too long on
        bid_px = mid - SPREAD_CENTS/200 - (0.005 if inv > INVENTORY_CAP_SHARES * 0.6 else 0)
        ask_px = mid + SPREAD_CENTS/200 + (0.005 if inv < -INVENTORY_CAP_SHARES * 0.6 else 0)

        cancel_my_existing_quotes(token_id)
        if inv < INVENTORY_CAP_SHARES:
            place_gtc(token_id, side="BUY", price=bid_px, size=5)
        if inv > -INVENTORY_CAP_SHARES:
            place_gtc(token_id, side="SELL", price=ask_px, size=min(5, inv))
        time.sleep(2)

生产环境里的 makers 还会加入:按单边库存跟踪、先撤后挂的顺序控制、重新报价间隔加入 jitter 以避免可预测性,以及 adverse selection 的 kill-switch(下一节)。

根据 news flow 调整报价

当新闻事件发生时,fair value 会先移动,而你的报价还停留在原地。一个在 news flow 期间不撤单的 MM 会被迅速扫出。

信号:在 30 秒内,incoming fills 的 cancel rate 跳升到基线的约 3 倍以上;或者通过更广泛的事件流交叉检查(Polymarket Twitter/Discord、Bloomberg headline feed)。检测到后,maker 会在 60-120 秒内撤掉所有报价,等新的 mid 稳定后,再围绕新的中心重新报价。

最简单的实现是监控该 token 的 last-trade-price stream。若相对于滚动窗口均值出现超过 2 个标准差的跳跃,就触发暂停。当价格稳定 30 秒以上后,bot 再重新接入。

在 adverse selection 激增时关闭 bot

这是硬性退出条件。如果 bot 最近 50 笔成交的 fill PnL 明显转负,就说明出了问题:要么市场已经变成新闻驱动,不适合做市;要么你设置的 spread 对当前 adverse-selection 水平来说太紧了。

应编码的 kill conditions:

  • 连续 5 次 bid 成交且没有 ask 成交,自第一笔成交以来 mid 下跌超过 1c。
  • 最近 25 笔 round-trip 成交的 realized PnL 低于预期的 -25%。
  • WebSocket 断开或检测到 stale book。
  • 任一方向库存超过上限,持续超过 5 分钟。

触发后,取消所有订单,以 market 方式平掉库存,并暂停 15 分钟以上。没有 kill switch 的 market maker 会在波动期持续亏损,直到 trader 手动注意到-而这总比你想的更慢。

常见问题

散户 bot 真的能在 Polymarket 上靠做市赚钱吗?
有时可以,在某些精选市场里可以。maker rebate(taker fees 的 20-25%)加上每次来回 1-3 美分的 spread,确实能累积成真实回报。但在 Polymarket 上,news flow 可能在几秒内让市场移动 20+ 美分-没有快速新闻源的 market maker 会被 adverse selection 吃掉。最适合的是赛前和低新闻期的高流动性体育市场。
在 Polymarket 上我应该把报价拉多宽?
至少要宽到足以覆盖最坏情况下预期的 adverse-selection。对于流动性好的体育/政治市场:围绕 mid 双边各 1-3 美分。对于薄市场:5 美分以上。如果你既不能像其他 makers 一样报得足够紧来竞争,又不能报得足够宽以承受波动,那么这个市场对你来说就不适合做市。
我应该设置多大的 inventory 限制?
在你经过数月验证盈利能力之前,每个市场把库存硬上限设在 50-200 美元。通过 skew 报价把库存引向中性-如果你积累了 Yes 头寸,就压低 Yes bid 并压低 No ask,以鼓励 No 买盘回流。绝不要让单一市场占用你 bankroll 的 20% 以上。
在 Polymarket 做市需要 fast VPS 吗?
需要。做市是 Polymarket 上对 latency 最敏感的策略。抖动较大的 VPS 会导致报价过时,从而被迅速扫出。我们做 MM bots 特别使用 TradingVPS,就是因为它的 jitter 一贯很低。普通云主机(DO/Vultr)可以用于 paper trading MM,但不适合 live。
Polymarket MM 和 crypto MM 有什么不同?
两个主要区别:(1)Polymarket 有硬性结果事件(新闻、体育决赛),价格可在瞬间移动 30-100 美分-比 crypto 激烈得多。(2)Polymarket 市场最终会结算,所以不同于 crypto pairs,MM 头寸有硬性到期日。这两点都会把你推向更短持仓和更严格的风险限制。
我可以在 Polymarket 上做 5 分钟 crypto 市场的 market making 吗?
可以尝试,但非常难。5 分钟市场每天每个 pair 约有 288 次到期,主要由更快的 bot 主导,而且 spread 更紧。大多数散户 MM bot 在那里都会因为 adverse selection 而亏钱。我们会在本系列第 23 章完整讲解 5 分钟 crypto 策略。