如何通过Binance API接收订单成交通知,基于python-binance库WebSocket实现?
python-binance库完全支持你所需的订单成交事件实时推送功能,可以实现你描述的限价买单成交后自动触发后续挂单的需求。
实现原理
Binance为每个账户提供专属的用户数据流WebSocket通道,会实时推送账户下所有订单状态变动、成交记录、余额变更等事件,python-binance已经对该通道做了完整封装,不需要自行开发底层WebSocket交互逻辑。
具体实现步骤
- 首先调用
client.create_listen_key()获取个人账户的监听密钥,该密钥是接收私有数据推送的凭证,有效期为60分钟,需要定期调用刷新接口延长有效期。 - 初始化用户数据流WebSocket客户端,绑定订单事件回调函数。当你创建的限价买单完全成交时,会收到类型为
executionReport的推送消息,当消息内的订单状态字段为FILLED、订单方向为BUY、订单类型为LIMIT时,即可在回调函数内执行你后续的挂单逻辑。
核心代码参考
from binance import ThreadedWebsocketManager from binance.client import Client # 初始化API客户端 API_KEY = "你的Binance API密钥" API_SECRET = "你的Binance API密钥对应的私钥" client = Client(API_KEY, API_SECRET) # 提前存储你创建的限价买单的订单ID,避免其他订单触发逻辑 TARGET_BUY_ORDER_ID = 123456789 TARGET_SYMBOL = "BTCUSDT" # 替换为你的交易对 # 订单事件回调函数 def handle_account_event(msg): # 过滤非订单执行报告的消息 if msg.get("e") != "executionReport": return # 匹配目标订单:订单ID一致、已完全成交、是限价买单 if (msg.get("i") == TARGET_BUY_ORDER_ID and msg.get("X") == "FILLED" and msg.get("S") == "BUY" and msg.get("o") == "LIMIT" and msg.get("s") == TARGET_SYMBOL): print("目标限价买单已成交,开始创建后续订单") # 此处写入你的后续订单创建逻辑,比如创建止盈止损单等 # client.create_order( # symbol=TARGET_SYMBOL, # side=Client.SIDE_SELL, # type=Client.ORDER_TYPE_LIMIT, # quantity=0.001, # price="30000" # ) # 启动WebSocket监听 twm = ThreadedWebsocketManager(api_key=API_KEY, api_secret=API_SECRET) twm.start_user_socket(callback=handle_account_event) # 保持进程运行 twm.join()
注意事项
- 提前存储目标限价单的订单ID做匹配,可以避免其他订单的成交事件误触发你的后续逻辑。
- python-binance的
ThreadedWebsocketManager已经内置了自动重连逻辑,普通网络波动不需要手动处理重连,建议可额外添加简单的在线状态校验避免极端情况漏消息。 - 请确保你的API密钥开通了交易权限,同时妥善保管密钥避免泄露。
内容的提问来源于stack exchange,提问作者Sangwoo Kim
相关产品推荐
相关产品推荐

