97.7% 胜率却在亏钱:买入热门方策略回测
买入明显领先的一方,拿走几乎确定的收益,然后重复。这种策略的胜率在截图上看起来非同寻常。但在真实订单簿数据上的 17,002 笔交易中,它是亏钱的,而原因是算术,不是运气。
流传最广的 Polymarket Up/Down 策略也是最简单的:在还剩一分钟时,买入明显领先的那一方。它很直观,容易自动化,胜率也是那种会被人截图分享的水平。
我们在真实订单簿快照上用 17,002 笔模拟交易测试了它。胜率确实非同寻常,收益却是负的。
核心结论
在 97¢ 或以上买入热门方,5,879 笔交易的胜率为 97.70%,每笔交易收益却是 −0.69%。这个策略并不是运气不好。在这些价格上它不可能赚钱,而且它赢得越稳定,这一点就越确定。
测试方法
- 样本范围:PolyTest 存档中所有已结算的 BTC、ETH 和 SOL 5 分钟 Up/Down 市场,滚动 31 天窗口,覆盖 2026 年 8 月 5 日至 9 月 5 日。
- 入场:每个市场一笔交易,在最接近到期前 60 秒的快照处入场。每个市场只有一个观测值,因此不会因为重复采样同一市场而产生自相关。
- 方向:报价较高的那一方,即热门方。
- 成交价:按卖价,而不是中间价。在这批数据中
price_up + price_down平均为 1.0117,所以约 1.2¢ 的双边价差在入场时就已经付出了。 - 排除:任一方卖单簿为空的市场。如果没人挂卖单,交易就不可能发生;把它们算进来等于凭空捏造不可能发生的成交。
- 收益:赢家按 $1.00 结算,输家为 $0。
为什么按卖价成交比听起来更重要
大多数公开发表的预测市场回测都使用中间价。对于一份按 $1 结算的合约,1.2¢ 的价差意味着每一笔交易都有 1.2 个百分点的门槛。下面有好几个结果都落在这个范围内,这正是为什么这些策略的中间价回测看起来能赚钱,实盘交易却不行。
结果:按价格区间买入热门方
| 入场价格 | 交易数 | 平均成本 | 胜率 | 优势 | ROI | z | 结论 |
|---|---|---|---|---|---|---|---|
| 50–60¢ | 1,715 | 53.72¢ | 53.18% | −0.54pp | −1.00% | −0.45 | 噪声 |
| 60–70¢ | 1,471 | 64.71¢ | 66.76% | +2.04pp | +3.16% | 1.66 | 噪声 |
| 70–80¢ | 1,824 | 74.67¢ | 76.15% | +1.49pp | +1.99% | 1.49 | 噪声 |
| 80–90¢ | 2,469 | 84.87¢ | 85.05% | +0.18pp | +0.22% | 0.26 | 噪声 |
| 90–97¢ | 3,644 | 93.56¢ | 91.16% | −2.39pp | −2.56% | −5.09 | 显著 |
| 97¢+ | 5,879 | 98.38¢ | 97.70% | −0.68pp | −0.69% | −3.47 | 显著 |
z 是优势除以其标准误;|z| ≥ 1.96 表示在 95% 置信水平下显著。优势 = 胜率减去平均成本,单位为百分点。先看最下面两行,因为成交量都在那里。超过一半的交易发生在 90¢ 或以上,而这两个区间都在高统计置信度下亏钱。90–97¢ 区间最差:你花 93.56¢ 买一个发生概率为 91.16% 的结果,每笔交易流失 2.39 个百分点,z 值为 −5.09。
中间几个区间看起来好一些,60–70¢ 的 ROI 为 +3.16%,但都没有达到显著性。z = 1.66 和 z = 1.49,这就是把抛硬币包装成 1,500 笔交易后你会预期看到的收益。没有任何区间显示出统计显著的正优势。
胜率不等于优势
97¢+ 区间是数据集中最清楚的例证。97.70% 的胜率是真的:40 笔交易你会赢 39 笔。但你花了 98.38¢ 去赢 $1.00,所以这 39 笔盈利加起来只有 $0.63,而唯一的一笔亏损就让你损失 $0.98。一个策略可以几乎每笔都赢,却仍然是亏钱的策略。任何用胜率而不是收益来宣传的机器人,要么是天真,要么是在推销什么。
校准曲线
暂时把策略放一边,看看市场本身:这些价格有多准确?对于每个 BTC 5 分钟市场,我们取到期前 60 秒的 Up 报价,与 Up 实际获胜的频率进行比较。
| Up 报价 | 市场数 | Up 实际胜率 | 定价偏差 |
|---|---|---|---|
| 1.5¢ | 2,277 | 0.6% | −0.9pp |
| 6.8¢ | 480 | 5.4% | −1.4pp |
| 11.9¢ | 308 | 9.1% | −2.8pp |
| 16.9¢ | 205 | 13.2% | −3.8pp |
| 21.9¢ | 167 | 18.0% | −3.9pp |
| 42.0¢ | 109 | 42.2% | +0.2pp |
| 62.0¢ | 103 | 68.0% | +6.0pp |
| 72.1¢ | 152 | 68.4% | −3.7pp |
| 82.0¢ | 184 | 88.6% | +6.5pp |
| 92.2¢ | 408 | 91.4% | −0.8pp |
| 97.8¢ | 1,077 | 98.1% | +0.3pp |
这是教科书式的热门-冷门偏差(favourite–longshot bias),几十年来在赛马投注和预测市场中都有记录。冷门被系统性地高估:报价约 17¢ 的合约获胜概率为 13.2%,报价约 22¢ 的为 18.0%。中等价位的热门方则被低估了几个百分点。
这个偏差是真实的,方向也是对的,但很难变现:偏差最大的区间,恰恰是订单簿最薄、相对价差最大的区间。偏差体现在校准曲线上,却在盈亏里消失了,这通常就是一个广为人知的异常现象的归宿。
为什么对称测试与只看 Up 的测试结论不同
校准表显示 82¢ 处有 +6.5pp,而策略表显示整个 80–90¢ 区间只有 +0.18pp。这并不矛盾:校准表只看 Up 一方,而 Up 只有在有人挂卖单时才有报价。以“Up 可以买入”为条件,悄悄地选出了另一组市场。对称的热门方测试没有这种选择偏差,所以做交易决策时应该相信它。
那么,偏差到底存不存在?
既存在也不存在,而这个区别正是关键所在:
- 作为对价格的描述,存在。低于约 25¢ 的冷门持续被高估 3–4 个百分点。这是这些市场真实、可测量的属性。
- 作为一种策略,不存在。扣除价差后,买入热门方毫无收益;而在成交量最集中的价位上,它在高置信度下的收益低于零。
- 不对称性说明了问题。如果冷门被高估,正确的交易不是买入热门方,而是卖出冷门。这需要挂出限价卖单,等待别人的市价单来成交,也就是做市,以及随之而来的全部库存风险。这不是一个靠吃卖单就能执行的策略。
自己复现
上面的每个数字都来自你可以拉取的数据。测试的结构比我们的数字更重要:在你自己的时间窗口上运行,看看结论是否仍然成立。
import os, requests
from statistics import mean
BASE, H = "https://api.polytest.io/api/v1", {"X-API-Key": os.environ["POLYTEST_KEY"]}
trades = []
markets = requests.get(f"{BASE}/markets", headers=H, params={
"coin": "btc", "market_type": "5m", "limit": 100,
}).json()["markets"]
for m in markets:
if not m.get("winner"):
continue
# The snapshot nearest 60s before expiry — one observation per market.
snap = requests.get(f"{BASE}/markets/{m['id']}/snapshots/at", headers=H, params={
"timestamp": m["end_time"], "offset_seconds": -60,
"include_orderbook": "true",
}).json().get("snapshot")
if not snap:
continue
up, down = snap.get("price_up"), snap.get("price_down")
if up is None or down is None:
continue # no offer on one side: untradeable
side = "Up" if up >= down else "Down"
cost = max(up, down) # pay the ask, not the mid
trades.append((cost, m["winner"] == side))
n = len(trades)
cost = mean(c for c, _ in trades)
wr = sum(w for _, w in trades) / n
print(f"n={n} cost={cost:.4f} win_rate={wr:.4f} ROI={(wr-cost)/cost*100:+.2f}%")这项研究能证明什么,不能证明什么
- 只有一个月。滚动 31 天窗口,2026 年 8 月 5 日至 9 月 5 日。足以产生 17,002 笔交易,但不足以覆盖多种波动率环境。
- 按盘口最优价成交。我们按最优卖价计费,并假设整笔交易都在那里成交。真实规模的订单需要逐档吃单,所以实盘结果会比这些更差,而不是更好。
- 未计入手续费或 gas。加上它们,每一行都会下降。
- 仅限 5 分钟市场。更长的时间周期流动性不同,表现可能也不同。
- 严格在 T−60s 入场。事实证明时机影响巨大,见入场时机研究。
我们愿意为之辩护的结论是:按卖价买入热门方不是一种策略,而是一种付 17,000 次价差的方式。如果你想要一个真正有效的版本,现货滞后研究测试了一个相关的想法,它确实显示出真实的优势,同时也揭示了阻止它扩大规模的约束。
这里的每个数字都来自带完整订单簿深度的 PolyTest 快照。Polymarket 自己的 API 无法支撑这项测试:已结算市场的订单簿返回 404,它保留的价格历史大约每分钟一个点,太粗糙,无法说明一笔成交当时要花多少钱。如果你想运行自己的版本,免费开始。
常见问题
- 在 Polymarket Up/Down 市场买入热门方有用吗?
- 没用。在 BTC、ETH 和 SOL 5 分钟市场上,于到期前 60 秒按卖价入场的 17,002 笔模拟交易中,没有任何价格区间显示出统计显著的正收益。有两个区间显著亏损:90-97¢ 每笔收益 -2.56%(z = -5.09),97¢+ 每笔收益 -0.69%(z = -3.47)。这两个区间包含了超过一半的交易。
- 97% 胜率的策略怎么会亏钱?
- 因为收益固定为 $1。以 98.38¢ 买入、胜率 97.70%,意味着 40 笔中赢 39 笔,总利润约 63 美分,而唯一的一笔亏损就要 98 美分。胜率和期望值是两个不同的量;在预测市场上,非常高的胜率通常意味着你支付的价格已经接近真实概率,没有剩下任何利润空间。
- Polymarket 上存在热门-冷门偏差吗?
- 存在,而且可以测量。在 BTC 5 分钟市场中,报价约 17¢ 的合约只有 13.2% 的时候按买方有利的方向结算,报价约 22¢ 的合约胜率为 18.0%,冷门被高估了 3-4 个百分点。但它无法转化为一个能盈利的买入热门方策略,因为偏差集中在订单簿最薄、相对价差最大的区间。
- 为什么按卖价而不是中间价成交会改变结果?
- 在 Polymarket Up/Down 市场上,双边卖价之和约为 1.0117,所以入场时要支付约 1.2 美分的价差。由于合约按 $1 结算,这意味着每笔交易都有 1.2 个百分点的门槛。有好几个策略表面上的优势比这还小,这正是中间价回测看起来能赚钱而实盘交易却不行的原因。
- 我应该卖出冷门而不是买入热门方吗?
- 测得的偏差确实指向这个方向,但那是另一种交易。卖出被高估的冷门意味着挂出限价卖单,等待别人的市价单来成交,也就是做市,伴随着库存风险和逆向选择。它无法像买入热门方那样通过吃单来执行,而且本次回测也没有测量它。
获取 Polymarket 不保留的历史数据
PolyTest 在 Polymarket 加密货币 Up/Down 市场运行期间实时记录:240M+ 条快照,包含 8 档订单簿深度、亚秒级时间戳,并保留已结算的市场。从 3 天免费试用开始。
继续阅读
Polymarket 现货滞后优势是真的,但它只有大约 $100 深
在 Polymarket 重新定价之前,买入现货已经确认的那一方。与人们声称的大多数策略不同,这个策略经得起数据检验,z 值高达 15。它之所以没能让所有人发财,原因就摆在订单簿里。
入场时机比你的信号更值钱
大多数策略讨论都在说买什么。在五分钟市场上,什么时候买反而更重要:同一个信号,仅仅因为时钟不同,就能从统计噪声变成 15 个标准差的优势。但有一个重要的例外。
Polymarket Up/Down 市场:slug、结算与订单簿断崖
Polymarket 的加密货币 Up/Down 市场是平台上频率最高的交易品种,也是最容易被误解的。下面介绍如何解读 slug、什么决定了结算,以及市场关闭后 Polymarket 到底保留了什么。