
做加密货币行情分析或策略开发时,我经常被问到一个问题:订单簿快照到底多久更新一次?API 上写的 “实时”,真的够快吗?
刚开始接触行情数据时,我直接调用 REST 接口拉快照,结果几秒才刷新一次,经常错过关键价格变化。后来慢慢才明白:理解订单簿的更新机制,远比单纯看 K 线重要得多。
一、订单簿快照是什么?
简单来说,订单簿快照就是某一瞬间市场所有买卖挂单的完整记录,包括每个价格档位对应的委托量。
很多人以为实时 API 会一直推送完整快照,其实并不是。行业主流做法是快照 + 增量更新:
快照:一次性拿到全量数据,用来初始化本地订单簿;
增量更新:后续只推送订单变化,轻量、高频、不占带宽。
可以把快照理解为一张聊天截图,增量就是不断发来的新消息。两者配合,就能持续还原最新市场状态。
二、接口类型决定更新速度
不同接口,更新频率差别很大,直接影响数据体验。
REST 接口
更新:几秒到几十秒一次
适合:查历史、做统计、低频分析
缺点:延迟高,跟不上实时行情
WebSocket 接口
更新:毫秒级到几百毫秒
适合:实时盯盘、策略执行、自动交易
优点:低延迟、事件驱动,能看到盘口在动
我早期踩过不少坑:用 REST 做短线分析,行情都走完了数据才到。换成 WebSocket 后,体验明显不一样。
三、为什么快照不能固定时间更新?
大家常疑惑:为什么不能固定 1 秒或 0.5 秒更新一次?原因很现实:
热门币种变化快,频繁推送全量快照会占用大量带宽;
冷门币种成交少、变动慢,没必要频繁更新;
快照 + 增量是行业通用方案,兼顾实时性与效率。
所以,API 写着 “实时”,实际更新频率会随市场活跃度动态调整。
四、实用方案:快照初始化 + 增量更新
想拿到稳定、接近实时的订单簿,标准做法就三步:
先拉一次全量快照,初始化本地订单簿;
建立 WebSocket 长连接,持续接收增量更新;
用增量数据不断更新本地盘口,保持同步。
实际开发中,AllTick API就是采用这套成熟方案。下面是可直接运行的 Python 示例:
import websocket
import json
def on_message(ws, message):
data = json.loads(message)
# 根据增量数据更新本地订单簿
process_orderbook_update(data)
if __name__ == "__main__":
ws = websocket.WebSocketApp(
"wss://apis.alltick.co/ws/stock",
on_message=on_message
)
ws.run_forever()
这样可以有效避免 REST 轮询的延迟,让本地订单簿和市场真实状态保持高度同步。
五、几点心得
快照不等于实时,增量才是核心;
REST 适合低频场景,WebSocket 才是实时首选;
网络延迟会影响体感实时性,跨服务器时更明显;
稳定的数据处理逻辑,比单纯追求更新频率更重要。
对普通开发者和交易者来说,不用过度纠结数字,关键是理解数据底层逻辑、选对接口、做好本地同步。这样无论是分析、回测还是实盘,数据质量都会更可靠。