深度频道
描述
获取深度数据,books是全量深度频道,books1是1档频道,books5是5档频道,books15是15档频道;
默认推送频率:200msbooks1
默认推送频率: 60ms
books
首次全量推送snapshot
,后续每当深度发生变化增量推送update
。books1
对应1档位全量每当深度发生变化事件,推送snapshot
。books5
对应5档位全量每当深度发生变化事件,推送snapshot
。books15
对应15档位全量每当深度发生变化事件,推送snapshot
。
Checksum机制
1.bid和ask超过25档
合并后全量深度数据(在此仅展示2档数据,实际应截取25档数据):
"bids": [
[ 3366.1, 7 ], //bid1
[ 3366 , 6]
]
"asks": [
[ 3366.8, 9], //ask1
[ 3368 , 8]
]
校验字符串:
"3366.1:7:3366.8:9:3366:6:3368:8"
2.bid或ask不足25档
合并后全量深度数据:
"bids": [
[ 3366.1, 7]
]
"asks": [
[ 3366.8, 9],
[ 3368 , 8 ],
[ 3372 , 8 ]
]
校验字符串:
"3366.1:7:3366.8:9:3368:8:3372:8"
此机制可以帮助用户校验深度数据的准确性。
深度合并
用户订阅增量推送(如:books
)深度频道成功后,首先获取初始全量深度数据,当获取到增量推送数据后,更新本地全量深度数据。
- 如果有相同价格,则比较数量;数量为0删除此深度,数量有变化则替换此数据。
- 如果没有相同价格,则按照价格优劣排序(bids为价格降序,asks为价格升序),将深度信息插入到全量数据中
计算校验和
先用深度合并后前25档bids和asks组成一个字符串(其中ask和bid中的价格和数量以冒号连接),再计算其crc32值(32位有符号整型)。
- 当bid和ask深度数据超过25档时,截取各自25档数据,要校验的字符串按照bid、ask深度数据交替方式连接。如:bid1[价格:数量]:ask1[价格:数量]:bid2[价格:数量]:ask2[价格:数量]...
- bid或ask深度数据不足25档时,直接忽略缺失的深度。如:bid1[价格:数量]:ask2[价格:数量]:ask3[价格:数量]:ask4[价格:数量]...
- 如果返回的价格为0.5000, 请注意使用原始值计算checksum,不要使用trim掉0后的0.5
请求示例
{
"op": "subscribe",
"args": [
{
"instType": "SPOT",
"channel": "books5",
"instId": "BTCUSDT"
}
]
}
请求参数
参数名 | 参数类型 | 是否必须 | 描述 |
---|---|---|---|
op | String | 是 | 操作,subscribe unsubscribe |
args | List<Object> | 是 | 请求订阅的频道列表 |
> instType | String | 是 | 产品线类型 |
> channel | String | 是 | 频道名: books/books1/books5/books15 |
> instId | String | 是 | 产品id 例如:ETHUSDT |
订阅返回示例
{
"event": "subscribe",
"arg": {
"instType": "SPOT",
"channel": "books5",
"instId": "BTCUSDT"
}
}
返回参数
返回字段 | 参数类型 | 字段说明 |
---|---|---|
event | String | 事件,subscribe unsubscribe error |
arg | Object | 订阅的频道 |
> instType | String | 产品类型 |
> channel | String | 频道名: books/books1/books5/books15 |
> instId | String | 是 产品id 例如:ETHUSDT |
code | String | 错误码,错误时才会返回 |
msg | String | 错误消息 |
推送返回示例
{
"action": "snapshot",
"arg": {
"instType": "SPOT",
"channel": "books5",
"instId": "BTCUSDT"
},
"data": [
{
"asks": [
[
"26274.9",
"0.0009"
],
[
"26275.0",
"0.0500"
]
],
"bids": [
[
"26274.8",
"0.0009"
],
[
"26274.7",
"0.0027"
]
],
"checksum": 0,
"ts": "1695710946294"
}
],
"ts": 1695710946294
}
推送数据参数
返回字段 | 参数类型 | 字段说明 |
---|---|---|
arg | Object | 订阅成功的频道 |
> instType | String | 产品类型 |
> channel | String | 频道名: books/books1/books5/books15 |
> instId | String | 产品id 例如:ETHUSDT |
action | String | 推送数据动作, snapshot or update |
data | List<Object> | 订阅的数据 |
> instId | String | 产品id 例如:ETHUSDT |
> asks | List<String> | 卖方深度 |
> bids | List<String> | 买方深度 |
> ts | String | 数据更新时间戳,Unix时间戳的毫秒数格式,如 1597026383085 |
> checksum | Long | 检验和 |