如何判断哪一方主动成交:报价规则、逐笔规则与 Lee–Ready
了解报价规则、逐笔规则和 Lee–Ready 算法如何推断主动买卖方,为什么价差内的成交难以判断,以及交易所数据有哪些边界。
本指南内容分类中的“买入”指哪一方
简短摘要
每笔成交都有买方和卖方。成交方向分类试图推断哪一方越过报价、主动发起了成交。逐笔规则看成交价相对上一笔的变化,报价规则比较成交价与买卖价差中点;Lee–Ready则结合报价位置,并在成交恰好位于中点时使用逐笔规则。这是根据数据作出的推断,不是参与者账户的持仓记录。
分类中的“买入”指哪一方
在市场微观结构分析中,标记为 buy 通常表示买方主动拿走了卖方挂出的流动性。买方可能提交市价单,或提交能够立即成交的订单,去成交 ask 价上的等待卖单。标记为 sell 则表示卖方主动与 bid 价上的等待买单成交。无论标签是买入还是卖出,每笔已经完成的交易都同时有买方和卖方。
分析逐笔成交时,这个区别很重要。买方跨越价差成交,通常被称为主动方或流动性获取方;等待成交的卖方限价单则是被动方或流动性提供方。不过,算法生成的标签并不能说明主动买方是在开多、平空、对冲风险,还是在执行一笔更大的客户订单。它也不会显示参与者身份、动机或成交后承担的净风险。
成交记录和报价数据往往没有直接说明哪一方发起成交的字段。因此研究人员会从成交价、相邻成交和当时的报价推断方向。尤其是历史数据只保留成交价,或报价经过聚合而没有交易所提供的主动方字段时,应把标签视为按某一规则计算出的估计,而不是原始事实。
逐笔规则根据连续成交价推断方向
逐笔规则将当前成交价与上一笔成交价比较。当前价格更高,属于 uptick,即上涨一跳,通常标记为主动买入;当前价格更低,属于 downtick,即下跌一跳,通常标记为主动卖出。它不需要订单簿报价,因此可用于部分只保留历史成交价格的数据集。
如果两笔成交价格相同,就称为 zero tick。常见做法是沿用最近一次非零价格变动的方向:最近一次变动上涨时,相同价格的成交沿用买入符号;最近一次变动下跌时,沿用卖出符号。这样可以给连续同价成交赋值,但也可能让旧方向延续多个成交。如果此前没有任何非零价格变动,逐笔规则就无法判断方向;应将其保留为未分类,而不是随意填入 buy 或 sell。
规则简单并不意味着总是准确。价格上涨可能是因为报价移动,不一定是刚才的成交由买方发起。成交稀疏、消息未同步、成交报告顺序错乱、开盘拍卖和特殊成交条件也会破坏这个假设。Lee和Ready认为逐笔规则有实用价值,尤其在报价无法给出清晰答案时,但标签质量仍受数据时点和覆盖范围影响(Lee与Ready,1991)。
报价规则将成交价与价差中点比较
已知最佳买价和最佳卖价时,中点是两者的平均值。简单报价规则将高于中点的成交分为主动买入,将低于中点的成交分为主动卖出。价格恰好等于中点时,单靠这项比较无法确定方向,需要额外规则,例如逐笔规则,或保留为未分类。如果成交价正好等于 ask,通常符合买方主动;正好等于 bid,则通常符合卖方主动,前提是成交和报价在时间上匹配正确。
当成交发生在 bid 与 ask 之间时,推断会更不确定。这个价格可能来自改善报价的限价单、隐藏流动性、内部撮合或数据源的时间延迟。价格离中点哪一侧更近,并不能证明哪一方先发出了订单。如果价差较宽,或中点需要按最小报价单位取整,差一个 tick 就可能改变标签,尽管经济上的差异非常小。
关键条件是报价在成交发生时有效,并且属于同一合约和交易场所。延迟报价、综合报价或其他交易场所的报价可能出现在引发报价变化的成交之后。先核对来源和时间戳;期货订单簿与逐笔成交的区别说明订单簿状态与已报告的成交记录是不同类型的市场数据。
Lee–Ready结合报价位置、价差内规则和时间调整
经典Lee–Ready方法先将成交与相应报价比较:ask及以上通常归为主动买入,bid及以下归为主动卖出。成交在价差内但不在中点时,原方法按更接近的报价一侧分类;恰好位于中点时则使用逐笔规则。如果逐笔规则也没有先前非零价格变化,观察值可保留为未分类。程序应依据价格精度和最小变动价位定义“恰好位于中点”。
作者还调整了报价与成交的时间匹配。在其研究中,紧邻成交之前录入的报价可能已经反映了该笔成交;针对1988年NYSE数据,他们使用成交时间至少五秒之前出现的最近报价。这个原始延迟是针对当时数据记录和同步问题的研究设定,不是现代电子市场的通用参数。在高频数据中,五秒之前的订单簿状态可能已经完全不同。
自己实现时,应定义事件顺序和时间戳质量,而不是照抄五秒。成交和报价使用同一时钟吗?时间是交易所事件时间还是数据供应商接收时间?相同时间戳、两笔成交之间的多次报价更新、缺失消息和无报价时段要怎样处理?按数据流规定的消息顺序,或使用更短且有依据的延迟,可能更合适。应在分析前确定并记录选择,而不是事后调整以提高想要的指标。
一个例子说明不同规则为何会冲突
假设最佳买价为100.00,最佳卖价为100.04,因此中点为100.02。上一笔成交价为100.00。以下价格都是用于演示分类规则的假设值,并非真实行情或交易结果。
下一笔成交价为100.01。由于100.01高于上一笔的100.00,逐笔规则将它标记为买入。但100.01低于中点100.02,所以报价规则将它标记为卖出。这不是算术错误,而是因为两种规则参考了不同证据。对于价差内的成交,仅凭成交价无法确定哪一方的标签一定正确。
再下一笔成交价为100.02,恰好等于中点。单独的报价规则无法给出方向,Lee–Ready会转而使用逐笔规则。因为100.02高于上一笔100.01,逐笔规则的后备判断为买入。如果再下一笔成交于ask价100.04,按报价比较通常会标记为主动买入。实际程序还需要处理价格取整、零跳、过时报价和时间戳不匹配。
这个例子不表示所有中点成交都是买入,也不表示100.01的卖出标签一定错误。它展示的是间接信号可能冲突,因此需要记录如何解决冲突。如果交易所提供主动方字段,它可能比单个成交价的推断更直接,但仍须遵循具体数据流的技术规范。
假设这三笔成交的数量依次为4、3、2。Lee–Ready的方向是卖、买、买,因此signed volume为−4 + 3 + 2 = +1;只用逐笔规则时,三笔都带正号,合计+9。成交价格和数量不变,仅分类方法就令总量相差8个单位。若有方向未定的成交,也应报告覆盖率和处理方法;以上只是算术示例。

