auto_trade_sys/docs/WS交易接口实现说明.md
薇薇安 e5bc2547aa feat(binance_client): 引入WebSocket交易客户端以优化下单逻辑
在 `binance_client.py` 中新增 WebSocket 交易客户端的延迟初始化,优先使用 WebSocket 下单以减少 REST 超时。更新 `futures_create_algo_order` 方法,尝试通过 WebSocket 创建条件单,并在失败时回退到 REST 调用。同时,调整 `ALGO_ORDER_TIMEOUT_SEC` 的默认值为 45秒,以应对高负载情况。增强了异常处理和日志记录,确保系统的稳定性和可追溯性。
2026-02-16 19:19:56 +08:00

2.3 KiB
Raw Blame History

WebSocket 交易接口实现说明

概述

已实现通过 WebSocket API 创建 Algo 条件单(止损/止盈),优先于 REST减少「请求超时」问题。


实现内容

1. 新增文件

  • trading_system/ws_trade_client.pyWebSocket 交易客户端
    • 连接到 wss://ws-fapi.binance.com/ws-fapi/v1(正式)或 wss://testnet.binancefuture.com/ws-fapi/v1(测试)
    • 实现 algoOrder.place 方法,发送条件单请求
    • 处理请求-响应匹配(用 id 字段)
    • 自动重连、24h 主动重连、ping/pong 保活

2. 修改文件

  • trading_system/binance_client.py
    • __init__:添加 _ws_trade_client 属性
    • connect():连接成功后启动 WS 交易客户端
    • futures_create_algo_order()优先用 WS 发送条件单,失败回退 REST
    • disconnect():停止 WS 交易客户端

工作流程

  1. 启动时BinanceClient.connect() 成功后,若 API 密钥有效,自动启动 WSTradeClient 并连接到 ws-fapi
  2. 下单时
    • 若 WS 已连接 → 用 algoOrder.place 发送(带签名),等待响应(超时 20-25 秒)
    • WS 失败或未连接 → 回退到 REST POST /fapi/v1/algoOrder原有逻辑45 秒超时 + 重试)
  3. 响应格式WS 返回的 result 字段(含 algoId 等)直接返回,与 REST 格式兼容。

优势

  • 减少超时WS 长连接,无每次 HTTP 建连开销,响应通常更快
  • 自动回退WS 失败时自动用 REST不影响现有逻辑
  • 透明切换:调用方无需改动,futures_create_algo_order() 自动选择最优方式

配置

  • 超时时间WS 超时 = ALGO_ORDER_TIMEOUT_SEC - 5(最小 20 秒REST 超时 = ALGO_ORDER_TIMEOUT_SEC(默认 45 秒)
  • 连接管理WS 连接自动重连、24h 主动重连、ping/pong 保活

日志

  • WS 连接成功:✓ WebSocket 交易客户端已启动(条件单优先走 WS失败回退 REST
  • WS 下单成功:{symbol} ✓ WS 条件单创建成功: algoId=...
  • WS 失败回退:{symbol} WS 条件单失败(...),回退到 REST

注意事项

  • WS 交易接口需要有效的 API 密钥(与 REST 相同)
  • 签名计算方式与 REST 一致HMAC-SHA256
  • 若 WS 连接失败,不影响 REST 下单功能