同一事件、不同平台、低买高卖——这种经典套利的窗口期在缩短。做市商和量化团队反应越来越快,纯粹靠价差吃饭的空间已经不大了。
但这不意味着套利死了。几种更高阶的玩法仍然有效,只是门槛更高、需要更多工具和思考。
本文假设你已经读过基础套利教程,熟悉跨平台价差套利的基本逻辑。如果还没有,先去看那篇。
合规提醒:Polymarket 不支持中国大陆、新加坡、法国等地区用户。在使用任何套利策略前,请确认你所在地区的法律规定。套利涉及多平台操作,可能触及不同司法管辖区的监管要求。
多市场相关性套利
基础套利盯的是同一个事件在不同平台的价差。相关性套利盯的是不同事件之间的逻辑矛盾。
什么叫定价不一致
举个具体的例子。假设 Polymarket 上同时存在两个市场:
- 市场 A:“X 会赢得总统大选吗?“——YES 价格 $0.62
- 市场 B:“X 所在的党会赢得大选吗?“——YES 价格 $0.48
逻辑上,如果 X 赢了大选(概率 62%),那 X 所在的党一定赢了。所以”党赢”的概率至少应该等于”X 赢”的概率,也就是至少 62%。但市场 B 给出的只有 48%。
这就是一个定价矛盾。
怎么操作
- 买入市场 B 的 YES(价格偏低,$0.48)
- 卖出/做空市场 A 的 YES,或者买入市场 A 的 NO
这样你实际上在押注”市场 B 的价格会向市场 A 收敛”。不需要猜测选举结果本身——你赌的是这两个市场之间的定价关系会修复。
寻找相关性套利的方向
常见的关联市场组合:
- 候选人 vs 政党:个人胜选概率 vs 政党胜选概率
- 时间维度:“X 年底前发生” vs “X 上半年发生”(后者的概率不应超过前者)
- 包含关系:“GDP 增长超过 3%” vs “GDP 增长超过 2%“(前者概率不能大于后者)
- 因果关系:某政策通过 vs 该政策产生的具体影响
相关性套利的核心是找逻辑漏洞,不是猜结果。你需要对事件之间的逻辑关系有清晰判断。纯粹看价格是找不到这类机会的。
注意事项
相关性套利有一个隐藏的坑:结算规则不同。
两个市场看起来相关,但结算条件可能有微妙差别。“X 赢得大选” vs “X 的党赢得大选”——如果 X 中途退选但替补候选人赢了,市场 A 结算为 NO,市场 B 结算为 YES。这时你的对冲就会同时亏损。
做相关性套利之前,一定要把两个市场的结算规则逐字读完。
事件对冲策略
套利追求无风险利润,对冲追求降低已有头寸的风险。两件事目标不同,但工具相似。
跨资产对冲
你持有加密资产,同时在 Polymarket 上关注政策市场——这两件事可以联动。
场景:你持有大量 ETH。Polymarket 上有一个市场:“美国是否会在 2026 年通过加密货币全面监管法案?”
- 如果法案通过(严格监管),ETH 可能短期下跌
- 你可以在 Polymarket 买入”法案通过”的 YES 份额
这样,如果法案真的通过导致 ETH 下跌,你在 Polymarket 的盈利可以部分对冲 ETH 的损失。
对冲比例怎么算
假设你持有价值 10,000的ETH,估计严格监管法案通过后ETH会下跌151,500)。
Polymarket 上”法案通过”的 YES 价格是 $0.35。
要完全对冲 $1,500 的潜在损失:
需要买入的份额数 = 预期损失 / (1 - YES价格)
= 1500 / (1 - 0.35)
= 1500 / 0.65
≈ 2308 份
对冲成本 = 份额数 × YES价格
= 2308 × 0.35
= $808
如果法案通过:你的 Polymarket 盈利 = 2308 × 0.65=1,500,刚好覆盖 ETH 的损失。对冲成本是 $808。
如果法案没通过:ETH 不受影响,但你损失了 $808 的对冲成本。
对冲不是免费午餐。它的本质是花钱买保险——你付出确定的成本(对冲费用),换取不确定风险的保护。
同平台多市场对冲
你也可以在 Polymarket 内部进行对冲。比如你重仓买了”A 候选人赢得初选”的 YES,可以同时小仓位买入”B 候选人赢得大选”的 YES 作为保护。如果 A 输了初选,B 可能因此受益,你的对冲头寸可以减少损失。
这种操作更灵活,但需要你对事件之间的关联性有准确判断。
API 自动化套利
手动盯盘找套利机会效率太低。用 API 监控价格、发现机会后自动提醒(或自动下单),是进阶玩家的标配。
基础架构
一个最小可用的套利监控系统需要三部分:
- 数据采集:定时拉取市场价格
- 信号判断:检测价差是否超过阈值
- 通知/执行:发送提醒或自动下单
价格监控脚本
下面是一个用 Python 写的简单监控脚本,定时检查两个相关市场的价格关系:
import time
import requests
CLOB_HOST = "https://clob.polymarket.com"
GAMMA_HOST = "https://gamma-api.polymarket.com"
# 两个相关市场的 condition_id
MARKET_A_ID = "你的市场A的condition_id"
MARKET_B_ID = "你的市场B的condition_id"
# 套利阈值(价差超过这个值才提醒)
THRESHOLD = 0.05
def get_market_price(condition_id):
"""获取市场当前中间价"""
url = f"{CLOB_HOST}/midpoint?token_id={condition_id}"
resp = requests.get(url)
if resp.status_code == 200:
data = resp.json()
return float(data.get("mid", 0))
return None
def check_arbitrage():
"""检查两个市场之间的价差"""
price_a = get_market_price(MARKET_A_ID)
price_b = get_market_price(MARKET_B_ID)
if price_a is None or price_b is None:
print("获取价格失败,跳过本轮")
return
spread = price_a - price_b
print(f"市场A: {price_a:.4f} | 市场B: {price_b:.4f} | 价差: {spread:.4f}")
# 如果 A 的概率逻辑上应该 <= B,但实际 A > B + 阈值
if spread > THRESHOLD:
print(f"发现套利机会!价差 {spread:.4f} 超过阈值 {THRESHOLD}")
send_alert(price_a, price_b, spread)
def send_alert(price_a, price_b, spread):
"""发送通知(可以接入 Telegram、微信、邮件等)"""
message = f"套利提醒:市场A={price_a:.4f}, 市场B={price_b:.4f}, 价差={spread:.4f}"
print(f"[ALERT] {message}")
# 这里可以加入你的通知逻辑
# 比如 Telegram Bot、钉钉 Webhook、邮件等
if __name__ == "__main__":
print("套利监控启动...")
while True:
try:
check_arbitrage()
except Exception as e:
print(f"出错了: {e}")
time.sleep(30) # 每 30 秒检查一次
批量扫描多个市场
实际操作中你会同时监控很多市场。可以用 Gamma API 一次性拉取所有活跃市场,然后筛选出有关联的市场组合:
import requests
def get_active_markets():
"""获取所有活跃市场"""
url = "https://gamma-api.polymarket.com/markets?closed=false&limit=100"
resp = requests.get(url)
if resp.status_code == 200:
return resp.json()
return []
def find_related_markets(markets):
"""
按关键词寻找可能存在关联的市场对
这里用的是最简单的关键词匹配,实际可以更精细
"""
pairs = []
for i, m1 in enumerate(markets):
for m2 in markets[i+1:]:
q1 = m1.get("question", "").lower()
q2 = m2.get("question", "").lower()
# 检查是否包含相同的关键实体
# 实际使用时可以用更智能的匹配方式
common_words = set(q1.split()) & set(q2.split())
# 过滤掉常见词,只保留有意义的重叠
stopwords = {"will", "the", "a", "in", "by", "be", "to", "of", "and", "or", "is"}
meaningful = common_words - stopwords
if len(meaningful) >= 2:
pairs.append((m1, m2, meaningful))
return pairs
markets = get_active_markets()
related = find_related_markets(markets)
for m1, m2, words in related[:10]: # 只看前 10 对
print(f"可能关联:")
print(f" - {m1['question']}")
print(f" - {m2['question']}")
print(f" 重叠词: {words}")
print()
自动下单(谨慎使用)
如果你想让系统自动下单,需要用到 CLOB 客户端。参考 API 下单教程,核心逻辑是:
from py_clob_client.client import ClobClient
from py_clob_client.clob_types import OrderArgs, OrderType
from py_clob_client.order_builder.constants import BUY
client = ClobClient(
host="https://clob.polymarket.com",
key="你的私钥",
chain_id=137,
signature_type=1, # 根据你的登录方式选择
funder="你的代理地址"
)
client.set_api_creds(client.create_or_derive_api_creds())
def place_buy_order(token_id, price, size):
"""下一个限价买单"""
order_args = OrderArgs(
price=price,
size=size,
side=BUY,
token_id=token_id,
)
signed_order = client.create_order(order_args)
resp = client.post_order(signed_order, OrderType.GTC)
return resp
自动下单有真金白银的风险。在部署自动交易之前:
- 先用极小金额($1-5)测试整个流程
- 设置严格的单笔金额上限
- 加入熔断机制(比如连续 3 次交易亏损后暂停)
- 不要把大量资金放在 API 可直接操作的账户里
套利收益计算实例
用一个完整的数字例子走一遍相关性套利的全过程。
场景设定
Polymarket 上有两个市场:
- 市场 A:“Z 候选人会赢得 2026 年州长选举?“——YES @ $0.55
- 市场 B:“Z 候选人会获得本党提名?“——YES @ $0.70
逻辑上,赢得大选的前提是先获得党内提名。所以”赢大选”的概率不可能高于”获提名”的概率。这里的定价是合理的(0.55 < 0.70)。
但如果定价反过来呢?假设某个时刻:
- 市场 A(赢大选)YES @ $0.58
- 市场 B(获提名)YES @ $0.50
这就不对了。赢大选的概率(58%)比获提名的概率(50%)还高,逻辑上不可能。
操作步骤
第一步:买入被低估的市场 B(获提名)YES
- 买入 1000 份 YES @ $0.50
- 成本 = 1000 × 0.50=∗∗500**
第二步:买入市场 A(赢大选)NO
- 买入适量的 NO 来对冲
- NO 价格 = 1 - 0.58 = $0.42
- 买入 700 份 NO @ $0.42
- 成本 = 700 × 0.42=∗∗294**
总投入 = 500+294 = $794
结果分析
情况一:Z 获得提名并赢得大选
- 市场 B(YES):1000 × 1.00=1,000
- 市场 A(NO):归零,损失 $294
- 总回收 = $1,000
- 净利润 = 1,000−794 = +$206
情况二:Z 获得提名但没赢大选
- 市场 B(YES):1000 × 1.00=1,000
- 市场 A(NO):700 × 1.00=700
- 总回收 = $1,700
- 净利润 = 1,700−794 = +$906
情况三:Z 没获得提名(也就不可能赢大选)
- 市场 B(YES):归零
- 市场 A(NO):700 × 1.00=700
- 总回收 = $700
- 净利润 = 700−794 = -$94
三种情况里两种盈利、一种小亏。而且情况三的亏损幅度远小于情况一和二的盈利幅度。只要你判断定价矛盾确实存在,这就是一个正期望值的交易。
注意:上面的计算没有扣除手续费。Polymarket 对 taker 有手续费,具体费率参考交易费用说明。实际操作时需要把手续费算进成本。
进阶套利的风险管理
进阶套利的风险比基础套利高得多。以下是你必须考虑的几类风险。
滑点风险
你看到的价格和你实际成交的价格之间可能有差距。特别是:
- 流动性薄的市场,大单会推动价格
- 两个市场下单有时间差,第二笔单的价格可能已经变了
- 市场波动剧烈时滑点更大
应对:使用限价单而非市价单。可以接受成交速度慢一些,但价格有保障。
执行风险
套利需要在两个市场同时操作。但实际上你做不到真正的同时——总有一条腿先执行。如果第一条腿成交了,第二条腿的价格变了或者没成交,你就暴露在单边风险中。
应对:
- 先在流动性差的市场下单(因为这条腿更难成交)
- 确认第一条腿成交后,立刻执行第二条腿
- 用 API 来缩短两条腿之间的时间差
结算风险
预测市场的结算依赖于规则解读。两个看起来矛盾的市场,可能因为结算规则的细微差异而同时结算为 YES 或同时结算为 NO,打破你的套利逻辑。
应对:逐字阅读结算规则。如果规则表述模糊,放弃这个机会。
相关性崩塌
你认为两个市场相关,但实际上这种相关性不是绝对的。突发事件可能打破你预设的关联逻辑。
应对:不要假设任何两个市场 100% 相关。留出安全边际,控制单笔交易的资金比例。
套利不是”稳赚不赔”的买卖。进阶策略尤其如此。在你完全理解所有风险之前,只用小资金练手。亏得起的钱才能放进去。
套利工具推荐
API 和数据源
| 工具 | 用途 | 链接 |
|---|
| Polymarket CLOB API | 获取实时价格、下单 | API 文档 |
| Gamma API | 获取市场列表和元数据 | Gamma 文档 |
| Polygonscan | 查看链上交易记录 | polygonscan.com |
| Dune Analytics | 社区数据仪表板 | dune.com |
开发环境
- Python 3.10+:推荐使用
py-clob-client 库
- 虚拟环境:用
venv 或 conda 隔离依赖
- 定时任务:用
cron(Linux/Mac)或云函数(AWS Lambda、Cloudflare Workers)跑监控脚本
通知渠道
- Telegram Bot:最方便,免费,延迟低
- 钉钉/飞书 Webhook:国内用户首选
- 邮件:延迟高,但作为备份通知可以
电子表格模板
建一个简单的 Google Sheet 或 Excel 表格来追踪你的套利交易:
| 日期 | 市场A | 市场B | 买入价A | 买入价B | 投入 | 结果 | 回收 | 净利润 | 备注 |
|---|
| 3/10 | 选举YES | 提名YES | 0.58 | 0.50 | $794 | 情况二 | $1,700 | +$906 | 结算正常 |
每笔交易都记录。不记录就没法复盘,策略也就没法迭代。
常见问题
相关性套利和普通套利有什么区别?
普通套利盯的是同一事件在不同平台的价差——逻辑简单,机会少,竞争激烈。相关性套利盯的是不同事件之间的逻辑矛盾——需要更多思考和判断,但机会更多,竞争相对少。两者的共同点是都不依赖预测事件结果本身。
进阶套利需要多少资金?
看你的时间成本。纯手动操作的话,资金至少 $5,000 以上才有意义,因为进阶套利的利润率通常在 5-15%,太小的资金赚到的钱覆盖不了你花的时间。如果你搭建了自动化系统,资金门槛可以低一些,因为边际时间成本接近零。
API 自动化套利需要什么技术基础?
能写基础的 Python 脚本就够了。具体来说:会用 requests 库调 API、会写 while 循环做定时任务、会处理 JSON 数据。不需要机器学习、不需要高频交易架构。参考 API 下单教程 从零开始搭建。
对冲成本太高怎么办?
对冲成本取决于市场价格(也就是概率)。如果一个事件的 YES 价格是 $0.80,你买 YES 来对冲另一个头寸的成本就很高。两个办法:一是只做部分对冲(不追求完全覆盖),二是等价格更有利时再建立对冲头寸。要记住对冲是买保险,保险从来不便宜。
Polymarket 会限制套利交易者吗?
Polymarket 是去中心化的,不像传统博彩公司那样会封禁套利账户。你的交易都在链上执行,没有人能阻止你下单。但要注意 API 有速率限制,短时间内请求太多会被临时限制。另外,大额交易可能影响市场价格,等于自己吃掉了套利空间。
延伸阅读