已发表的准确率只适用于特定样本
Ellis、Michaely和O’Hara使用专有Nasdaq数据比较了多种分类方法。在他们的样本中,报价规则的准确率为76.4%,逐笔规则为77.66%,Lee–Ready为81.05%。这些数字描述的是该数据集中的比较,不代表所有市场的准确率承诺。时期、证券、时间戳质量、参考标签如何确定,以及价差内成交占比都会影响结果;价差内的成交尤其难判断(Ellis、Michaely和O’Hara的研究)。
Jurkatis提出一种 full-information 方法,通过更详细的数据将成交与报价匹配。在该研究中,尤其是时间戳精度较低时,该方法优于所比较的标准规则。这是单项研究中的实证结论,不能保证它在其他交易所、合约或消息协议中都更好。full-information匹配需要准确重建订单簿消息,而只接收聚合历史数据的用户可能无法做到(Jurkatis,2022)。
比较方法时,若交易场所有独立方向标签,应优先用作核对基准,并分别报告已分类、未分类和被排除成交的比例。总体准确率可能掩盖价差内或流动性较低合约中的错误。如果所谓基准标签本身也是用同一规则的另一个版本生成的,这种比较并不能验证真实的主动方。
交易所原生字段不同于推断标签
部分行情数据流会直接提供主动方字段。CME MDP 3.0 Trade Summary文档说明了AggressorSide字段,用来标示哪一方是主动方或没有明确主动方:值1表示bid aggressor,值2表示ask aggressor。应在对应的消息格式中解释这些代码;没有明确定义主动方时,不要自行改成买入或卖出(CME MDP 3.0技术文档)。
Nasdaq TotalView-ITCH在新增订单消息中给出可见静止订单的买卖方向,成交消息可通过订单引用编号关联该订单。如果被执行的静止订单属于卖方,面对它的交易通常是主动买入;如果静止订单属于买方,推理方向相反。但这是通过关联多条消息得到的判断,并非每笔成交都会提供一个通用主动方字段。ITCH对不同消息类型有特殊规则:例如规范指出,Non-Cross Trade消息中的Buy/Sell Indicator可能始终为“B”,无论静止订单的实际方向。不要把名称相似的字段当作主动方向;必须按Nasdaq规范解码准确的消息类型(TotalView-ITCH 5.0)。
交易所直接字段只有在其文档定义、消息版本和发布条件范围内,才比启发式规则更直接。其他市场可能根本不提供主动方数据。
时间匹配的规则应与方向规则分开记录。比如同时保存交易所事件时间、供应商接收时间和本地处理时间时,不能挑其中最有利的一列来配对。跨场所的综合报价还可能包含不同延迟和不同资格条件;如果用它标记本地成交,研究报告应说明为何这个综合中点代表同一笔成交的有效报价。OFI与限价订单簿的变化回答的是另一个问题:OFI按时间累加报价和队列变化;signed volume则是在给单笔成交加上方向标签后计算的聚合值。
如何检查自己的数据分类
先固定成交和报价来源、完整合约、交易场所、时区、时间戳精度及消息排序规则。随后记录使用场所最佳报价还是综合NBBO、逐笔规则所依赖的成交序列,以及如何处理同价成交、中点、锁定市场、拍卖成交、延迟报告和报价范围外的价格。这些选择会改变标签,必须能够重复执行。
不要要求算法给每笔成交都强行分配方向。没有报价、报价锁定、时间戳不一致、消息顺序异常,或逐笔规则还没有先前非零价格变化时,方向可能无法确定。未确定比例本身也描述了数据的可用范围。用最近一笔成交或未来价格变化填补缺失标签,可能会不知不觉引入未来信息。
手动检查时,抽取一小段包含每笔执行前后原始消息的样本。对照最佳bid/ask、中点、成交价、最近一次非零价格变化、消息类型和可用的交易所字段。分别检查ask成交、bid成交、价差内成交和中点成交。核实报价是否可能由这笔成交本身触发,再用几种有依据的时间处理方案重复计算。敏感性分析能说明结论是否稳健,但不能在没有预先规定标准的情况下任意挑选最有利版本。
评估准确率时不要只看算法愿意分类的记录。若一种方法把难以判断的价差内成交留为未知,它在剩余子样本上的准确率可能看起来较高,但覆盖率却更低。应在相同成交集合上并列报告准确率、未分类比例和加权成交量覆盖率;时间戳精度低的观察也应单独分组。如此才看得出方法是减少错误,还是只跳过了更难的记录。
成交方向不等于持仓,也不是交易信号
一种常见聚合方式是signed volume:S = Σ sᵢvᵢ,其中vᵢ为成交数量,推断为主动买入时sᵢ = +1,主动卖出时sᵢ = −1。该值会随时间窗口、交易场所范围、数量单位,以及未确定方向的成交被排除还是单独处理而变化。报告总值时也应说明有效覆盖范围和未知值规则。
主动买入可能是在平空,卖方可能在减持多头,任一方也可能是在对冲或执行大型订单的一部分。分类结果不能说明成交后谁承担风险、其持有期限如何,或其他交易场所发生了什么。把一分钟内的signed buy volume汇总起来,是另一个统计量,取决于窗口和聚合方法,并不是新开多头仓位的清单。
即使成交方向标签正确,也不能证明未来会盈利。数据到达前价格可能已变化,订单也可能只部分成交;价差、佣金、延迟、市场冲击和退出价格都可能吞噬短期变动。研究实际执行成本需要回答另一个问题:implementation shortfall指南从决策价格、实际成交和未成交数量衡量差距。
研究报告应说明分类规则、时间匹配方法、未确定标签比例、样本特征和验证证据。如果数据只能推测哪一方主动,就不要把它称为参与者意图的直接证据。微观结构标签可以帮助描述交易流,但不是有保证的信号、预测或结果。
常见问题
Q1标记为“主动买入”的成交仍然有卖方吗?
有。该标签表示买方越过报价并发起成交,卖方提供了对应流动性。每笔完成的交易都有双方。
Q2在ask价成交是否总能证明买方主动?
如果成交与报价正确对齐,通常是这样。但过时或时钟不同步的数据流、拍卖撮合和特殊消息类型都可能影响解释,应核对数据规范。
Q3可以把Lee–Ready当作交易信号吗?
该算法只估计过去某笔成交由哪一方发起。它不能确定参与者持仓或未来收益;用于研究前应检查误差、未确定情况、时间对齐和交易成本。
资料来源与延伸阅读
报告问题
我们会准备一封包含本文链接的邮件。发送后,Mark 才会收到你的反馈
快速检查
读完指南后,用 3 道题检查一下
问题 01
当前成交价与上一笔相同,而最近一次非零价格变动向下。逐笔规则如何标记?
选择答案即可查看解释
期权术语表
清楚解释从看涨、看跌和期权链到 IV、希腊字母、未平仓量与最大痛点等核心期权术语
浏览期权术语表