“欧一交易所市场单filled却没有最近成交量”可能是终态更新与成交更新分开发送。客户端若按fillSz为0把已完成订单重新标记为失败,可能触发重复下单、重复记账或错误释放风控额度。

官方建议,tradeId存在就表示一笔成交;同一instId下每个tradeId只做一次业务处理。后续即使收到uTime不同但tradeId相同的消息,也要丢弃重复成交副作用。
成交数量、价格和费用应与该tradeId绑定。
若SPOT或MARGIN市场单消息没有tradeId而state为filled,表示订单已经完全成交。对相同ordId只处理第一条filled终态,之后重复终态不再次释放资金、关闭任务或触发通知。
filled是订单终态,不能回退成live。
使用accFillSz读取订单累计成交数量,并结合订单详情和成交明细接口重建逐笔记录。fillSz只表示当前或最近成交更新,不能替代累计量。
若逐笔汇总与accFillSz不一致,应先补查询,而不是把终态消息中的0加入差额。
以ordId维护订单状态机,以instId与tradeId维护成交幂等键;终态、成交和费用分别记录。断线重连后通过REST建立基线,再合并WebSocket增量。
出现矛盾时暂停重下,保存脱敏标识并向OKX官方支持复核。
OKX现货或杠杆市场单可能出现filled但fillSz为0的终态消息。tradeId存在时按成交去重;无tradeId的filled按ordId只处理一次,并用accFillSz和成交明细核对总量。