Gate现货深度频道升级公告
为了给交易者提供更精细、更流畅的市场数据体验,Gate即将在现货市场推出一个全新的深度频道:spot.obu。这次升级不仅优化了数据推送的逻辑,还扩展了深度档位的选择,旨在满足从高频交易到深度分析的不同需求。
免费的交易所推荐:
1. 频道详情
这个新频道怎么用?我们先来了解一下它的基本信息:
- 频道名称:spot.obu
- 参数格式:ob.{symbol}.{level} (非常直观,{symbol}是交易对,{level}是档位)
- 使用示例:
订阅比特币兑USDT的400档深度:ob.BTC_USDT.400
订阅比特币兑USDT的50档深度:ob.BTC_USDT.50 - 档位与更新频率:
400档深度:每100毫秒更新一次,适合需要广阔市场视野的分析。
50档深度:每20毫秒更新一次,为追求极致速度的高频策略提供近实时数据。
2. 订阅与推送规则
理解数据推送的两种模式,是正确对接的关键。新频道采用了“全量初始化+增量更新”的经典设计。
1. 全量深度推送(full=true)
当收到标记为 full=true 的深度消息时,这代表这是一份完整的订单簿快照。此时,你需要用这份全新的数据完全替换本地的深度数据,并将本地记录的深度ID更新为消息中的 u 字段。请注意,服务端有时可能会重复推送全量深度,以保障数据的最终一致性。
- 一个小提示:在首次订阅该频道时,你收到的第一条消息必定是全量深度,这是建立本地数据基础的起点。
2. 增量深度推送(full=false)
增量消息中不会出现“full”字段。取而代之,消息会包含两个关键ID:U(深度起始ID)和 u(深度结束ID)。处理逻辑的核心在于判断数据的连续性:
- 如果
U恰好等于你本地记录的深度ID加1,那么恭喜,数据是连续的。这时,你需要:- 将本地深度ID更新为消息中的
u。 - 检查消息中的
a(卖盘)和b(买盘)数组。它们不为空时,每个条目都代表一个价格档位的更新,其中 level[0] 是价格,level[1] 是数量。特别要注意:当某个档位的数量 level[1] 变为 “0” 时,意味着该档位的订单已被全部成交或撤销,需要从本地深度中移除。
- 将本地深度ID更新为消息中的
- 如果
U不等于本地深度ID加1,则说明中间可能发生了数据丢失,深度已经不连续。此时最稳妥的做法是:取消对该交易对的当前订阅,然后重新订阅,以获取一份全新的、正确的全量深度数据作为起点。
3. 订阅限制
这里有一个需要特别注意的技术限制:针对同一个币对的同一个深度流,在一个WebSocket连接里只能订阅一次。尝试重复订阅同一个频道(例如,在同一个连接里再次发送订阅 ob.BTC_USDT.50 的请求),服务器会返回错误。错误信息示例如下:
{
"error": {
"code": 2,
"message": "Alert sub ob.BTC_USDT.50"
}
}
3. 操作与数据推送示例
理论说再多,不如看代码。下面我们通过具体的请求和响应示例,来直观感受一下整个流程。
1. 订阅
1.1 订阅请求示例
from websocket import create_connection
import json
ws = create_connection("wss://ws-testnet.gatenode.ch/v4/ws/spot")
subscribe_msg = {"time": 1748572393, "channel": "spot.obu", "event": "subscribe", "payload": ["ob.BTC_USDT.50"]}
ws.send(json.dumps(subscribe_msg))
print(ws.recv())
1.2 订阅成功响应示例
{"time":1748572394,"time_ms":1748572394271,"conn_id":"b61f70b2e6bcca91","trace_id":"d2e2d92c3a7eabc3d5be52514ef508d2","channel":"spot.obu","event":"subscribe","payload":["ob.BTC_USDT.50"],"result":{"status":"success"},"requestId":"d2e2d92c3a7eabc3d5be52514ef508d2"}
1.3 全量推送示例
{"channel":"spot.obu","result":{"t":1748572394325,"full":true,"s":"ob.BTC_USDT.50","u":28606981,"b":[["105958.9","0.00908"],["105953.2","0.02426"],["105942.6","0.02074"],["105937.7","0.0099"],["105932","0.01731"],["105927.1","0.01796"],["105921.4","0.02041"],["105893.2","0.01265"],["105872","0.01895"],["70000","0.00005"],["49000.1","0.0002"],["66","0.05"]],"a":[["106009.9","0.01555"],["106038.1","0.00648"],["106048.7","0.01751"],["106059.3","0.00198"],["106080.5","0.01861"],["106091.1","0.02018"],["106101.7","0.01548"],["106112.3","0.01776"],["106122.9","0.01546"],["106133.5","0.02117"]]},"time_ms":1748572394325,"event":"update"}
1.4 增量推送示例
{"channel":"spot.obu","result":{"t":1748572395237,"s":"ob.BTC_USDT.50","u":28606989,"U":28606988,"b":[["66","0"]],"a":[["106009.9","0"]]},"time_ms":1748572395237,"event":"update"}
2. 取消订阅
2.1 取消订阅请求示例
from websocket import create_connection
import json
ws = create_connection("wss://ws-testnet.gatenode.ch/v4/ws/spot")
unsubscribe_msg = {"time": 1747054611, "channel": "spot.obu", "event": "unsubscribe", "payload": ["ob.BTC_USDT.50"]}
ws.send(json.dumps(unsubscribe_msg))
print(ws.recv())
2.2 取消订阅响应示例
{"time": 1743673617,"time_ms": 1743673617242,"id": 1,"conn_id": "7b06ff199a98ab0e","trace_id": "8f86e4021a84440e502f73fde5b94918","channel": "spot.obu","event": "unsubscribe","payload": ["ob.BTC_USDT.50"],"result": {"status": "success"}}
4. 模拟盘测试通知
在正式接入生产环境前,强烈建议开发者先在模拟环境中进行充分测试。全新的 spot.obu 频道功能已经在Gate的现货模拟交易环境中上线。
你可以通过以下WebSocket地址进行连接和测试:
WebSocket 现货模拟交易地址:
wss://ws-testnet.gatenode.ch/v4/ws/spot
请各位开发者根据上述新规则,及时调整和优化你们的系统对接逻辑。如果在对接过程中遇到任何问题,Gate的客户支持团队随时准备为你提供帮助。
Gate团队
2025年5月30日
加密货币之门
安全、快捷、轻松交易超过 %Amount_of_Currency% 种加密货币
立即行动
注册账户,最高可领 $10,000 迎新奖励
邀请他人注册,可获 40% 用金
关注官方渠道
访问Gate官网
下载Gate App | 电脑端
关注X (Twitter),获取最新福利
加入Telegram社群,讨论热点话题
进入全球社区,获取最新资讯
透明度保障
查看 100% 储备金证明
