想获取币安的实时行情数据?WebSocket是最好的方式——低延迟、不消耗REST API权重、数据实时推送。
WebSocket基础
WebSocket是一种双向通信协议。和HTTP请求不同,WebSocket建立连接后可以持续接收服务器推送的数据,不需要你反复发请求。
在加密货币交易中,WebSocket主要用于获取:
- 实时价格
- 实时成交记录
- 深度数据(订单簿)
- K线数据
- 账户信息变化
币安WebSocket端点
注册币安后,币安提供以下WebSocket端点:
公共数据流(不需要API Key)
基础端点:wss://stream.binance.com:9443/ws/<streamName>
组合端点:wss://stream.binance.com:9443/stream?streams=<stream1>/<stream2>
用户数据流(需要API Key)
需要先通过REST API创建一个listenKey,然后用这个key连接WebSocket获取你的账户实时数据。
可用的公共数据流
逐笔交易(Trade)
获取某个交易对的每一笔成交记录。
- 流名称:
btcusdt@trade - 数据:价格、数量、买卖方向、时间
K线数据(Kline)
获取实时K线更新。
- 流名称:
btcusdt@kline_1m(1分钟K线) - 支持多种周期:1m、5m、15m、1h、4h、1d等
深度数据(Depth)
获取订单簿变化。
- 流名称:
btcusdt@depth或btcusdt@depth@100ms - 数据:买卖挂单的变化
24小时行情统计
获取某个或所有交易对的24小时统计数据。
- 流名称:
btcusdt@ticker或!ticker@arr(所有交易对)
最新价格
获取某个或所有交易对的最新成交价。
- 流名称:
btcusdt@miniTicker
用户数据流
获取你账户的实时信息:
- 通过REST API调用POST
/api/v3/userDataStream获取listenKey - 连接WebSocket:
wss://stream.binance.com:9443/ws/<listenKey> - 接收实时推送:
- 账户余额变化
- 订单状态更新
- 成交通知
注意:listenKey每60分钟需要续期一次(通过PUT请求),否则连接会断开。
连接管理要点
心跳机制
- 每3分钟发送一次ping,服务器会回复pong
- 如果超过一定时间没有收到pong,需要重新连接
断线重连
网络不稳定时连接可能断开。你的程序需要实现自动重连逻辑:
- 检测到连接断开
- 等待短暂时间(1-5秒)
- 重新建立连接
- 重新订阅数据流
订阅数量限制
- 单个连接最多200个数据流
- 需要更多的话,建立多个连接
常见问题
Q:WebSocket数据有延迟吗? 正常情况下延迟在几十毫秒到几百毫秒之间,取决于你的网络到币安服务器的距离。
Q:用Python怎么连接?
可以使用websocket-client或websockets库。也有现成的Python币安SDK(如python-binance)封装了WebSocket功能。
Q:能同时订阅现货和合约吗?
现货和合约用不同的端点。合约WebSocket端点是wss://fstream.binance.com/ws/<streamName>。
Q:有数据丢失怎么办? WebSocket不保证100%不丢数据。在断线重连后,可以用REST API补充缺失的数据。
如果你还没安装APP可以先下载币安APP。
总结
币安WebSocket提供丰富的实时数据流,包括行情、深度、K线和用户数据。接入简单,延迟低,不消耗REST API权重。注意做好心跳保活和断线重连。对于需要实时数据的量化交易和数据分析来说,WebSocket是必备工具。