推送规则
- 无需用户登录
- 订阅后会直接返回当前的数据,之后有变化才推送
请求
请求
{"action":"subscribe","args":["<channel:symbol><@speed>"]}
- channel: 频道名, 如
futures/depth20 - symbol: 交易对, 如
BTCUSDT - speed: 更新速度, 支持
100ms或200ms
| 频道名 | 频道描述 |
|---|---|
| futures/depth5 | 5档深度频道 (返回前五档的深度数据) |
| futures/depth20 | 20档深度频道 (返回前二十档的深度数据) |
| futures/depth50 | 50档深度频道 (返回前五十档的深度数据) |
返回
返回
| 字段 | 类型 | 描述 |
|---|---|---|
| symbol | String | 合约交易对(如BTCUSDT) |
| way | Long | 深度方向 - 1=买方- 2=卖方 |
| depths | List | 深度数组 |
| ms_t | Long | 数据推送时间戳 (精确到毫秒) |
depths字段描述
| 字段 | 类型 | 描述 |
|---|---|---|
| price | String | 价格 |
| vol | String | 数量 |
【公共】深度全量频道
获取交易对的深度数据。推送规则
- 无需用户登录
- 订阅后会直接返回当前的数据,之后有变化才推送
请求
请求
{"action":"subscribe","args":["<channel:symbol><@speed>"]}
- channel: 频道名, 如
futures/depth20 - symbol: 交易对, 如
BTCUSDT - speed: 更新速度, 支持
100ms或200ms
| 频道名 | 频道描述 |
|---|---|
| futures/depthAll5 | 5档深度频道 (返回前五档的深度数据) |
| futures/depthAll20 | 20档深度频道 (返回前二十档的深度数据) |
| futures/depthAll50 | 50档深度频道 (返回前五十档的深度数据) |
返回
返回
| 字段 | 类型 | 描述 |
|---|---|---|
| symbol | String | 合约交易对(如BTCUSDT) |
| asks | List | 卖方深度数组 |
| bids | List | 买方深度数组 |
| ms_t | Long | 数据推送时间戳 (精确到毫秒) |
asks bids字段描述
| 字段 | 类型 | 描述 |
|---|---|---|
| price | String | 价格 |
| vol | String | 数量 |
【公共】深度增量频道
返回深度数据, 支持维护一个本地的全量深度数据推送规则
- 无需用户登录
- 订阅后会直接返回当前的数据,之后有变化才推送
请求
订阅请求
全量请求
{"action":"subscribe","args":["<channel:symbol><@speed>"]}
- op:
subscribe=订阅,会收到一个订阅成功的消息及全量深度快照,而后会收到实时推送的增量深度数据,request=单次请求最新深度快照,会马上收到一个全量深度的数据 - channel:频道名, 如
futures/depthIncrease20 - symbol: 交易对, 如
BTCUSDT - speed: 更新速度, 支持
100ms或200ms
| 频道名 | 频道描述 |
|---|---|
| futures/depthIncrease5 | 5档深度频道 (返回前五档的深度数据) |
| futures/depthIncrease20 | 20档深度频道 (返回前二十档的深度数据) |
| futures/depthIncrease50 | 50档深度频道 (返回前五十档的深度数据) |
返回
全量深度快照
增量深度数据
| 字段 | 类型 | 描述 |
|---|---|---|
| symbol | String | 合约交易对(如BTCUSDT) |
| asks | List | 卖方深度数组 |
| bids | List | 买方深度数组 |
| ms_t | Long | 数据推送时间戳 (精确到毫秒) |
| version | Long | 数据版本号 |
| type | String | 数据类型 - snapshot=全量深度快照 - update=增量深度数据 |
asks bids字段描述
| 字段 | 类型 | 描述 |
|---|---|---|
| price | String | 价格 |
| vol | String | 数量 |
如何正确在本地维护一个OrderBook副本:
- 首先Client端通过订阅请求
{"action": "subscribe", "args": ["futures/depthIncrease20:<symbol>"] } - 订阅成功后会收到两种类型的消息,type=snapshot(全量)和type=update(更新)
- 如果收到type=snapshot类型消息,将深度快照内容全覆盖更新至
本地缓存,如果没有本地缓存则创建一个。 - 如果收到type=update类型消息,将深度快照中的数据更新至
本地缓存,更新规则如下:- 4.1 如果收到的消息里字段version小于等于本地缓存中的version(new version<=local version), 则可以丢弃此数据。
- 4.2 如果收到的消息里字段version等于本地缓存中的version加1(new version==local version+1),则将对应价格的数量
更新到本地缓存中。 - 4.3 如果收到的消息里字段version大于本地缓存中的version加1(new version>local version+1), 请从步骤7获取最新的深度快照,覆盖本地缓存。
- 每一个返回的消息中的挂单量代表这个价格目前的挂单量
绝对值,而不是相对变化。 - 如何更新本地缓存?在4.2的前提下:
- 6.1 新增操作:如果本地没有对应的价格,说明是新挂单,需要新增到缓存中。
- 6.2 修改或者移除操作:如果本地有对应的价格,说明是挂单量变化,如果挂单量是0,则直接从缓存中移除,否则只修改挂单量即可。
- 通过request请求
{"action": "request", "args": ["futures/depthIncrease20:<symbol>"] }获得一个最新深度快照(消息里type=snapshot),并将深度快照中的内容覆盖至本地缓存,然后继续从步骤2执行逻辑。
- 异常情况:
- 因为深度快照对价格档位数量有限制,初始快照之外的价格档位并且没有数量变化的价格档位不会出现在增量深度的更新信息内。因此,即使应用来自增量深度的所有更新,这些价格档位也不会在本地 order book 中可见,所以本地的 order book 与真实的 order book 可能会有一些差异。
【公共】按Symbol的最优挂单频道
实时推送指定交易对最优挂单信息推送规则
- 无需用户登录
- 订阅后会直接返回当前的数据,之后有变化才推送
- 实时推送
请求
请求
{"action":"subscribe","args":["<channel:symbol>"]}
- channel: 频道名, 如
futures/bookticker - symbol: 交易对, 如
BTCUSDT
返回
返回
| 字段 | 类型 | 描述 |
|---|---|---|
| symbol | String | 合约交易对(如BTCUSDT) |
| best_bid_price | String | 买一价格 |
| best_bid_vol | String | 买一量 |
| best_ask_price | String | 卖一价格 |
| best_ask_vol | String | 卖一量 |
| ms_t | Long | 数据推送时间戳 (精确到毫秒) |