你挂在某个价位,价格明明碰到了,却没成交。原因通常不是运气,是队列位置。MBO 数据能给出每笔委托的独立身份与进出时间,MBP10 只给聚合量——这个差别决定了「排不排得到」到底能不能算。
一、MBO 和 MBP10 到底差在哪?
这两个词经常被混着用,但它们是两种完全不同粒度的行情。先记住一件事:盘口(DOM)展示的是各价位当前挂着的限价单数量的快照,档数可配置,且不代表全部流动性——暗池(dark pool)与冰山单都不在上面。
MBP10(market by price):按价格档聚合。给你买一到买十、卖一到卖十,每一档只有「价格 + 总挂单量」。你能看到十档厚度,但看不到这十档是由多少笔委托组成的。
MBO(market by order):按委托聚合。每笔委托有独立身份——订单编号、方向、价格、数量、进入时间,以及后续修改与撤销。
由此可以推出一条硬边界:只有两个快照,永远无法还原成交结构。看到某档从 100 手变成 80 手,中间可能是「成交 30、撤单 10、加单 20」,也可能只是「撤单 20」。只看首尾,比例与顺序都还原不出来。要还原,必须逐事件(MBO);只看快照(MBP),做不到。
差别在哪?举一个具体问题就清楚了:
> 我前面原来有 80 手,现在只剩 20 手。这 60 手是被成交吃掉的,还是被撤单撤走的?
用 MBP10,你只知道总量从 80 变成 20,这两个原因分不开。
用 MBO,你能逐笔对上:哪几笔被成交(成交记录)、哪几笔被撤(撤单记录)。60 手里 15 手是成交、45 手是撤单,一清二楚。
站内 订单流基础 讲过盘口「挂单是意图、成交是事实」,MBO 的意义就是把这句话落到每一笔委托上:它让你看到意图是怎么消失的。
二、队列位置如何决定成交概率?
先说撮合规则,因为不谈规则谈队列没有意义。
主流撮合有两大类:
- 价格优先、时间优先(FIFO):同一价位上,先挂的先成交。你的位置就是你的顺序号。
- 按比例分配(pro-rata):同一价位上,来了成交就按各笔委托的数量比例分。位置不那么重要,数量更重要。
还有混合型:一部分按 FIFO 分配、剩下的按 pro-rata(很多期货品种用这种),或者对特定参与者(做市商)给优先级。
这句话听起来像废话,但它解释了一个非常常见的困惑:为什么我的挂单「价格到了却没成交」。
答案几乎总是同一个:价格到了这一档,但这一档的成交量还没有超过你前面的排队量。价格「碰到」和「吃穿」是两件事。
所以,被动挂单的成交概率,本质上是「前方队列被清空的速度」的函数。而下文会看到,这个速度里,撤单往往比成交更重要。

