Polymarket Bot 教程 · 第 16 章,共 32 章
Polymarket 上的统计套利:跨市场配对(相关事件)、Polymarket 与 Kalshi 价差、均值回归,以及当市场最终结算时如何控制 stat-arb 仓位大小。
本章内容
Polymarket 上的统计套利利用相关市场之间的短暂错误定价-例如 Polymarket 与 Kalshi 的同一事件,或 Polymarket 内部的相关市场。可捕捉的边际很小(通常 1-3 美分),而且在执行上非常脆弱。本章会坦诚说明哪些方法有效、哪些无效,以及那些会让大多数尝试失败的多腿执行风险。
跨市场统计套利利用 Polymarket 与 Kalshi、Polymarket 与 Manifold,或 Polymarket 内部相关市场之间的短暂定价不一致。可捕捉的边际很小(通常 1-3 美分),并且要求两条腿都快速执行。本章是一份诚实的实战手册,也包含了会让大多数尝试失败的操作复杂性。
- stat-arb 在 prediction markets 中意味着什么
- Polymarket-vs-Kalshi 价差示例
- Polymarket 内部的配对(相关事件)
- 均值回归 vs 趋势延续
- 如何给会结算的(非永续)市场控制仓位大小
- 风险:延续到结算之后的背离
- 代码:配对监控与阈值触发
stat-arb 在 prediction markets 中意味着什么
prediction markets 中的 statistical arbitrage,指的是交易两个本应以一致价格定价的市场之间的价差。Polymarket 上最常见的有三种形式。
- 跨交易所:Polymarket 和 Kalshi(或 Manifold、PredictIt)上的同一事件。价格应当收敛;但在实际中通常会偏离 2-5 美分。
- 同事件配对:NegRisk 多结果市场里,母市场与各个腿的总和之间的关系。总和应满足 = 1 的不变式,因此当各腿之和小于 1.0 时就可能套利。
- 相关事件配对:两个关于相关结果的市场(例如“Trump 在 1 月 1 日时仍是 president”与“Trump 在 3 月 1 日时仍是 president”)。它们的价格通常应相差不超过 2-3 美分。
边际很小。操作复杂性是真实存在的。大多数尝试失败在执行上,而不是理论上。
Polymarket-vs-Kalshi 价差示例
根据 2025-26 年的观察,Polymarket 和 Kalshi 会挂出同样的美国重大事件,但长期来看价格通常会相差 1-4 美分。这种差距有结构性原因,而任何套利模型都必须把这些因素纳入计算。
结构性驱动因素:
- 费用不对称:Kalshi 会对盈利交易收取 4-7% 的费用(因市场而异);Polymarket 的 taker fee 为 0。套利计算必须扣除 Kalshi 的抽成。
- 结算风险溢价:当某个市场的 resolution 存在歧义时,一个交易所的 UMA 可能会和另一个交易所的 judge 给出不同结果。市场会把这一点计入价格。
- 交易者结构:Polymarket 的用户通常更年轻、更 crypto-native;Kalshi 的用户更偏专业 / hedge。它们对同一事件的看法经常系统性不同。
当价差超过结构性溢价加费用时,套利才成立。某个市场若结构性溢价是 1c、合并费用是 1c,那么 5c 的价差就意味着 3c 的真实边际。
Polymarket 内部的配对(相关事件)
在 Polymarket 内部,相关事件配对比跨交易所套利更容易。费用结构相同、钱包相同,而且可以实现原子化执行。
长期会出现定价不一致的例子:
- Trump 在 date A 时仍是 president vs Trump 在 date B 时仍是 president(其中 B 比 A 晚 < 90 天)。
- Bitcoin 是否会在 July 31 前达到 $100k vs 是否会在 August 31 前达到 $100k。
- 同一个二元市场里的 Yes 与 No 腿(总和应等于 1.0;但在薄书中有时会偏离到 1.04 左右)。
Yes+No=1 的套利最干净:从同一个市场读取两条腿,如果总和跌破 0.97,就对两条腿同时下 FOK(给点 spread tax 缓冲)。所需资金在两条腿上大致相等;当两边的成交回执同时返回时,执行就是原子化的。
均值回归 vs 趋势延续
有两种 stat-arb 状态:均值回归-配对因噪音而偏离,你预期其重新收敛;趋势延续-配对因为新信息到来而开始分化,你预期其继续分化。
区分它们才是难点。经验法则:如果背离发生在可见成交量上(某个 whale 把一条腿的订单簿打穿了),那就是 news-除非你有模型,否则不要逆势。若它是在低成交量下缓慢漂移,那就是噪音-可以更有把握地做均值回归。
对新手 builder 来说:只做均值回归,并且只在历史漂移的标准差 < 1 的配对上交易。趋势延续需要一个能捕捉 news 的模型;没有模型时,你就是在和 informed flow 博弈。
如何给会结算的(非永续)市场控制仓位大小
prediction markets 会结算,但 crypto pairs 不会。这改变了数学模型。
Polymarket 上的配对套利仓位有固定的 payout schedule:当两个市场都结算后,预测价差与实际价差之间的差异就被锁定了。这里不存在 rolling,也没有无限持有。
这对仓位大小的含义是:你能持有的最大规模受限于到结算的时间,因为资本会一直被锁住直到那一刻。一个 6 个月后结算的配对也许每股能赚你 3c,但如果两边都已经完全建仓,在此期间你就无法把更多资本投入进去。
正确的理解方式是:Polymarket 上的 stat-arb 是一系列有时间边界的交易,而不是连续策略。应该比较单位锁定资本、每天的 PnL,而不是总 PnL。
风险:延续到结算之后的背离
最糟糕的 stat-arb 结果,是你对“收敛”的预测本身就是错的,因为底层前提错了。比如:
- 你做空 “Trump 在 Apr 1 时还是 president”,以为它会收敛到 “Trump 在 Mar 1 时还是 president”-但 date 1 市场结算为 YES,而 date 2 因为 3 月发生弹劾而结算为 NO。你“价差应该持平”的论点是错的。
- 你在 Polymarket 和 Kalshi 上对同一个 NBA Finals winner 做套利。Polymarket 按官方系列赛胜者结算;Kalshi 却按一个略有不同的定义结算,对 overtime tie-breakers 的处理也不同。两边都按各自条款结算为 YES,但方向相反。
务必仔细阅读每个市场的 resolution criteria。跨交易所套利只要碰到一次结算规则不一致,就可能两条腿都全损。
代码:配对监控与阈值触发
参考实现:监控两个相关 token,当价差跨过阈值时触发套利。
def pairs_monitor(token_a, token_b, threshold_cents=3, size=10):
"""Buy A and Sell B when (1 - ask_A) + bid_B > 1 + threshold."""
while True:
book_a = fetch_book(token_a)
book_b = fetch_book(token_b)
if not (book_a.best_ask and book_b.best_bid):
time.sleep(2); continue
# implied: cost of buying A at ask + value of selling B at bid
edge = (1 - book_a.best_ask) + book_b.best_bid - 1
if edge > threshold_cents / 100:
print(f"ARB edge={edge:.3f}; firing")
r_a = fok_buy(token_a, price=book_a.best_ask, size=size)
if r_a.status != "matched": continue
r_b = fok_sell(token_b, price=book_b.best_bid, size=size)
if r_b.status != "matched":
# leg A filled, B failed -- unhedged, exit A
fok_sell(token_a, price=book_a.best_bid, size=size)
time.sleep(3)
partial fill 后的清理非常关键。如果没有这一步,部分成交会让 bot 暴露方向性风险,这与 stat-arb 的初衷完全相反。





