如何用binance-connector-python批量获取币安交易对实时数据?
用binance-connector-python批量获取多交易对实时数据
你之前遇到的问题根源在于:单个调用klines会产生多次HTTP请求,耗时高;而ticker_price接口本身的更新频率就是1分钟,无法满足实时需求。以下两种方案可以解决你的问题:
方案一:Websocket批量订阅(推荐,低延迟实时推送)
币安的Websocket支持同时订阅多个交易对的实时数据频道,无需主动轮询,服务器会主动推送最新数据,完全满足15秒甚至更高频率的需求。
实时成交数据订阅示例
from binance.spot import SpotWebsocketClient def message_handler(message): # 处理推送的实时成交数据,包含价格、成交量等信息 print(f"交易对: {message['s']}, 成交价格: {message['p']}, 成交量: {message['q']}") pairs = ["BTCUSDT", "ETHUSDT", "BNBUSDT"] # 构造订阅频道,格式为<小写交易对>@trade channels = [f"{pair.lower()}@trade" for pair in pairs] client = SpotWebsocketClient() client.start() client.subscribe(channels, message_handler) # 保持进程运行,按需添加停止逻辑 # client.stop()
最优买卖盘口订阅示例
如果需要最新的订单簿最优买卖价(更贴近实时行情),可以订阅@bookTicker频道:
from binance.spot import SpotWebsocketClient def message_handler(message): print(f"交易对: {message['s']}, 买一价: {message['b']}, 卖一价: {message['a']}") pairs = ["BTCUSDT", "ETHUSDT", "BNBUSDT"] channels = [f"{pair.lower()}@bookTicker" for pair in pairs] client = SpotWebsocketClient() client.start() client.subscribe(channels, message_handler)
方案二:REST API批量查询最优买卖盘口(轮询方式)
如果不想使用Websocket,币安的book_ticker REST接口支持批量查询多个交易对,数据更新频率远高于ticker_price(几乎实时),且一次请求即可获取所有目标交易对的数据,避免多次调用的耗时问题。
代码示例
from binance.spot import Spot import time spot_client = Spot() pairs = ["BTCUSDT", "ETHUSDT", "BNBUSDT"] # 每15秒轮询一次 while True: # 批量查询多个交易对的最优买卖盘口 response = spot_client.book_ticker(symbols=pairs) for item in response: print(f"交易对: {item['symbol']}, 买一价: {item['bidPrice']}, 卖一价: {item['askPrice']}") time.sleep(15)
这个接口返回的是每个交易对当前订单簿的最优买价、卖价及对应挂单量,数据更新及时,适合15秒轮询的需求,且一次请求完成批量查询,效率远高于单个调用klines。
内容的提问来源于stack exchange,提问作者José Chamorro
相关产品推荐
相关产品推荐