一个价位上的队列结构。图例:红色方块 = 正在被消耗的前排;深灰方块 = 排在你前面的其余委托;青色方块 = 你的委托;右侧灰块 = 你后面的委托;箭头 = 消耗方向。看点是被消耗的只是从左端开始的一段,不是整个队列。
三、给一个能算的例子:你在第 N 手,前方撤单率 r
现在把这件事写成可以算的形式。
设:
- Q0:你前方的排队量(手),也就是排在你前面还没成交、没撤的量;
- r:撤单率,单位时间内前方队列被撤走的比例(每分钟撤掉剩余量的 r 倍);
- f:成交速率,单位时间内这一档被成交掉的手数(手/分钟)。
前方队列 Q(t) 的变化由两部分构成:撤单按比例减少,成交按固定速率减少。
dQ/dt = − r · Q − f
这是一个一阶线性微分方程,解出来是:
Q(t) = ( Q0 + f / r ) · e^(−r·t) − f / r
令 Q(t) = 0,解出你被成交的时刻:
**t* = (1 / r) · ln( 1 + r · Q0 / f )
这个式子就是本文的核心。它告诉你:排到你要多久。
先看两个极限,能建立直觉:
- 当 r → 0(没人撤单)**:ln(1 + x) ≈ x,所以 t* ≈ Q0 / f。也就是纯靠成交消耗,前方多少手除以每分钟成交多少手。这是最慢的情形。
- 当 r 很大(撤单凶):t* ≈ (1/r)·ln(r·Q0/f),被 1/r 压住。撤得越凶,你越快排到。
举个数字例子(数字仅为说明算法,不代表任何真实品种):
假设前方 Q0 = 80 手,撤单率 r = 0.02 /分钟(每分钟撤掉剩余量的 2%),成交速率 f = 6 手/分钟。
- r · Q0 / f = 0.02 × 80 ÷ 6 = 0.2667
- ln(1.2667) = 0.2364
- t* = (1 / 0.02) × 0.2364 = 50 × 0.2364 ≈ 11.8 分钟
也就是说,按这个速度,你要等将近 12 分钟才轮到你。
如果这一档的成交速率只有 f = 2 手/分钟:
- t* = 50 × ln(1 + 1.6/2) = 50 × ln(1.8) = 50 × 0.5878 ≈ 29.4 分钟
成交速度掉到三分之一,等待时间涨到 2.5 倍——不是线性关系,这是这个式子最实用的地方。
反过来,如果撤单率提高到 r = 0.10 /分钟(每分钟撤 10%),其他不变:
- t* = (1 / 0.10) × ln(1 + 8/6) = 10 × ln(2.333) = 10 × 0.8473 ≈ 8.5 分钟
撤单率提高 5 倍,等待时间只从 11.8 分钟缩到 8.5 分钟——缩得没那么多,因为撤单带来的前进是对数递减的。这说明:靠别人撤单前进,效率有限。
再给一个反向用法,从「结果」倒推「条件」:
如果你希望在某段时间窗 T 内排到,需要的最小成交速率是:
f ≥ r · Q0 / ( e^(r·T) − 1 )
代入上例,想看「5 分钟内能不能排到」(T = 5,r = 0.02,Q0 = 80):
- 分母 = e^(0.1) − 1 = 0.10517
- f ≥ 1.6 ÷ 0.10517 ≈ 15.2 手/分钟
也就是说,这一档每分钟至少要成交 15 手以上,你才可能在 5 分钟内排到。如果实际成交速率只有 6 手/分钟,那 5 分钟这个窗口是不现实的。

核心公式 t* = (1/r)·ln(1 + r·Q0/f) 的形状。图例:三条实线分别为 r 小 / 中 / 大;青色水平虚线 = 5 分钟窗口;交点 = 该窗口内排到所需的最低成交速率 f。看点在曲线「前陡后平」,且撤单率高的曲线整体靠下但差距随 f 收窄。
四、为什么撤单率比成交量更关键?
看上面的公式就能明白:Q0 和 f 是你的「处境」,r 是「别人的行为」。而 r 有一个特性,f 没有——r 可以是负的。
等一下,负的撤单率是什么?是新挂单不断补充进来。
现实里最常见的情形恰恰是这个:这一档被吃掉一部分,立刻有新单补进来,净变化接近零。这时 r ≈ 0 甚至为负,公式退化成 t* ≈ Q0/f,你最慢的情形。
这就解释了一类现象:某些价位成交很活跃,你就是排不到——成交被源源不断的新挂单接住了,队列长度不减。你前面的 80 手被吃掉 20 手,又补进 25 手,净长 5 手,位置还后退了。
顺带把枯竭(exhaustion)也接进来:成交有限、活跃度低的状态下,成交速率 f 很小,按第三节的公式 t* 会被拉得很长——枯竭直接等于排不到。这也是为什么低活跃时段挂单的成交体验最差。
这就是为什么撤单率更关键:
而判断的依据,来自盘口的实际形态。站内 吸收的形成过程 里描述的那种「打了很多但挂单不减」的情形,从队列的角度看就是 r ≈ 0 且新单持续补充——对排队者来说是最坏的结构。
五、散户能看到多少?——把边界说清楚
这一节必须写得直白,否则前面那些公式会让你产生错误的安全感。
先说统计口径:DOM 统计的是待机挂单量、逐笔成交(Time & Sales)统计已成交、足迹图统计 bar 内按价分类的量、成交量分布统计区间内按价聚合的量——四种图统计的事件不同,覆盖率完全取决于数据源。
第一,你看到的数据大概率不是 MBO。 多数零售行情源只给 MBP10 甚至五档;有些声称「逐笔」,实际是逐笔成交而非逐笔委托。没有委托数据,算不出 r。
第二,撮合规则可能不是 FIFO。 很多品种用 pro-rata 或混合规则,此时「你在第几手」本身失效,成交按数量比例分配。用 FIFO 公式去算 pro-rata 市场,是系统性偏差。
第三,显示的挂单量大,推不出持有者与意图。 冰山单只显示一小部分、成交后自动补量,暗池成交根本不进中央限价簿。更要紧的是:大挂单不等于主力,也不等于会守——只有成交才是事实。你算出的 Q0 可能严重低估。
第四,止损单不在队列里,但会一次性吃掉队列。 止损单(stop order)平时不显示,触发后变成市价单,直接扫掉整个价位甚至多档——扫损(stop run)的瞬时冲击就是这么来的。
第五,延迟与 OTC 差异。 你看到的快照是 δ 毫秒之前的;现货外汇这类 OTC 市场更极端——没有唯一的全球盘口,你看到的 DOM 只是某家 LP 或经纪商给你的报价集合。
所以结论是:你可以用这套模型做相对判断,但不能用它做绝对值承诺。
- 能做的:比较两个价位的等待量级、判断「这一档撤单凶不凶」、识别「成交活跃但队列不减」的结构。
- 不能做的:精确算出「我几分几秒后成交」、承诺某个价位一定能排到。

