# 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 下单功能