auto_trade_sys/ws行情推送.txt
薇薇安 30f4a22fb4 feat(binance_client, position_manager): 优化价格获取逻辑与异常处理
在 `binance_client` 中引入 K线和最优挂单的 WebSocket 流,优先从缓存中获取价格数据,减少对 REST API 的依赖。同时,更新了价格获取逻辑,确保在未能获取价格时提供详细的错误信息。增强了异常处理,确保在请求超时或失败时记录相关日志,提升系统的稳定性和可追溯性。
2026-02-16 17:11:25 +08:00

319 lines
7.9 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

全市场最优挂单信息
数据流描述
所有交易对交易对最优挂单信息
Stream Name
!bookTicker
注意: 响应消息不包含RPI订单其不可见。
更新速度
5s
响应示例
{
"e":"bookTicker", // 事件类型
"u":400900217, // 更新ID
"E": 1568014460893, // 事件推送时间
"T": 1568014460891, // 撮合时间
"s":"BNBUSDT", // 交易对
"b":"25.35190000", // 买单最优挂单价格
"B":"31.21000000", // 买单最优挂单数量
"a":"25.36520000", // 卖单最优挂单价格
"A":"40.66000000" // 卖单最优挂单数量
}
市场数据连接
本篇所列出的所有wss接口需用下列方式连接
Base Urlwss://fstream.binance.com
订阅单一stream格式为 /ws/<streamName>
组合streams的URL格式为 /stream?streams=/<streamName1>/<streamName2>/<streamName3>
连接样例:
wss://fstream.binance.com/ws/bnbusdt@aggTrade
wss://fstream.binance.com/stream?streams=bnbusdt@aggTrade/btcusdt@markPrice
订阅组合streams时事件payload会以这样的格式封装 {"stream":"<streamName<","data":<rawPayload>}
stream名称中所有交易对均为小写。
每个链接有效期不超过24小时请妥善处理断线重连。
服务端每3分钟会发送ping帧客户端应当在10分钟内回复pong帧否则服务端会主动断开链接。允许客户端发送不成对的pong帧(即客户端可以以高于15分钟每次的频率发送pong帧保持链接)。
Websocket服务器每秒最多接受10个订阅消息。
如果用户发送的消息超过限制连接会被断开连接。反复被断开连接的IP有可能被服务器屏蔽。
单个连接最多可以订阅 1024 个Streams。
实时订阅/取消数据流
以下数据可以通过websocket发送以实现订阅或取消订阅数据流。示例如下。
响应内容中的id是无符号整数作为往来信息的唯一标识。
订阅一个信息流
请求
{
"method": "SUBSCRIBE",
"params":
[
"btcusdt@aggTrade",
"btcusdt@depth"
],
"id": 1
}
响应
{
"result": null,
"id": 1
}
取消订阅一个信息流
请求
{
"method": "UNSUBSCRIBE",
"params":
[
"btcusdt@depth"
],
"id": 312
}
响应
{
"result": null,
"id": 312
}
已订阅信息流
请求
{
"method": "LIST_SUBSCRIPTIONS",
"id": 3
}
响应
{
"result": [
"btcusdt@aggTrade"
],
"id": 3
}
设定属性
当前唯一可以设置的属性是设置是否启用combined("组合")信息流。
当使用/ws/("原始信息流")进行连接时combined属性设置为false而使用 /stream/进行连接时则将属性设置为true。
请求
{
"method": "SET_PROPERTY",
"params":
[
"combined",
true
],
"id": 5
}
响应
{
"result": null
"id": 5
}
检索属性
请求
{
"method": "GET_PROPERTY",
"params":
[
"combined"
],
"id": 2
}
响应
{
"result": true, // Indicates that combined is set to true.
"id": 2
}
错误信息
错误信息 描述
{"code": 0, "msg": "Unknown property"} 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 语法有误.
按Symbol的完整Ticker
数据流描述
按Symbol刷新的24小时完整ticker信息
Stream Name
<symbol>@ticker
更新速度
2000ms
响应示例
{
"e": "24hrTicker", // 事件类型
"E": 123456789, // 事件时间
"s": "BNBUSDT", // 交易对
"p": "0.0015", // 24小时价格变化
"P": "250.00", // 24小时价格变化(百分比)
"w": "0.0018", // 平均价格
"c": "0.0025", // 最新成交价格
"Q": "10", // 最新成交价格上的成交量
"o": "0.0010", // 24小时内第一比成交的价格
"h": "0.0025", // 24小时内最高成交价
"l": "0.0010", // 24小时内最低成交价
"v": "10000", // 24小时内成交量
"q": "18", // 24小时内成交额
"O": 0, // 统计开始时间
"C": 86400000, // 统计关闭时间
"F": 0, // 24小时内第一笔成交交易ID
"L": 18150, // 24小时内最后一笔成交交易ID
"n": 18151 // 24小时内成交数
}
K线
Stream Description
K线stream逐秒推送所请求的K线种类(最新一根K线)的更新。推送间隔250毫秒(如有刷新)
订阅 Kline 需要提供间隔参数,最短为分钟线,最长为月线。支持以下间隔:
m -> 分钟; h -> 小时; d -> 天; w -> 周; M -> 月
1m
3m
5m
15m
30m
1h
2h
4h
6h
8h
12h
1d
3d
1w
1M
Stream Name
<symbol>@kline_<interval>
Update Speed
250ms
Response Example
{
"e": "kline", // 事件类型
"E": 123456789, // 事件时间
"s": "BNBUSDT", // 交易对
"k": {
"t": 123400000, // 这根K线的起始时间
"T": 123460000, // 这根K线的结束时间
"s": "BNBUSDT", // 交易对
"i": "1m", // K线间隔
"f": 100, // 这根K线期间第一笔成交ID
"L": 200, // 这根K线期间末一笔成交ID
"o": "0.0010", // 这根K线期间第一笔成交价
"c": "0.0020", // 这根K线期间末一笔成交价
"h": "0.0025", // 这根K线期间最高成交价
"l": "0.0015", // 这根K线期间最低成交价
"v": "1000", // 这根K线期间成交量
"n": 100, // 这根K线期间成交笔数
"x": false, // 这根K线是否完结(是否已经开始下一根K线)
"q": "1.0000", // 这根K线期间成交额
"V": "500", // 主动买入的成交量
"Q": "0.500", // 主动买入的成交额
"B": "123456" // 忽略此参数
}
}
连续合约K线
数据流描述
K线stream逐秒推送所请求的K线种类(最新一根K线)的更新。
合约类型:
perpetual 永续合约
current_quarter 当季交割合约
next_quarter 次季交割合约
tradifi_perpetual 传统金融合约
订阅Kline需要提供间隔参数,最短为分钟线,最长为月线。支持以下间隔:
s -> 秒; m -> 分钟; h -> 小时; d -> 天; w -> 周; M -> 月
1s
1m
3m
5m
15m
30m
1h
2h
4h
6h
8h
12h
1d
3d
1w
1M
Stream Name
<pair>_<contractType>@continuousKline_<interval>
更新速度
250ms
响应示例
{
"e":"continuous_kline", // 事件类型
"E":1607443058651, // 事件时间
"ps":"BTCUSDT", // 标的交易对
"ct":"PERPETUAL", // 合约类型
"k":{
"t":1607443020000, // 这根K线的起始时间
"T":1607443079999, // 这根K线的结束时间
"i":"1m", // K线间隔
"f":116467658886, // 这根K线期间第一笔更新ID
"L":116468012423, // 这根K线期间末一笔更新ID
"o":"18787.00", // 这根K线期间第一笔成交价
"c":"18804.04", // 这根K线期间末一笔成交价
"h":"18804.04", // 这根K线期间最高成交价
"l":"18786.54", // 这根K线期间最低成交价
"v":"197.664", // 这根K线期间成交量
"n":543, // 这根K线期间成交笔数
"x":false, // 这根K线是否完结(是否已经开始下一根K线)
"q":"3715253.19494", // 这根K线期间成交额
"V":"184.769", // 主动买入的成交量
"Q":"3472925.84746", // 主动买入的成交额
"B":"0" // 忽略此参数
}
}