如何选择 Polymarket 数据 API
每家提供商都在宣传一个大数字,却几乎没有人宣传真正重要的那个数字。下面是在你做出决定之前真正应该测试的东西,也包括那些你根本不需要付费提供商的情况。
如果你正在找 Polymarket 历史数据,你一定已经撞上了把所有人引到这里的那堵墙:Polymarket 自己的 API 只提供当前状态。请求已结算市场的订单簿会得到 404;它保留的价格历史大约每分钟一个点,没有任何深度信息。这两点都与套餐无关。订单簿就是不存在。
所以你需要一家在市场运行期间就记录了订单簿的提供商。问题在于,这个领域的每家提供商都在宣传同一个头条数字,而它几乎是最没有信息量的那个。下面是你应该检查的东西。
我们自己就做这个
PolyTest 是一个 Polymarket 数据 API,所以我们不是中立方。下面是如果我们是买方而不是卖方时会用的检查清单,其中还包括一节讲你什么时候不应该付钱给任何人,包括我们。请亲自运行测试,而不是相信任何人的营销,当然也包括我们的。
1. 看每个市场每分钟的快照数,而不是快照总数
快照总数到处都是头条数字,但它几乎毫无意义。总数不过是采集频率 × 跟踪的市场数 × 采集时长。数字更大的提供商可能精度更高,也可能只是采集时间更长,或者在没人交易的市场上计入了冗余的行。
你真正需要知道的是:在我关心的那个具体市场上,我每分钟能拿到多少条快照?一个每分钟采样两次的 5 分钟市场,只给你十个数据点来为整个市场生命周期建模。这不足以测试任何东西。
# Pull the same market from each provider, then compare density.
snaps = fetch_snapshots(market_id) # provider-specific call
span_s = (snaps[-1]["timestamp"] - snaps[0]["timestamp"]) / 1000
per_min = len(snaps) / (span_s / 60)
print(f"{len(snaps)} snapshots over {span_s:.0f}s = {per_min:.1f}/min")
# Gaps matter more than the average. One 90-second hole in a 5-minute
# market means you cannot model the part where it was decided.
gaps = [
(b["timestamp"] - a["timestamp"]) / 1000
for a, b in zip(snaps, snaps[1:])
]
print(f"max gap: {max(gaps):.1f}s median: {sorted(gaps)[len(gaps)//2]:.1f}s")检查最大间隔,而不是平均值
平均值会掩盖失效模式。一个平均每分钟 4 条快照的数据源,如果在 5 分钟市场的最后一分钟有 90 秒的空洞,那它在你最关心的时段就毫无用处。向任何提供商索要样本市场上的最大间隔,如果他们答不上来,这本身就说明了问题。
2. 是真实的订单簿深度,还是只有盘口最优价?
这是决定你的回测是否有意义的最大单一因素,也是营销话术最滑头的地方。“订单簿数据”可以指从完整的价格阶梯到单一的买价/卖价对之间的任何东西。
| 你拿到的 | 你能测试的 |
|---|---|
| 只有中间价 | 几乎什么都测不了。中间价不是你能成交的价格。 |
| 最优买价 / 最优卖价 | 价差是否吃掉你的优势:必要,但不充分。 |
| 完整深度阶梯 | 给定规模下的实际成交价,包括滑点。 |
如果你打算以任何有意义的规模交易,你就需要价格阶梯。在一个流动性很薄的 Up/Down 市场里,一笔 500 份的订单不会在第一档成交,它会逐档吃单,而第一档价格与你真实平均成交价之间的差距,经常比你要测试的优势还大。
def simulate_fill(levels, qty):
"""Walk the ladder. This is what actually happens to your order."""
filled = cost = 0.0
for lvl in levels:
take = min(lvl["size"], qty - filled)
cost += take * lvl["price"]
filled += take
if filled >= qty:
break
if filled < qty:
return None # Not enough liquidity to fill at all.
return cost / filled
book = snapshot["orderbook"]["asks"]
print("top of book:", book[0]["price"])
print("true fill :", simulate_fill(book, 500))
# A gap of 2-3c here on a $1 binary is routine, and it is
# larger than most claimed edges.3. 已结算的市场真的被保留了吗?
为这些数据付费的全部理由,就是 Polymarket 把它们丢弃了。所以要确认提供商确实保留了这些数据,而不是用缓存代理实时端点。
这个测试只需一分钟:找一个几周前结算的市场,请求它的快照,确认你拿到的是带深度的完整价格路径,而不只是一条说明哪一方获胜的元数据记录。知道结果不等于有数据;每个值得测试的策略关注的都是路径,而不是答案。
元数据不是历史
有些数据源会很乐意返回已结算市场的问题、成交量和获胜结果,因为这些信息在公开数据源中都还保留着。那是基础概率数据。它无法告诉你你的订单会以什么价格成交,而基础概率中可见的任何偏差,在你看到之前就已经被做市商计入了价格。
4. 历史窗口与历史深度
提供商以两种不同的形式出售历史数据,这个区别比天数本身更重要:
- 滚动窗口:最近 N 天,更早的数据会过期移除。适合针对当前市场条件进行调优。
- 保留的存档:自开始采集以来的全部数据。如果你想在不同波动率环境下测试,这是必需的。
你需要哪种,老实说取决于你的策略。如果你交易 5 分钟市场并每周重新调优,30 天就足够了,为更多数据付费是浪费。如果你想知道你的优势能否扛过去年的市场条件,滚动窗口无论多少钱都回答不了这个问题。
当心只在一种行情下测试
回测撒谎最常见的方式,就是完全在单一市场行情下运行。在 30 个平静的日子里调好的策略看起来很稳健,直到波动来临。如果你的窗口很短,至少把它一分为二,检查结果在两半中是否都成立。
5. 你真正能用上的吞吐量
速率限制听起来像个细节,直到你运行第一次真正的回测。把三个币种一个月的 5 分钟市场的所有快照都拉下来需要大量请求,10 次请求/秒的限制会把一个下午的研究变成一个通宵的任务。
有两个数字很重要,而提供商往往只公布一个:持续吞吐量(每分钟请求数)和突发容量(每秒请求数)。每分钟限制很高但突发限制很低,并行拉取依然会卡住。
| 套餐 | 请求数 / 分钟 | 突发 / 秒 | 历史数据 |
|---|---|---|---|
| PolyTest 免费版 | 30 | 2 | 近期市场 |
| PolyTest Builder | 250 | 12 | 14 天 |
| PolyTest Pro | 750 | 40 | 完整存档 |
| PolyTest Enterprise | 定制 | 定制 | 完整 + 批量导出 |
如果你经常拉取大量历史数据,还要问一下有没有批量导出的途径。通过 REST 端点分页拉取一百万条快照是可行的,但那不是合适的工具。
6. 付费前能评估吗?
你没法从营销页面上评估数据质量。任何对自己数据有信心的提供商,都会让你在付费之前先看看数据,通过免费档或试用,最好还有一份无需注册就能阅读的 API 参考。
不过要清楚免费档或试用的用途。我们的是完整 Builder 套餐的 3 天试用,包含订单簿深度,让你可以在决定之前检查覆盖范围、快照密度和响应结构;但三天时间加上 14 天的窗口,让它成为一个评估工具,而不是一个研究档位。无论是哪家提供商,在下结论之前,先弄清楚哪些部分是真正可以免费试用的。
7. 你的工具能读懂文档吗?
这是一个较新的考量,值得检查,因为在出问题之前你根本看不到它。如果你用 Cursor、Claude Code 或 Codex 进行开发,你的助手能否写出正确的集成代码,取决于它能否读到提供商的文档。
有些数据提供商在 robots.txt 中屏蔽了 AI 爬虫。这是关于训练数据的合理选择,但这意味着模型看不到他们的文档,只会自己编造一套 API 接口。你可以在大约五秒钟内检查任何提供商:
curl -s https://<provider>/robots.txt | grep -iA1 "GPTBot\|ClaudeBot\|Google-Extended"
# "Disallow: /" under those agents means your AI assistant
# cannot read their docs and will guess at the API instead.作为参考,PolyTest 允许这些爬虫,并发布了 llms.txt、llms-full.txt 和一份 OpenAPI 规范。不过实际的测试比阅读策略文件更简单:让你的助手针对每家提供商写一个集成,看哪一家能产出可以运行的代码。
什么时候你不应该付钱给任何人
这一点值得直说,因为它对我们和对任何人一样适用。如果符合以下情况,你不需要付费的数据提供商:
- 你只需要实时数据。Polymarket 的公开 API 和 WebSocket 数据流是免费的,市场数据无需认证,而且完全够用。历史数据提供商只为历史数据而存在。
- 你在测试基础设施,而不是策略。认证、解析、重连和速率限制处理,都可以对着免费的实时端点进行检验。
- 你的策略不依赖成交。如果你研究的是基础概率或结算频率,这些信息在公开元数据中都还保留着。
- 你愿意自己记录。对着公开的 WebSocket 运行一个采集程序是完全可行的。代价是一台小服务器,以及让它持续运行的自律。问题在于你的历史数据从零开始,而且无法回补,所以只有在你远早于需要数据之前就开始采集,它才有用。
付费的理由既狭窄又具体:你想要的是你没有记录过的历史数据,并且从今天就要。
一个今天下午就能做的测试
- 注册你名单上每家提供商的免费档或试用。
- 选一个市场(同一币种、同一时间周期、同一天),从每家拉取数据。
- 比较每分钟快照数和最大间隔。密度和连续性胜过任何头条数字。
- 检查每条快照的订单簿档数。如果不是价格阶梯,你就无法为成交建模。
- 请求一个一个月前结算的市场,确认你拿到的是完整路径,而不只是结果。
- 运行你最重的实际查询模式,看哪家提供商最先限流。
- 让你的 AI 助手针对每家写一个集成,看它实际能读懂哪家的文档。
这套流程只需一个下午,告诉你的比任何对比表都多,包括这一篇。如果你想从我们这里开始,有 3 天免费试用,端点参考也完全开放,无需注册即可阅读。
常见问题
- 选择 Polymarket 历史数据提供商应该看什么?
- 看每个市场每分钟的快照数,而不是快照总数;看快照之间的最大间隔,而不是平均值。确认你拿到的是完整的订单簿价格阶梯,而不只是中间价或盘口最优价,因为只有价格阶梯才能让你模拟真实成交。确认已结算的市场确实连同完整价格路径一起被保留,而不只是元数据。然后比较持续和突发速率限制,以及是否能在付费前评估数据。
- 为什么不能用 Polymarket 自己的 API 做回测?
- Polymarket 的 API 只提供当前的市场状态。市场一旦结算,请求它的订单簿会返回 404 和 "No orderbook exists for the requested token id",它保留的价格历史大约每分钟一个点。获胜结果和总成交量等元数据会保留,但订单簿深度不会,而每分钟一个价格太粗糙,无法模拟成交,所以没有第三方存档就没有任何东西可以用来回测执行。
- 快照总数越大越好吗?
- 不一定。快照总数只是采集频率乘以跟踪的市场数再乘以采集时长,所以更大的数字可能意味着更高的精度、更长的采集时间、更广的覆盖范围,也可能只是在流动性差的市场上有更多冗余的行。决定数据是否可用的,是你交易的那些具体市场上的快照密度、相邻快照之间的最大间隔,以及每条快照是否带有真实的订单簿深度。
- 我需要订单簿深度,还是中间价就够了?
- 如果你打算以有意义的规模交易,就需要深度。中间价不是你能成交的价格,而在按 $1 结算的合约上,Polymarket Up/Down 的价差通常有 2-5 美分,经常比要测试的优势还大。完整的价格阶梯让你可以逐档吃单,计算包括滑点在内的真实平均成交价,这正是回测与算术练习的区别。
- 我可以自己记录 Polymarket 数据而不付费吗?
- 可以,这是个合理的选择。Polymarket 的公开 WebSocket 数据流是免费的,市场数据无需认证,所以在一台小服务器上运行的采集程序就能建立你自己的存档。局限在于你的历史数据从零开始,而且无法回补:你只能拿到从开始采集那一刻起的数据。只有当你需要自己没有记录过的历史数据时,付费购买提供商的服务才有意义。
获取 Polymarket 不保留的历史数据
PolyTest 在 Polymarket 加密货币 Up/Down 市场运行期间实时记录:240M+ 条快照,包含 8 档订单簿深度、亚秒级时间戳,并保留已结算的市场。从 3 天免费试用开始。
继续阅读
如何构建 Polymarket 交易机器人
大多数 Polymarket 机器人教程都基于已经不存在的 SDK。这是一条最新的端到端路径:2026 年该安装什么、认证实际如何运作、数据缺口在哪里,以及在第一周就让机器人挂掉的失效模式。
Polymarket Up/Down 市场:slug、结算与订单簿断崖
Polymarket 的加密货币 Up/Down 市场是平台上频率最高的交易品种,也是最容易被误解的。下面介绍如何解读 slug、什么决定了结算,以及市场关闭后 Polymarket 到底保留了什么。
Polymarket 有测试网吗?
简短回答:没有。Polymarket 从未推出过公共测试网,也没有沙盒环境或演示 API。你的第一笔真实订单就是真实订单,用的是真钱,对手方也是真实的。下面介绍有经验的开发者如何绕过这个问题。