行情数据源:主流交易所API对比

做订单簿重建,第一步就是搞定数据源。说白了,你得知道去哪拿数据,怎么拿,拿什么格式的。

我个人习惯把交易所API分成两类:REST和WebSocket。REST就像你去图书馆借书,借一次拿一本;WebSocket就像图书馆给你开了个专属通道,有新书到了直接递给你。两者各有各的用处。

三大交易所的API风格

目前主流的交易所,Binance、OKX、Coinbase,我都对接过。嗯,这里聊聊我的感受。

特性 Binance OKX Coinbase
REST限频 1200次/分钟(权重制) 600次/分钟(IP维度) 10000次/小时(API key维度)
WebSocket深度 5/10/20档,全量快照+增量 1/5/400档,全量快照+增量 全量快照,无增量推送
数据格式 JSON,字段命名简洁 JSON,字段命名规范 JSON,字段命名冗长
文档质量 优秀,示例代码齐全 良好,中文文档友好 一般,更新较慢

你看这个表格,Binance的限频策略最复杂,但也是最灵活的。权重制意味着不同接口消耗不同权重,你得算着用。OKX相对简单粗暴,按IP限频。Coinbase嘛……我建议你少用它的REST接口拿深度数据,效率确实不高。

REST API:什么时候用?

REST API适合做两件事:

  • 获取初始快照:WebSocket连上后,第一件事就是拿一个全量快照作为基准。这时候用REST最合适。
  • 补数据:WebSocket断连了,中间漏了几条增量,怎么办?用REST拉一段历史快照回来。

我曾经踩过一个坑:直接用REST轮询深度数据来做订单簿重建。每200ms请求一次,看起来挺快。结果Binance那边直接给我限频了,订单簿重建到一半卡住了。后来我才意识到,REST不适合做实时重建,它只适合做「锚点」。

核心原则:REST拿快照,WebSocket拿增量。两者配合,才能重建出完整的订单簿。

WebSocket:实时性的关键

WebSocket才是订单簿重建的主力。你想想看,市场每秒钟可能有几百笔订单成交,如果用REST轮询,等你拿到数据,黄花菜都凉了。

三大交易所的WebSocket实现各有特点:

  • Binance:支持多数据流合并,一个连接可以订阅多个交易对。深度更新频率高,每秒可能推送几十次。我个人最喜欢它的增量格式,字段少,解析快。
  • OKX:支持增量推送,但需要自己维护本地订单簿。它的快照和增量是分开的通道,你得先订阅快照通道,再订阅增量通道。嗯,这里要注意顺序。
  • Coinbase:只推送全量快照,没有增量。这意味着每次推送都是完整的订单簿数据。数据量大,带宽消耗高。我一般不建议用它做高频重建。

小技巧:Binance的WebSocket有个「局部深度」选项,可以只订阅前5档或前10档。如果你只关心盘口附近的价格,这个功能能省不少带宽。

如何选择?

这个问题没有标准答案,但我可以给你一个参考思路:

  1. 如果你做高频交易:选Binance。它的WebSocket延迟最低,增量格式最轻量。我在做高频策略时,基本只用Binance。
  2. 如果你做中低频策略:OKX也不错。它的文档对中文开发者友好,限频策略也宽松。我曾经帮一个团队迁移到OKX,只改了两天代码就搞定了。
  3. 如果你做合规要求高的策略:Coinbase是首选。它的数据源最干净,监管合规性最好。但要做好带宽预算,全量快照真的很吃流量。

一个简单的选择流程图

下面这张图,是我自己总结的选型逻辑。你可以参考一下:

选择交易所API 高频交易? Binance 合规要求高? Coinbase OKX(中低频推荐)

我的建议:如果你刚开始做订单簿重建,先从Binance入手。它的文档最全,社区最活跃,遇到问题随便搜一下就有答案。等把流程跑通了,再考虑迁移到其他交易所。

WebSocket vs REST:一个实际案例

我记得有一次,我需要同时监控20个交易对的订单簿。如果用REST轮询,每个交易对200ms请求一次,一分钟就是6000次请求。Binance的限频是1200次/分钟,直接超了5倍。

换成WebSocket呢?一个连接就能订阅20个交易对,每个交易对只推送变化的数据。带宽消耗不到REST的十分之一。而且延迟从200ms降到了10ms以内。

你想想看,这个差距有多大。所以我的原则很简单:能走WebSocket,就别用REST

注意:WebSocket虽然好,但也不是万能的。它有个致命弱点——断连。网络波动、服务器重启、防火墙超时,都可能导致WebSocket断开。所以你的代码里一定要有重连机制,而且重连后要重新获取快照。

总结一下

选行情数据源,其实就三句话:

  • Binance:速度快,文档好,适合高频
  • OKX:中规中矩,中文友好,适合中低频
  • Coinbase:合规性强,数据干净,但带宽消耗大

至于WebSocket和REST的选择,记住一句话:REST拿快照,WebSocket拿增量。两者配合,才能重建出完整的订单簿。

嗯,下一节我们聊聊具体的代码实现。到时候我会手把手教你写一个WebSocket客户端,把Binance的深度数据拉下来。

专注资料整理