全部文章
研究回测策略研究Up/Down 市场

97.7% 胜率却在亏钱:买入热门方策略回测

买入明显领先的一方,拿走几乎确定的收益,然后重复。这种策略的胜率在截图上看起来非同寻常。但在真实订单簿数据上的 17,002 笔交易中,它是亏钱的,而原因是算术,不是运气。

阅读约 11 分钟

流传最广的 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 个百分点的门槛。下面有好几个结果都落在这个范围内,这正是为什么这些策略的中间价回测看起来能赚钱,实盘交易却不行。

结果:按价格区间买入热门方

入场价格交易数平均成本胜率优势ROIz结论
50–60¢1,71553.72¢53.18%−0.54pp−1.00%−0.45噪声
60–70¢1,47164.71¢66.76%+2.04pp+3.16%1.66噪声
70–80¢1,82474.67¢76.15%+1.49pp+1.99%1.49噪声
80–90¢2,46984.87¢85.05%+0.18pp+0.22%0.26噪声
90–97¢3,64493.56¢91.16%−2.39pp−2.56%−5.09显著
97¢+5,87998.38¢97.70%−0.68pp−0.69%−3.47显著
17,002 笔交易。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,2770.6%−0.9pp
6.8¢4805.4%−1.4pp
11.9¢3089.1%−2.8pp
16.9¢20513.2%−3.8pp
21.9¢16718.0%−3.9pp
42.0¢10942.2%+0.2pp
62.0¢10368.0%+6.0pp
72.1¢15268.4%−3.7pp
82.0¢18488.6%+6.5pp
92.2¢40891.4%−0.8pp
97.8¢1,07798.1%+0.3pp
BTC 5m 市场,T−60s 时的 Up 卖价报价与实际结果对比。负的定价偏差表示合约相对其获胜频率被高估。

这是教科书式的热门-冷门偏差(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 天免费试用开始。

继续阅读