Polymarket 套利机器人:当 YES 与 NO 之和低于 1 美元时
当 Polymarket 上 YES 和 NO 代币总价低于 1 美元时,同时买入两边并合并的 merge 套利机器人的架构与风险。
Polymarket 是一个运行在 Polygon 网络上的预测市场。每个市场都有一个问题(比如“比特币在接下来 15 分钟内会上涨吗?”),并有两种结果代币在交易:YES 和 NO。我是 Berke Özyaşar,开发了一些 Python 机器人,用来扫描这些市场中价格之间出现的微小不一致并自动交易。在这篇文章中,我会介绍 Polymarket 机器人所依据的 merge 套利思路、机器人的架构,以及这件事真正的风险。
核心思路:1 YES + 1 NO = 1 USDC
Polymarket 使用 Gnosis 开发的 Conditional Token Framework(CTF)智能合约。在这个框架中有两个基本操作:
- Split(拆分):存入 1 USDC 作为抵押,换取同一市场的 1 个 YES 和 1 个 NO 代币。
- Merge(合并):把手中的 1 个 YES 和 1 个 NO 代币交还合约,取回 1 USDC 抵押。
无论市场结果如何,其中一种代币价值 1 美元,另一种价值 0。也就是说,由一个 YES 和一个 NO 组成的完整组合永远值 1 美元,这一点由合约保证。在有效市场中,YES 的最优卖价与 NO 的最优卖价之和应该在 1 美元左右。但尤其是在 5 到 15 分钟的短期加密货币“Up or Down”市场中,价格变动很快,这个和时不时会跌到 1 美元以下。
举个例子:如果某个市场中“Down”以 74 美分出售、“Up”以 22 美分出售,同时买入两边的成本是 96 美分。把这两个代币 merge 后可以取回 100 美分;中间的 4 美分,就是扣除手续费之前的毛差价。价格往哪个方向走都无关紧要。
Polymarket 的混合架构
要理解机器人如何运作,需要了解 Polymarket 的两层结构。订单在链下的中心化订单簿(CLOB)中撮合;下单和撤单不需要 gas,订单按照 EIP-712 标准签名。撮合成功的交易在 Polygon 上最终结算;split、merge 和 redeem 等操作则直接在链上完成。抵押品使用 USDC.e,链上操作的 gas 费用使用 POL 支付。
这种结构对套利有一个重要影响:两边的买入在链下完成,而 merge 在链上完成。也就是说,两笔买入并不是一笔原子交易。为什么这一点至关重要,我会在风险部分再谈。
机器人的架构
机器人由四个主要部分组成。
1. 市场发现
通过 Polymarket 的 Gamma API 拉取活跃的加密货币“up-or-down”市场。为每个市场记录 conditionId 以及 YES/NO 代币 ID。由于短期市场不断开启和关闭,这份列表会定期刷新。
2. 扫描器
扫描器大约每两秒从 CLOB API 读取一次两种代币的订单簿,把最优卖价相加,计算与 1 美元的差额。这里重要的不是毛差价,而是净利润。Polymarket 加密货币市场的吃单(taker)手续费与价格相关:在 50 美分附近最高,价格越接近两端越低。扫描器会按各自价格分别计算两边的手续费,并加上 merge 操作的 gas 成本。低于最小价差和最小利润阈值的机会会被跳过。交易规模也被限制在订单簿最优档位的挂单数量以内;更大的订单会把价格推向对自己不利的方向。
3. 执行器
发现机会后,尽可能同时为两边发送已签名的订单。在 Python 端,我使用 py-clob-client 库;订单签名和 API 凭证都通过这个库管理。
4. Merge 或持有至结算
两边都成交后,用 web3.py 调用 CTF 合约中的 mergePositions(),USDC.e 便回到钱包。也可以选择持有仓位直到市场结算;这样能省下 merge 所需的 gas,但会在这段时间内占用资金。对于频繁交易的策略,立即收回资金通常更合理。
第二套策略:Dump & Hedge
纯 merge 套利的机会转瞬即逝。因此,机器人中还有一套被称为“Dump & Hedge”的第二策略:
- 当某一边的价格突然下跌(10 美分或更多)时,买入这一边。
- 当加上另一边的总成本降到 95 美分或以下时,买入另一边,凑成完整组合。
- 如果在设定时间内没有出现这个条件,为了不停留在单边仓位上,即使亏损也会买入另一边(定时止损对冲)。
这套策略能抓到更多机会,但按其定义,它会在一段时间内持有单边敞口;也就是说,比纯套利风险更高。
基础设施
- 语言和库:Python、py-clob-client 和 web3.py。Polymarket 也有 TypeScript 和 Rust SDK;在延迟更关键的场景下可以考虑。
- RPC:公共的 Polygon RPC 节点可能又慢又不稳定;使用付费 RPC 服务商会直接影响延迟。
- 监控:扫描结果、已发送的订单、成交状态和 merge 操作都通过 Grafana 面板监控。在我看来,运行一个看不到自己在做什么的机器人,本身就是一种风险。
- 紧急停止:出现意外情况时,用一条命令停止所有操作的 kill switch。
风险:不存在“无风险套利”
Merge 套利在纸面上看起来与结果无关,但实际上存在不小的风险:
- 单边风险:第一边成交后,第二边的价格可能变化,订单也可能根本无法成交。这时您手中就只剩下一个变成方向性押注的单边仓位。
- 手续费侵蚀:如果吃单手续费加 gas 超过差价,就会从盈利变成亏损。由于手续费与价格相关,每次机会都需要重新计算。
- 滑点和流动性:订单簿可能很薄。您看到的价格和订单到达时的价格未必相同。
- 竞争:还有其他机器人在扫描同样的机会;机会可能在极短时间内消失。
- 速率限制:API 前面有 Cloudflare;请求过于频繁可能会被封锁。重试逻辑和请求频率需要据此调整。
- 没有测试环境:Polymarket 没有测试网;每笔交易用的都是真金白银。因此每个新版本都需要用很小的金额试运行。
- 访问限制:Polymarket 限制部分国家和地区访问;您需要核实所在地的规定以及平台的使用条款。
本文不构成投资建议。套利机器人旨在特定条件下捕捉机会;由于手续费、滑点和流动性等因素,它也可能亏损。
如果您也想做自己的机器人
如果您有针对 Polymarket 或类似市场的机器人构想,首先要把策略整理成明确的规则,然后用小额资金、配合完善的监控体系逐步推进。我在这类项目中的工作方式,写在了交易机器人页面;您可以从那里或通过联系页面与我联系。