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

Polymarket 二元 Yes/No 市场 bot 策略:标准事件合约、硬性上限 1x 杠杆、通过组合广度扩展规模、常见错误(追逐 0.99),以及代码骨架。

本章内容

二元(Yes/No)市场是 Polymarket 的基础。大多数策略都落在这里。本章涵盖杠杆上限、会让新开发者踩坑的 0.99 价格陷阱,以及生产级 bot 最终会收敛到的“靠广度而不是靠单笔规模”模式。

  • 二元市场覆盖什么
  • 1x 杠杆上限(以及如何绕开它扩展规模)
  • 常见错误:追逐 0.99 价格
  • 组合广度作为有效杠杆
  • 单市场风险 vs 组合风险
  • 代码:扫描二元市场并按规模下单

二元市场覆盖什么

二元市场是 Polymarket 的基础:一个 yes/no 问题,对应两个结果 token。“Trump 会赢得 2024 年大选吗?”是二元;“谁会赢得 2024 年大选?”如果有 5 位候选人,则是 NegRisk(第 11 章)。

二元市场中的两个结果 token(YES 和 NO)之和为 1.0,再减去一小部分价差税。你可以买任一边;两边都有自己的订单簿。价格是对称的-以 0.40 买入 YES,在预期收益上等价于以 0.60 卖出 NO。

Polymarket 上大多数非锦标赛市场都是二元的:天气问题、单一事件的政治结果、单场体育比赛、单个价格目标的加密货币问题。bot 模式在这些市场里大体相同。

1x 杠杆上限(以及如何绕开它扩展规模)

Polymarket 的二元市场是 1x 杠杆:你花 40 美元以 0.40 的价格买入 100 股;最高回报是 100 美元。没有保证金,也没有强平。资本效率低于永续合约(第 24 章),后者可提供 2-25x。

绕过 1x 上限扩展规模的方法有三种:(1)在多个市场部署更多资本-分散而不是加杠杆,(2)通过已结算市场轮转资本-每次结算后释放资金并转投下一个,(3)使用 NegRisk 市场,其中 sum-to-1 套利可以形成有效的合成杠杆。

二元策略的正确定位:低杠杆、高广度。50 个市场各持有少量仓位,是成熟 bot 的典型形态,而不是在 5 个市场里各押大仓位。

常见错误:追逐 0.99 价格

最常见的二元 bot 失败方式:买入接近结算的强势热门到 0.99,期待它在结算为 YES 时轻松赚到 1 美分。

数学上看:在 0.99 时,你花 99 美分去赚 1 美分。1% 的失败率(100 个市场里有 1 个),每次损失 99 美分,会抹掉 99 次成功的 1 美分收益。极端情况下,风险收益比非常糟糕。

容量也是问题。0.99 附近的订单簿很薄;一旦你下有意义的规模,价格会被推到 0.995 甚至更高,已经很薄的优势会进一步被侵蚀。

除非你有专门针对尾部收益套利画像设计的策略,否则不要进入价格 > 0.92 的市场。大多数二元 bot 都不应该买到 0.85 以上。

组合广度作为有效杠杆

你无法对单笔仓位加杠杆,但可以通过同时持有大量不相关仓位,来放大组合的方差特征。

50 个仓位,每个 20 美元,总计就是 1,000 美元在运作中。如果胜率是 55%,经济模型为 +3c/-4c,那么预期日 PnL 为 (0.55 × 3 − 0.45 × 4) × 50 × $0.20 = 预期 $1.50,且方差受控。与单个 1,000 美元仓位相比,预期回报相同,但回撤要小得多。

限制条件:这些仓位必须是真正不相关的。一个周末里 50 个 NFL 热门队并不等于 50 笔独立仓位;它们在很大程度上是跨比赛相关的天气+热门队仓位。应当在体育类型、事件类型、时间跨度上做分散。

单市场风险 vs 组合风险

两层风险上限,缺一不可。

  • 单市场:每个市场最多投入 $X,不论 edge 多强。用于限制单一市场灾难性损失。常见数值:每个市场 $25-100。
  • 组合:任意时点允许部署的总资本上限。用于限制在多个不相关坏日中的总回撤。常见数值:钱包余额的 50-70%。

单市场上限更重要,因为它限定了任何单个 bug 或 edge 消失事件的爆炸半径。组合上限是一个合理性检查;当你持有 50+ 个仓位时,即使没有它,大数法则通常也会把你控制在边界内。

这两个上限都应该写进代码,而不是只记在脑子里。没有强制上限的 bot,迟早会找到一种配置,把 90% 的资金压进单一市场,然后全部亏掉。

代码:扫描二元市场并按规模下单

参考实现:扫描成交量最高的二元市场,筛选合格 setup,按规模执行 FOK 买单。

def scan_and_buy():
    events = gamma_top_events(limit=50, active=True, closed=False)
    for ev in events:
        for m in ev.get("markets", []):
            if m.get("negRisk"): continue   # binaries only
            outs = json.loads(m["outcomes"])
            prices = [float(p) for p in json.loads(m["outcomePrices"])]
            for i, out_name in enumerate(outs):
                if not setup_qualifies(m, i, prices[i]): continue
                tok = json.loads(m["clobTokenIds"])[i]
                size = compute_size(m, prices[i])
                if size < 5: continue
                place_fok(tok, "BUY", prices[i] + 0.02, size, neg_risk=False)

def setup_qualifies(m, idx, price):
    return 0.10 <= price <= 0.85    # avoid extremes

setup_qualifies 函数就是你的策略所在。外层包装只是管道代码。

常见问题

Polymarket 上的二元市场是什么?
一种只有两个结果的市场-YES(事件发生时支付 1 美元,未发生时支付 0 美元)和 NO。Polymarket 上大多数事件都是二元的:“X 会在 Y 之前发生吗?”胜出一侧的每股支付 1 美元,失败一侧支付 0,且有上限。
我可以给 Polymarket 的二元仓位加杠杆吗?
不能使用原生杠杆。二元市场是 1x 上限-最大亏损等于你的买入成本。合成杠杆来自组合广度:同时运行 50 个具有正期望值的小型二元仓位,复利增长速度会比单一大仓位更快。
为什么买到 0.99 很危险?
在 0.99 时,上行空间只有 1 美分(约 1% 回报),而下行空间是 99 美分(如果小概率事件发生,则亏损 -99%)。这种风险收益不对称极其残酷-一次黑天鹅事件就能抹掉 100 次正常获利。我们的 bot 硬性规则:除非你的 expected value 计算无懈可击,否则不要买到 0.95 以上。
每个二元市场应该交易多大规模?
每个市场占 bankroll 的 1-5%。如果 bankroll 是 500 美元,那么每个仓位就是 5-25 美元。Kelly criterion 给出的是理论上限(约等于 edge / variance),但大多数零售 bot 应该把仓位降到 full Kelly 的 25-50%,以承受波动并存活下来。
我如何找到有利润的二元市场?
三个筛选条件:(1)流动性-24 小时成交量 1 万美元以上,确保你能成交并退出。(2)结算清晰度-判定标准模糊的市场有争议风险。(3)你的 edge 来源-新闻、统计模型或领域知识。没有这三者中的任何一个,你没有 edge,你只有希望。
二元市场比 NegRisk 多结果市场更安全吗?
按单市场看-是的(机制更清晰,没有跨腿风险)。按组合看-取决于构建方式。一个分散的 30 个二元市场组合,通常比一个集中的 NegRisk 多结果仓位具有更低的方差。