订阅机制
交易推送采用连接即订阅模型:客户端完成 WebSocket 连接和登录鉴权后,服务端会自动推送当前鉴权用户的交易事件,无需客户端发送额外的订阅请求。
与行情推送的区别
行情推送需要客户端显式声明订阅的标的和数据类型;交易推送则不同:
| 维度 | 行情推送 | 交易推送 |
|---|---|---|
| 订阅方式 | 显式订阅,需指定标的代码和数据类型 | 隐式订阅,鉴权后自动生效 |
| 推送范围 | 仅推送已订阅的标的和类型 | 推送鉴权账户下所有账户的全部事件类型 |
| 取消订阅 | 可随时反订阅 | 断开连接即停止接收 |
事件覆盖范围
鉴权成功后,客户端将自动接收以下全部事件类型,无法单独过滤某类事件:
| 事件类型 | 说明 |
|---|---|
EVENT_NEW | 下单成功 |
EVENT_REPLACED | 改单成功 |
EVENT_CANCELED | 撤单成功 |
EVENT_EXPIRED | 订单过期 |
EVENT_FILL | 成交事件(含部分成交和全部成交) |
EVENT_NEW_REJECTED | 下单失败 |
EVENT_REPLACE_REJECTED | 改单失败 |
EVENT_CANCEL_REJECTED | 撤单失败 |
EVENT_FILL_CORRECT | 成交修正 |
EVENT_FILL_CANCEL | 成交撤销 |
各事件的消息结构和字段说明详见 数据格式。
账户维度说明
服务端按鉴权用户的账户维度推送事件,即推送该用户名下所有交易账户的事件。推送消息中的 user_info.acc_id 字段标识事件所属的具体交易账户。如果同一用户持有多个交易账户,所有账户的事件都会在同一连接上推送,客户端应根据 acc_id 区分来源。
行为说明
事件推送时机
服务端在交易事件发生时实时推送,事件到达时间取决于网络状况和服务端处理延迟,不保证固定的推送间隔。
不补发历史事件
连接断开期间发生的交易事件不会在重连后补发。如需查询历史订单或成交记录,请使用以下 REST 接口:
重连后恢复
连接断开并重新鉴权后,服务端会自动重新建立推送通道,继续推送后续发生的事件。
客户端实现建议
- 不要依赖推送作为唯一的状态来源:推送适合实时通知,首次加载页面或断线后的状态补齐,建议先调用 REST 接口查询完整状态。
- 处理重复事件:在极少数网络抖动或服务端重试场景下,可能收到重复的事件推送。建议客户端按
event_id做幂等处理。 - 不要依赖事件顺序:网络抖动可能导致事件乱序到达。如需还原状态,应以事件中的
order_status和event_time_us等字段为准,而非推送顺序。