订单跟踪系统BUG28
订单跟踪系统 Bug 深度分析报告 共发现 12 个 Bug,其中 2 个 Critical、4 个 High、6 个 Medium。 Bug 1 [Critical]: WS 解析路径的 TOCTOU 竞态 -- 已成交订单被报成"取消"或"超时" 位置: src/trading/websocket_order_manager.py:341-375 (_on_order_update) 和 :402-417 (_on_user_fill) 严重程度:
订单跟踪系统 Bug 深度分析报告 共发现 12 个 Bug,其中 2 个 Critical、4 个 High、6 个 Medium。 Bug 1 [Critical]: WS 解析路径的 TOCTOU 竞态 -- 已成交订单被报成"取消"或"超时" 位置: src/trading/websocket_order_manager.py:341-375 (_on_order_update) 和 :402-417 (_on_user_fill) 严重程度:
订单跟踪严重 Bug 分析 1. 架构与数据流简述 订单跟踪核心在 src/trading/websocket_order_manager.py: * 唯一解析路径:_resolve() 在持锁内将订单从 PENDING 转为终态(FILLED/CANCELED/REJECTED/TIMEOUT),并 result_event.set()。 * WS 驱动:_on_order_update(orderUpdates)、_on_user_fill(userFills)在锁内设置 tracking._ws_status 等,释放锁后再调用 _resolve(oid)(仅传 oid,在 _resolve 内再次按 oid 查表)
订单跟踪严重 Bug 分析 对当前系统订单跟踪(WebSocketOrderManager + 消息路由 + 超时/重连)进行代码分析,识别可能导致错误成交判定、永久阻塞或数据错误的严重 bug。 1. 架构与数据流概览 订单跟踪核心在 src/trading/websocket_order_manager.py(WebSocketOrderManager),与 src/trading/executor.py 的 _track_limit_order、src/services/realtime_kline_service_base.py 的 WS 回调配合工作。 sequenceDiagram participant Exec as Executor participant Mgr as WebSocketOrderManager
订单跟踪系统严重 Bug 分析报告 分析日期:2026-02-21 主要问题文件:websocket_order_manager.py BUG 1 — 竞态条件导致定时器内存泄漏 🔴 Critical 位置: websocket_order_manager.py:360-365 代码: timer = threading.Timer( self._FILL_GRACE_SEC, self._resolve, [oid] ) timer.daemon = True tracking._grace_timer = timer timer.start() 问题描述: 同一 oid 被重复调用 track_order() 时,旧 tracking 被替换,
订单跟踪系统严重 Bug 分析报告 分析日期: 2026-02-21 分析范围: websocket_order_manager.py, executor.py, position_manager.py, realtime_kline_service_base.py Bug 1 [严重] userFills 重复累计 → 成交价/数量错误 位置: websocket_order_manager.py:559-569 _accumulate_fill 问题: _accumulate_fill 没有任何 fill 级别的去重机制。它简单地将每笔 fill 的 px * sz 累加计算加权平均价。在以下场景会出错: * WS 重连后交易所重播消息:
订单跟踪严重 Bug 分析 一、订单跟踪架构简述 sequenceDiagram participant WS as WebSocket participant Kline as RealtimeKlineServiceBase participant Mgr as WebSocketOrderManager participant Mon as _monitor_order participant Exec as Executor Exec->>Mgr: track_order(oid, coin, timeout) Mgr->>Mgr: _tracking[oid]=tracking Mgr->>Mon: start daemon thread
订单跟踪系统 Bug 分析报告 分析时间: 2026-02-21 涉及文件: executor.py, position_manager.py, websocket_order_manager.py, realtime_kline_service_base.py Bug 1: limit_open 中 result.leg_b 已被置为 None 后丢失错误信息 严重度: 中高 文件: executor.py:946-951 result.leg_b = None # ← 先置为 None result.leg_a.error_message = ( f"
订单跟踪系统严重 Bug 分析 分析时间: 2026-02-21 涉及文件: realtime_kline_service_base.py, websocket_order_manager.py, executor.py 一、订单跟踪链路概览 flowchart LR subgraph place [下单] Place[place_order] Track[track_order] Wait[wait_for_order] end subgraph ws [WebSocket] WS[on_message] Buf[_order_msg_buffer] Mgr[handle_message] end subgraph
订单跟踪系统严重Bug分析报告 Context 基于对 Hyperliquid 永续合约交易系统的全面代码审计,识别出订单跟踪、仓位管理、风控交互等环节中的严重bug。系统采用 WebSocket 实时追踪 + HTTP 回退验证的双路架构,涉及多线程并发操作。 P0 严重Bug(必须立即修复) Bug 1: wait_for_order() 无超时 + _timeout_loop 提前返回 → 可能永久阻塞 文件: src/trading/websocket_order_manager.py 问题: * wait_for_order() (line 133) 使用 tracking.result_event.wait() 无任何超时参数 * 注释声称 _timeout_loop 保证所有路径都调用
订单跟踪系统严重 Bug 分析 一、订单跟踪流程概览 sequenceDiagram participant Exec as Executor participant Mgr as WebSocketOrderManager participant WS as WebSocket/K线服务 participant API as HTTP API Exec->>API: 下限价单 API-->>Exec: 返回 oid Exec->>Mgr: track_order(oid) + wait_for_order(tracking) Mgr->>Mgr:
订单跟踪系统严重 Bug 分析报告 分析日期: 2026-02-21 分析范围: websocket_order_manager.py, executor.py, position_manager.py, risk_manager.py, orchestrator.py Bug 1: 止损/同步触发平仓时,每日统计双重计数 (严重) 位置: orchestrator.py:814-818 + position_manager.py:572-578 问题: 当止损监控线程或仓位同步线程触发平仓时,update_daily_stats(trades_closed=1, realized_pnl=...) 被调用两次: 1. position_manager._execute_close(
订单跟踪系统严重 Bug 分析 1. 订单跟踪流程概览 sequenceDiagram participant Exec as Executor participant Mgr as WebSocketOrderManager participant WS as K线服务/WS消息 participant HTTP as 交易所HTTP Exec->>Mgr: track_order(oid, coin, timeout) Mgr->>Mgr: _timeout_loop(oid, tracking) 后台线程 Exec->>Mgr: wait_for_order(tracking) 阻塞