队列重排的三个连续时刻。图例:红色 = 前排被消耗;深灰 = 原队列留存;绿色 = 新补进来的委托;青色块(标「你」)= 你的位置。看点是总长度变化很小、构成完全换了——你的位置反而更靠后。
六、排队这件事的收益与代价
既然排队这么难,为什么还要排?因为被动成交有一个确定的收益:赚点差。
把它写成一个可以算的期望值:
EV(排队) = ½ × spread − 逆向选择成本
- ½ × spread:买在买价、卖在卖价,平均能吃到半个价差的收益;
- 逆向选择成本:你被成交的那一刻,往往是有人主动打过来,而主动方通常更有信息或更急,所以成交后价格朝不利方向继续走的概率偏高。
逆向选择成本可以粗略估成:
逆向选择成本 ≈ P(成交后价格继续朝不利方向 ≥ 1 tick) × 1 tick
EV = 0.5 − 0.8 = −0.3 tick
每笔被动成交的期望是负的。 这时候「排不到」反而救了你。
这个计算的意义在于:它把「排队」从「技术问题」变成了「取舍问题」。你不是一定要排到,你要排到的是期望为正的那些档位。
七、这篇哪里可能错
这一节必须认真写,因为上面那个微分方程看起来很漂亮,但它建立在一堆强假设上。
第一,撮合规则可能根本不适配。 FIFO 公式用在 pro-rata 市场是根本性错误,不是精度问题。用之前必须确认品种的撮合规则,这一点没有捷径。
第二,假设「前方队列单调减少」是错的。 公式里 Q(t) 恒下降,现实里队列会长回来。当新挂单速率超过消耗速率时,t* 根本不存在,而公式仍会给你一个有限的数。这是最大的失真来源。
第三,r 与 f 被当成常数。 现实里 r 在消息前后能差十倍,f 在开盘与午盘能差三倍。用全天平均值去算,t* 没有意义,必须按时间段与波动状态分段估计。
第四,跨品种不可比。 手数、tick 值与合约规模都不同,80 手在 A 品种是小队列、在 B 品种可能是巨量。所有参数必须按品种重标定。
第五,部分成交与幸存者偏差。 你的单可能分批成交,公式假设的是一次性全部成交;统计被动成交的逆向选择成本时,只统计了「已成交」的样本,没成交的不在里面。
常见问题
Q1:没有 MBO 数据,还能用这套方法吗? 能用一部分。没有 MBO 就分不开撤单与成交,但可以用替代指标:同一档挂单量短期反复增减的次数,作为撤单活跃度的粗糙代理。它给不出准确的 r,但能区分安静的一档与反复换手的一档。用 ATAS 可参考 这篇指标整理。
Q2:队列位置重要,还是价格重要? FIFO 下位置决定能不能成交,价格决定成交了赚不赚。位置靠前但方向错,成交即亏损(逆向选择);位置靠后但结构对,没成交反而更好。
Q3:为什么模拟盘容易排到、实盘却排不到? 三个原因:模拟盘撮合常被简化甚至不考虑真实队列;没有真实延迟与拥堵;对手方是模型而非真实做市商,不存在逆向选择。
风险提示
本文只讲 MBO 与 MBP10 的数据差别、队列位置的消耗模型与散户可见性边界,不构成任何投资建议,也不预测任何品种的价格走向。文中数字与示例仅为说明计算过程,r、f、Q0 均为需按品种与时段标定的参数。被动挂单的期望收益可能为负,期货与杠杆交易可能导致本金全部损失,请独立决策。想补齐盘口读法可回看 订单流基础 与 足迹图与失衡的读法;新手建议从 新人学习路径 进入本系列。
























暂无评论内容