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

67 lines
2.3 KiB
Markdown
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.

# WebSocket 交易接口实现说明
## 概述
已实现通过 **WebSocket API** 创建 Algo 条件单(止损/止盈),优先于 REST减少「请求超时」问题。
---
## 实现内容
### 1. 新增文件
- **`trading_system/ws_trade_client.py`**WebSocket 交易客户端
- 连接到 `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 下单功能