PENDING_ROUTING
│
▼ 路由决策(< 5ms)
ROUTED(INTERNAL / HYPERLIQUID)
│
├─ 市价单 ──► FILLING ──► FILLED
│
└─ 限价单 ──► OPEN(等待触价)
│
├─ 价格触达 ──► FILLING ──► FILLED
└─ 用户取消 ──► CANCELLED
用户提交订单
├─ 合约品种校验(是否上架)
├─ 杠杆范围校验(≤ maxLeverage,来自 HL meta)
├─ 下单量精度校验(szDecimals,来自 HL meta)
├─ 最小下单量校验
└─ 可用余额校验(保证金是否足够)
名义价值 = size × HL mark_price
名义价值 ≤ 路由阈值 → INTERNAL
名义价值 > 路由阈值 → HYPERLIQUID
强制 HL 条件检查(净敞口 / 延迟 / 波动率 / 手动关闭)
按 HL mark price / best bid-ask 成交
冻结保证金(逐仓:frozen_margin;全仓:cross_margin_used)
创建 position(position_source = INTERNAL)
创建平台对手方仓位(内部记账)
写入 fills 表
推送 WebSocket 成交通知
↓
L6 净敞口实时更新(检查对冲阈值)
预计算保证金,临时冻结
向 HL 发送开仓指令
等待 HL 回执(fill_price, filled_size, fee)
用 fill_price 替换 entry_price(价格校正)
重新计算保证金,差额释放或补扣
创建 position(position_source = HYPERLIQUID)
写入 fills 表(含 hl_fill_price 字段)
推送 WebSocket 成交通知
用户发起平仓指令(全平 / 部分平)
│
├─ INTERNAL 仓位 ──► L3 内部平仓
│ ├─ 按 HL mark price / best bid-ask 成交
│ ├─ 计算已实现 PnL
│ ├─ 释放保证金
│ └─ position.status = CLOSED
│
└─ HYPERLIQUID 仓位 ──► L4 向 HL 发平仓指令
├─ 等待 HL 回执 close_price
├─ 按 close_price 计算已实现 PnL
├─ 释放保证金
└─ position.status = CLOSED
L7 实时推送 mark_price
平台 扫描所有 TP/SL 订单
价格触达 TP/SL 价格 → 触发平仓
执行路径同上(INTERNAL / HYPERLIQUID 分别处理)
用户下限价单
│
▼
路由决策(INTERNAL / HYPERLIQUID)
│
├─ INTERNAL ──► 加入内部限价单队列(OPEN 状态)
│ L7 实时价格触达限价 → 立即成交 → FILLED
│ 用户取消 → 移出队列,释放保证金 → CANCELLED
│
└─ HYPERLIQUID ──► 向 HL 提交限价单
HL 成交 → 回执推送 → FILLED
用户取消 → 向 HL 发取消指令 → CANCELLED