通知Polymarket 5 分钟与 15 分钟涨跌市场已全部改用 60 秒 TWAP 结算,30 秒 TWAP 流(twap30s)将于 2026-10-20(UTC)起停止采集与发布,已发布的文件不受影响。
教程

Polymarket 5 分钟市场到底按哪个价格判输赢,用错了回测会怎样

给 Polymarket 加密涨跌市场做回测,每个市场都要判一次输赢:涨赢还是跌赢。最直接的做法是拿收盘时的 Chainlink BTC/USD 价格和目标价比。但这些市场并不按这个价格结算,碰上险局,差的这一点就决定了结果。

我们在免费样本日(2026-09-08)的 BTC 5 分钟市场上用三种方式判输赢,然后再问一个问题:收盘前多少秒就能知道答案?

每个市场自己写明的结算流

市场数据行在 raw.cryptoMarketConfig 里带着结算配置。样本日有目标价的 274 个 BTC 5 分钟市场,twapLookbackSeconds 全是 60:按 Chainlink 60 秒 TWAP 结算,拿市场窗口内最后一个 TWAP 值和 strike_value 比。规则本身以及它的历次变化见市场怎么判定输赢;要从每个市场上读,别按日期推。

按这个口径重算,271 个市场与 Polymarket 公布的 outcome_prices 一致,没有一个不同。另有 3 个市场在样本里窗口内没有 TWAP tick,没有计入。

grading at the close against strike_value
  official  271/271 match outcome  (0 differ; skipped: no tick 3, closing tick unusable 0)
  prices    259/271 match outcome  (12 differ; skipped: no tick 0, closing tick unusable 0)
  twap30s   263/271 match outcome  (8 differ; skipped: no tick 0, closing tick unusable 0)
  |settlement close - strike| in USD: median 42.98, under $5: 25, under $20: 81 of 271
  flipped by prices: settlement-vs-strike gap median 5.25 USD, max 18.10
  flipped by twap30s: settlement-vs-strike gap median 3.38 USD, max 18.10

k seconds before the close, using only what had been RECEIVED by then:
  k=60  settle: 231/270  85.6%   prices: 248/270  91.9%   mid: 251/270  93.0%
  k=30  settle: 246/270  91.1%   prices: 259/270  95.9%   mid: 266/270  98.5%
  k=10  settle: 261/270  96.7%   prices: 262/270  97.0%   mid: 269/270  99.6%
  k=5   settle: 263/270  97.4%   prices: 259/270  95.9%   mid: 270/270 100.0%
  k=2   settle: 266/270  98.5%   prices: 259/270  95.9%   mid: 270/270 100.0%

分析程序的节选输出;本页所有数字都出自这里。

用错价格,部分结果会判反

目标价和时间窗口都不变,只换价格流:

判反的都是险局。用瞬时价判反的那些市场,结算收盘价离目标价的中位数只有 $5.25,最多也不超过 $18.10。这种情况并不少见:271 个市场里有 25 个收在目标价 $5 以内,81 个在 $20 以内,而全体的中位距离是 $42.98。如果策略集中交易价格贴近目标价的市场,用错结算流对回测的影响可能比市场层面的错判率更大;要拿它自己的成交逐个市场核对。

  • 瞬时 Chainlink 价: 271 个里判反 12 个,4.4%。
  • 30 秒 TWAP: 271 个里判反 8 个,3.0%。它和 60 秒那条在同一个归档里,很容易拿错。

最早能在什么时候知道结果?

接着,在每个市场收盘前 k 秒,取当时已经收到的最新值(按 recv_ms,而不是价格流自己打的时间戳,这样之后才到的数据不会混进来),看它是否已经指向最终结果。两条 Chainlink 价格流看它在目标价的哪一边;盘口看涨 token 的中间价是否高于 0.5。在每个截止时刻都有数据的 270 个市场中:

TWAP 有滞后。离收盘还有一分钟时,它的值主要反映的是之前那一分钟,所以早期它是三者里最弱的,直到最后几秒、逐渐逼近最终结算的那个数时,才反超瞬时价。

瞬时价早期预测得更准,到最后反而更差,因为结算用的不是它:从收盘前 5 秒起它一直停在 95.9%,而 TWAP 还在继续变准。

在这里测的每个截止时刻,涨方中间价指向赢家的比例都高于两条价格流:报价已经偏向 TWAP 最终落下的那一边。这张表只测方向,不测你要付的价格,所以临近到期的策略仍然要按当时盘口上真实挂着的价格回测,而不是按假设的公允价。

  • 收盘前 60 秒: 结算 TWAP 85.6%,瞬时价 91.9%,涨方中间价 93.0%。
  • 30 秒: TWAP 91.1%,瞬时价 95.9%,中间价 98.5%。
  • 10 秒: TWAP 96.7%,瞬时价 97.0%,中间价 99.6%。
  • 5 秒和 2 秒: TWAP 依次为 97.4% 和 98.5%,瞬时价两次都是 95.9%,中间价两次在 270 个市场里全部站在赢的一边。

给涨跌市场判输赢的检查清单

  • 从市场上读结算流。 看每行市场的 twapLookbackSeconds,不要按日期套规则。
  • 比定点整数。 full_accuracy_value 对 strike_value,两者都是 1e18 定点,大于或等于算涨。
  • 按时间戳取收盘 tick。 数据按收到的顺序归档,文件最后一行不一定是最后一个 tick。
  • 提前信号按接收时间截断。 时间戳早于决策时刻的 tick,可能是在决策之后才到的。
  • 临期交易按盘口定价。 在这里测的截止时刻,中间价大多指向赢家,但这不说明能赚钱:成交价、方向判错的市场和手续费要放在一起回测。

怎么复现

数字来自免费样本日 2026-09-08:BTC 5 分钟市场、三条 Chainlink 价格流和最优买卖价文件,无需 key、无需注册,CC BY 4.0 授权,也可以在 Kaggle 和 Hugging Face 上获取。样本日会不定期更换,换了之后跑出来的数字也会不同。

判输赢那一步就是市场怎么判定输赢页上的重算代码;把它为 60 秒价格流读取的文件换成瞬时价或 30 秒的文件,就能看到判反。提前判断那部分,只保留 recv_ms 不晚于截止时刻的行,再按它们自己的时间戳取最新一条。

想让判输赢这一步自动处理、直接对这些市场跑策略,可以用托管回测,或者 pip install outcometick 在本地回放样本。

相关