字段规格

两种容器格式,两个并不共用字段表的平台。下面列的每一项都是你在文件里真的会遇到的列或键,按数据集分开。

两种格式

结算流与 K 线是 gzip 压缩的 CSV,带表头。市场事件流是 gzip 压缩的 JSONL——一行一个 JSON 对象,顺序就是帧到达的顺序。归档期不做任何重排。

结算流 —— CSV(Polymarket 侧)

prices、twap30s、twap60s 共用同样这五列。整个归档里只有这里同时带三个各自独立的时间戳。

feed_ts_ms事件时间:上游给这条报价打的时间戳(UTC 毫秒)
value浮点价格,查询方便用
full_accuracy_value只要 relay 发布,这里就是同一个价格的定点整数串(1e18)。要重算输赢就用这个,别用 value
server_ts_ms上游服务端发出的时间(UTC 毫秒)
recv_ms我们收到的时间(UTC 毫秒)。三个分开存,从不合并——延迟链路你可以自己量

市场事件 —— JSONL 的信封(Polymarket 侧)

book、price_change、best_bid_ask、last_trade_price 的每一行都带同样六个顶层键。注意这里是两个时间戳而不是三个,而且事件那个不叫 feed_ts_ms。

slug这一帧属于哪个市场
asset_id这一帧说的是哪个 outcome token。price_change 上为 null,因为那种行一次携带两侧的变化
event_type与 dataset 同名
event_ts_ms上游事件时间(UTC 毫秒)
recv_ms我们收到的时间(UTC 毫秒)
payload上游的消息体,按收到的样子保留

payload 里有什么,按数据集分

bookbids 与 asks,各是一个 {price, size} 对象数组,另有 hash、market、asset_id、timestamp。一行只是一个 outcome token 的盘口快照(是哪个看信封的 asset_id),它的两侧档位都在这一行里。某一侧是空数组表示那一侧没有挂单,不是「这次没报」
price_changeprice_changes 是一个数组,每项带 hash、side、size、price、asset_id、best_ask、best_bid。两个 outcome token 出现在同一行里,这也是信封上 asset_id 为 null 的原因
best_bid_ask针对某个 asset_id 的 best_bid、best_ask 与 spread。只有价格——这条流没有挂单量,深度仍要看 book 或 price_change
last_trade_price针对某个 asset_id 的 side、size、price、fee_rate_bps、transaction_hash

markets —— 一个市场一行

元数据、strike,以及结算结果出现之后的结算。raw 键里是上游市场对象的原样副本,结算配置就在那里面。

slug / asset / interval_sec身份与时长。interval_sec 的单位是秒
condition_id / token_ids链上标识。token_ids 有两项,第一项是「涨」——这是实测定下来的,不是假设
start_sec / end_sec市场窗口,单位是秒——不像事件流那样是毫秒
resolved / outcome_prices结算结果。["1","0"] 表示 Up 赢,["0","1"] 表示 Down 赢。只有完整的二元对才有意义
strike_value这一局的「要超越的价格」,是定点整数串(1e18)。无法诚实确定时为空,不会拿邻近 tick 猜
raw上游市场对象按收到的样子保留,含 raw.cryptoMarketConfig——见市场怎么判定输赢

klines —— CSV

由结算流推导,所以是 OHLC,没有成交量列。ticks 数的是这个桶里有多少次结算更新,不是成交量。

ts_ms桶的起点(UTC 毫秒)
open / high / low / close桶内价格
ticks落在这个桶里的结算更新次数——是更新计数,不是成交量

Predict.fun 不共用上面这套字段

列名不同、档位形状不同、时间单位也不同。两个平台都订阅的话,把它们当成两种格式来处理,而不是一种格式多几个字段。

prices(CSV)price_feed_id、symbol、provider、publish_time、server_ts、price、recv_ms。publish_time 与 server_ts 的单位是秒,而 recv_ms 是毫秒;价格列叫 price,不叫 value
orderbook(JSONL)market_id、category_slug、update_ts_ms、recv_ms、payload。payload 里 bids 与 asks 是 [price, size] 数组对——不是 Polymarket 那侧的 {price, size} 对象——另有 version、orderCount、lastOrderSettled、settlementsPending
markets(JSONL)category_slug、asset、interval_label、market_id、price_feed_id、price_feed_symbol、price_feed_provider、condition_id、start_sec、end_sec、start_price、end_price、status。这里的价格是普通十进制字符串,不是 1e18 定点

拿它写结算校验之前有一件事要知道:status 记的是上游最后一次告诉我们的状态,而一个市场拿到 end_price 之后就不再被重读了。所以能说明 Predict.fun 市场已结算的字段是 end_price。

想专门看其中一类: Polymarket 盘口数据 · Chainlink 结算价数据 · Predict.fun 历史数据 · 与其他服务商的对比