币安行情里聚合成交与原始成交有何区别,该看哪个

先给结论:币安现货 WebSocket 行情中的 aggTrade(聚合成交)与 trade(原始成交)推送的是同一批市场成交,区别在于粒度。aggTrade 把同一笔吃单(taker order)撮合出的多笔成交合并成一条,trade 则逐笔推送,每一笔都有独立的买方和卖方。看成交方向与活跃度,用 aggTrade 更省事;要精确到每一笔成交编号、逐笔还原撮合消耗过程,才需要 trade。两者都是行情数据接口,不涉及下单,也不构成任何交易建议。

聚合成交、taker订单、原始成交
本文涉及的概念与核对环节。

两种推送各自的定义

按币安现货 API 官方文档的口径,<symbol>@aggTrade 推送的是“为单笔 taker order 聚合后的成交信息”,更新速度为实时。其载荷里除了事件时间 E、交易对 s、价格 p、数量 q、成交时间 T,还有聚合成交 ID a,以及首笔成交 ID f 和末笔成交 ID l。也就是说,一条 aggTrade 记录覆盖一个区间,f 到 l 之间的原始成交被折叠进这一条。

<symbol>@trade 推送的是“原始成交信息,每笔成交有唯一的买方和卖方”,同样为实时。载荷里用 t 表示成交 ID,没有 f、l 字段,因为一条就是一笔。两个接口都带 m 字段,用于标识买方是否为挂单方(maker),M 字段文档标注为忽略。

同一笔成交为何有两种推送

原因在于撮合机制:一张主动成交单可能同时吃掉多个价位的挂单,形成多笔逐笔成交;聚合接口则以“这一张 taker 单”为单位把它们打包。假设某交易对上一笔 taker 买单依次吃掉三个价位的挂单,trade 流会推三条记录,成交 ID 各不相同;aggTrade 流只推一条,f 与 l 分别指向这三笔的首尾 ID,q 为这三笔数量之和,p 为该聚合记录的成交价(具体聚合口径文档未详述)。因此用 aggTrade 统计“发生了多少次主动买入”,得到的是 taker 单数量,而不是逐笔成交笔数。

该看哪个:按用途取舍

若目的是观察成交节奏、判断主动买卖压力,aggTrade 更贴近“一笔主动单”的语义,数据量小,处理成本低,适合做成交量聚合和方向统计。若目的是逐笔复盘、核对某笔成交的编号,或需要把成交与具体挂单一一对应,则必须用 trade,因为只有它保留每笔成交的唯一 ID 和独立买卖双方。两者在时间戳上也不必完全对齐:聚合记录的 T 是聚合后的成交时间,逐笔记录的 T 是各自成交时间。实践中若要跨流拼接,可用成交 ID 区间 f–l 建立对应关系,而不必假定事件时间完全相同。

适用范围与依据

以上对比仅适用于币安现货 WebSocket 行情流,依据是官方 web-socket-streams.md 文档中 Aggregate Trade Streams 与 Trade Streams 两节的定义。本文依据所给文档片段整理,具体以官方当前文档为准,文中不展示任何实时行情,也不涉及下单、费用或账户资格。理解这两个接口的差别,关键在于分清“taker 单”和“逐笔成交”两个层级:前者是聚合单位,后者是原始记录,选哪个取决于你要回答的问题。

原始资料

github.com

上一篇 XRP Ledger挂单能换到超过信任线限额的代币吗?答案与代价