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 在本地回放样本。