3. 成交方向的定义与判定规则
在盘口回放中,我们看到的每一笔成交都带有价格和数量,但仅凭这两项无法判断这笔成交是买方主动吃掉了卖方的挂单,还是卖方主动砸向了买方的挂单。成交方向(也叫主动方向、发起方)正是用来回答这个问题的标签。它决定了我们在回放中如何解读一笔大单的真实意图:同样是一笔500手的成交,标记为主动买和标记为主动卖,对后续价格走势的含义截然相反。
本节要解决的核心问题是:给定一笔成交及其发生时刻的盘口快照,如何用可复现的规则把它归入主动买、主动卖或中性成交三类。判定规则必须明确、可编程,才能在回放系统中批量执行并保持一致。
三类成交方向的定义
主动买(Buy-initiated):买方以卖方挂单价成交,即成交价等于或接近卖一价,买方愿意支付卖方的要价,属于“吃单”行为。在逐笔数据中通常表现为成交价 ≥ 卖一价(成交前一刻的卖一价)。主动买意味着买方急于成交,是需求端发力的信号。
主动卖(Sell-initiated):卖方以买方挂单价成交,即成交价等于或接近买一价,卖方愿意接受买方的出价,同样属于“吃单”行为。表现为成交价 ≤ 买一价(成交前一刻的买一价)。主动卖意味着卖方急于出手,是供给端发力的信号。
中性成交(Neutral):成交价落在买一价与卖一价之间(严格位于价差内部),或者发生在集合竞价、盘后固定价格交易等无连续双边报价的场景中,无法明确归因于某一方主动发起。中性成交通常量小、偶发,但在价差较大的品种上也可能频繁出现。
基于价格变动与订单簿状态的判定逻辑
最基础的判定方法是价格比对法:取成交价 P、成交前买一价 B1、成交前卖一价 A1,则
- 若 P ≥ A1,判为主动买;
- 若 P ≤ B1,判为主动卖;
- 若 B1 < P < A1,判为中性。
但价格比对法在两种情况下会失效。第一种是价格穿越多档:一笔大单连续吃掉卖一到卖三,成交价可能记录为最后一档价格,此时 P 远高于 A1,仍应判为主动买,规则依然成立;但如果成交被拆成多笔逐笔记录,每笔价格不同,需要逐笔用各自的成交前快照判定。第二种是成交价等于买一价也等于卖一价(价差为零的极窄盘口),此时价格比对无法区分方向,必须引入订单簿状态。
订单簿状态法的核心是观察成交前后买卖一档数量的变化。设成交前卖一量为 Qa、买一量为 Qb,成交量为 V:
- 若成交后卖一量减少约 V(Qa' ≈ Qa − V),说明卖方挂单被吃掉,判为主动买;
- 若成交后买一量减少约 V(Qb' ≈ Qb − V),说明买方挂单被吃掉,判为主动卖;
- 若买卖一量均无明显变化而价格移动,说明是撤单导致的价位移位,该笔成交应结合逐笔委托数据复核,暂标为待定。
实际工程中通常采用价格优先、订单簿校验兜底的组合规则:先用价格比对给出初判,当 P 恰好等于 B1 或 A1 且价差为零、或价格落在价差内部时,再用订单簿数量变化做二次确认。这样既保证了绝大多数成交的判定效率,又覆盖了边界情况。
回放中的实操要点与示例
假设某品种在回放时间轴 10:15:03.200 出现一笔成交:P = 25.36,V = 800 手。取该时刻前一刻的盘口快照:B1 = 25.35(挂 1200 手),A1 = 25.36(挂 600 手)。按规则,P = A1,判为主动买。进一步看订单簿:成交后卖一量从 600 手降至 0,卖二价 25.37 上移为新的卖一,说明 600 手卖单被吃光后剩余 200 手继续吃向 25.37,方向判定依然为主动买。这个例子说明价格比对与订单簿校验结论一致时,判定可信度高。
再看一个边界例子:P = 25.35,B1 = 25.35,A1 = 25.35(价差为零),V = 300 手。价格比对无法区分方向。此时查订单簿:成交前买一量 900 手、卖一量 900 手;成交后买一量 600 手、卖一量 900 手。买一量减少 300 手,与成交量吻合,判为主动卖。若成交后卖一量减少 300 手,则判为主动买。若两者都未变化而价格跳到 25.36,则说明是撤单造成的价位移位,该笔成交应标记为待定并回溯逐笔委托数据。
判定结果的一致性检查
在盘口回放中做成交方向一致性检查,本质是验证同一段行情用不同数据源或不同判定规则得到的方向标签是否一致。常见的检查项包括:逐笔成交方向与逐笔委托方向是否矛盾(例如标记为主动买但对应委托是卖方新挂单);同一价格档位连续成交的方向是否与价格移动方向一致(主动买应推动价格上行或维持卖一被消耗);以及价格比对法与订单簿状态法在同一笔成交上的结论是否冲突。冲突率超过设定阈值(例如 2%)时,应优先排查快照对齐问题和价差为零场景的规则覆盖情况,而不是直接修改方向标签。
掌握这套定义与判定规则后,回放中的每一笔成交都能被赋予可解释的方向标签,后续的一致性检查、大单追踪和盘口强弱分析才有可靠的数据基础。