Spot Trading
通用 WebSocket 流信息
- 本篇所列出的所有wss接口的baseurl为: wss://stream.binance.com:9443 或者 wss://stream.binance.com:443
- 所有stream均可以直接访问,或者作为组合streams的一部分。
- 直接访问时URL格式为 /ws/<streamName>
- 组合streams的URL格式为 /stream?streams=<streamName1>/<streamName2>/<streamName3>
- 订阅组合streams时,事件payload会以这样的格式封装 {"stream":"<streamName>","data":<rawPayload>}
- stream名称中所有交易对均为小写
- 每个到stream.binance.com的链接有效期不超过24小时,请妥善处理断线重连。
- 当服务器即将关闭时,系统将发送
serverShutdown事件,并导致连接断开。请尽快建立新连接,以防止中断。 - WebSocket 服务器每20秒发送 PING 消息。
- 如果 WebSocket 服务器没有在一分钟之内收到PONG 消息应答,连接会被断开。
- 当客户收到PING消息,必须尽快回复PONG消息,同时payload需要和PING消息一致。
- 服务器允许未经请求的PONG消息,但这不会保证连接不断开。对于这些PONG 消息,建议payload为空。
- wss://data-stream.binance.vision 可以用来订阅仅有市场信息的数据流。账户信息无法从此URL获得。
- 所有时间和时间戳相关字段均以毫秒为默认单位。 要以微秒为单位接收信息,请在 URL 中添加参数
timeUnit=MICROSECOND或timeUnit=microsecond。- 例如:
/stream?streams=btcusdt@trade&timeUnit=MICROSECOND
- 例如:
- 如果您的请求包含非 ASCII 字符的交易对名称,那么数据流事件中可能包含以 UTF-8 编码的非 ASCII 字符。
- 全市场所有 Symbol 的精简 Ticker 和 全市场滚动窗口统计 事件可能包含以 UTF-8 编码的非 ASCII 字符。
WebSocket 连接限制
- WebSocket服务器每秒最多接受5个消息。消息包括:
- PING帧
- PONG帧
- JSON格式的消息, 比如订阅, 断开订阅.
- 如果用户发送的消息超过限制,连接会被断开连接。反复被断开连接的IP有可能被服务器屏蔽。
- 单个连接最多可以订阅1024个Streams。
- 每IP地址、每5分钟最多可以发送300次连接请求。
服务器关闭
serverShutdown 事件在服务器即将关闭时发送。
raw数据流:
Code
combined数据流:
Code
请尽快建立新的连接以避免中断。
实时订阅/取消数据流
- 以下数据可以通过 WebSocket 发送以实现订阅或取消订阅数据流。示例如下.
- 请求中的
id被用作唯一标识来区分来回传递的消息。以下格式被接受:- 64位有符号整数
- 字母数字字符串;最大长度36
null
- 如果相应内容中的
result为null,表示请求发送成功。
订阅一个信息流
-
请求
Code -
响应
Code
取消订阅一个信息流
-
请求
Code -
响应
Code
已订阅信息流
-
请求
Code -
响应
Code
设定属性
当前,唯一可以设置的属性是设置是否启用combined("组合")信息流。当使用/ws/("原始信息流")进行连接时,combined属性设置为false,而使用
/stream/进行连接时则将属性设置为true。
-
请求
Code -
响应
Code
检索属性
-
请求
Code -
响应
Code
错误信息
| 错误信息 | 描述 |
|---|---|
| {"code": 0, "msg": "Unknown property","id": %s} | SET_PROPERTY 或 GET_PROPERTY中应用的参数无效 |
| {"code": 1, "msg": "Invalid value type: expected Boolean"} | 仅接受true或false |
| {"code": 2, "msg": "Invalid request: property name must be a string"} | 提供的属性名无效 |
| {"code": 2, "msg": "Invalid request: request ID must be an unsigned integer"} | 参数id未提供或id值是无效类型 |
{"code": 2, "msg": "Invalid request: unknown variant %s, expected one of SUBSCRIBE, UNSUBSCRIBE, LIST_SUBSCRIPTIONS, SET_PROPERTY, GET_PROPERTY at line 1 column 28"} | 错字提醒,或提供的值不是预期类型 |
| {"code": 2, "msg": "Invalid request: too many parameters"} | 数据中提供了不必要参数 |
| {"code": 2, "msg": "Invalid request: property name must be a string"} | 未提供属性名 |
{"code": 2, "msg": "Invalid request: missing field method at line 1 column 73"} | 数据未提供method |
| {"code":3,"msg":"Invalid JSON: expected value at line %s column %s"} | JSON 语法有误. |
如何正确在本地维护一个order book副本
- 打开与
wss://stream.binance.com:9443/ws/bnbbtc@depth的 WebSocket 连接。 - 开始缓存收到的event。请记录您收到的第一个event的
U值。 - 访问
https://api.binance.com/api/v3/depth?symbol=BNBBTC&limit=5000获取深度快照。 - 如果快照中的
lastUpdateId小于等于步骤 2 中的U值,请返回步骤 3。 - 在收到的event中,丢弃快照中
u<=lastUpdateId的所有event。现在第一个event的lastUpdateId应该在[U;u]范围以内。 - 将本地order book设置为快照。它的更新ID 为
lastUpdateId。 - 更新所有缓存的event,以及后续的所有event。
要将一个event应用于您的本地order book,请遵循以下更新过程:
- 判断是否需要处理event:
- 如果event的最后一次更新ID(
u)小于本地order book的更新ID,忽略该event。 - 如果event的首次更新ID(
U)大于本地order book的更新ID加1,说明你错过了一些events。请丢弃您的本地order book并从头开始重新同步。 - 通常,下一event的
U等于上一event的u + 1。
- 如果event的最后一次更新ID(
- 对买价(
b)和卖价(a)中的每个价位,设置order book中的新数量:- 如果该价位在order book中不存在,则插入该价位及其数量。
- 如果数量为零,则从order book中删除此价位。
- 将order book的更新ID设置为已处理event的最后一次更新ID(
u)。
[!NOTE] 由于从 API 检索的深度快照对价位的数量有限制(每侧最多 5000 个),因此除非它们发生变化,否则您将无法了解初始快照之外的价位数量。 因此,在使用这些级别的信息时要小心,因为它们可能无法反映订单簿的完整视图。 但是,对于大多数场景,可以每侧看到 5000 个价位就足以了解市场并进行有效交易。
此页面是否有帮助?
Last modified on