4. 连续竞价的运行机制

连续竞价阶段的核心任务,是把不断到达的限价订单与市价订单,按照“价格优先、时间优先”的规则持续撮合成交,并实时生成一条可观测的成交价格序列。理解这一机制,需要同时看清三个层面:订单簿如何组织、撮合如何判定、成交价格如何被“写”进序列。本节围绕这三层展开,并给出可操作的观察与验证方法。

一、订单簿结构:两个方向、两个价格维度

订单簿(Order Book)是连续竞价的“账本”。它按买卖方向分为两侧:买方一侧记录所有未成交的买入委托,卖方一侧记录所有未成交的卖出委托。每一侧内部再按价格排序——买侧价格由高到低,卖侧价格由低到高。这样排序的意义在于:最优买价(买一)与最优卖价(卖一)永远位于两侧的顶端,撮合时只需比较这两个顶端价格即可判断能否成交。

同一价格上可能堆积多笔委托,形成“价格档位”。每个档位需要记录两个关键量:该价位的委托笔数(或订单数)与该价位的可成交量(剩余数量)。此外,每笔委托还需保留到达时间戳,用于同价位内的先后排序。因此订单簿的完整结构可以概括为:方向 → 价格档位 → 时间序列 → 剩余数量。理解这一点很重要,因为后续撮合的“时间优先”正是依赖档位内的时间序列,而不是依赖价格本身。

实际观察时,订单簿通常以“买一至买五、卖一至卖五”的档位快照呈现。快照只反映某一时刻的静态切片,而连续竞价的本质是动态变化:新订单进入、旧订单成交或撤单,档位数量随之增减。因此看订单簿不能只看某一帧,而要看档位的“增厚”与“消耗”方向。

订单簿结构与撮合判定 买方(买侧)价格由高到低 买一 10.02 120手 / 3笔 买二 10.01 260手 / 5笔 买三 10.00 410手 / 8笔 买四 9.99 180手 / 4笔 买五 9.98 300手 / 6笔 卖方(卖侧)价格由低到高 卖一 10.03 150手 / 4笔 卖二 10.04 220手 / 3笔 卖三 10.05 380手 / 7笔 卖四 10.06 160手 / 2笔 卖五 10.07 270手 / 5笔 买一 10.02 卖一 10.03 价差 0.01 撮合判定:新到买单价格 ≥ 卖一价 → 成交;新到卖单价格 ≤ 买一价 → 成交 成交价取先挂单方价格(被动方价格),同价位按时间先后逐笔消耗

二、限价订单与市价订单的撮合逻辑

限价订单带有明确的价格上限(买入)或下限(卖出)。当一笔限价买单到达时,系统从卖一侧的卖一开始比较:若买单价格 ≥ 卖一价,则发生成交;成交后若买单仍有剩余,继续与卖二比较,直到买单价格低于当前卖价或买单全部成交。若买单价格低于卖一价,则无法立即成交,该买单进入买侧,按价格与时间插入相应档位,成为新的挂单。限价卖单的逻辑对称:从买一开始比较,卖单价格 ≤ 买一价即可成交,否则挂入卖侧。

市价订单不携带价格约束,只表达“立即成交”的意愿。市价买单从卖一开始逐档向上吃单,直到订单数量耗尽;市价卖单从买一开始逐档向下吃单。这里有一个必须注意的边界:市价单在订单簿深度不足时,可能吃穿多个档位,成交均价会明显偏离最优价,甚至出现部分成交后剩余撤销的情况。因此市价单的“成交价格”不是单一价格,而是一组按档位分布的成交记录。

撮合中还有一个关键约定:成交价取“先挂单方”的价格,也就是被动方(挂在订单簿中等待的一方)的价格。例如卖一挂单 10.03,新到买单出价 10.05,成交价仍为 10.03,而不是 10.05。这一约定保证了价格序列的连续性,避免主动方报价直接跳变价格。同价位内则严格按时间先后逐笔消耗,先挂先成交。

三、成交价格序列的生成过程

每一笔撮合都会产生一条成交记录,字段通常包括:成交时间、成交价格、成交数量、主动方向(买方主动或卖方主动)。这些记录按时间顺序排列,就构成了成交价格序列。序列的生成不是“先算均价再记录”,而是逐笔撮合、逐笔落账:一次撮合可能只成交一笔,也可能因主动单数量较大而连续吃掉多个档位,产生多条价格不同的成交记录。

以示例说明:假设卖一 10.03 有 150 手,卖二 10.04 有 220 手。此时到达一笔市价买单 300 手。撮合过程为:先与卖一成交 150 手,价格 10.03;剩余 150 手继续与卖二成交,价格 10.04。于是序列中新增两条记录:10.03×150、10.04×150。若随后到达一笔限价卖单 10.02、数量 100 手,因 10.02 ≤ 买一 10.02,与买一成交 100 手,价格取被动方买一价 10.02,序列再增一条 10.02×100。可以看到,成交价格序列是撮合过程的“逐笔投影”,而不是事后汇总。

实际观察时,应重点关注三个判据:其一,最新成交价是否等于当前买一或卖一,若连续多笔等于同一侧最优价,说明该侧正在被主动消耗;其二,成交量的分布是否集中在某一档位,集中消耗往往意味着该档位即将被吃穿,价格将向下一档迁移;其三,主动方向是否连续同向,连续买方主动通常对应价格序列上行。把这三者与订单簿档位变化对照,就能判断价格序列是“档位内消耗”还是“跨档迁移”。

观察技巧:不要只看最新价,要把“最新成交价 + 成交量 + 主动方向”三者一起看。单看最新价容易把档位内的小额成交误判为趋势,而结合成交量与主动方向,才能区分“试探性成交”与“实质性吃单”。

四、把机制落到可复现的观察流程

若要在教学或研究环境中复现上述机制,可按以下顺序操作:第一步,记录某一时刻的买一至买五、卖一至卖五快照,包含价格、数量、笔数;第二步,持续记录逐笔成交明细,至少保留时间、价格、数量、主动方向四个字段;第三步,将成交明细按时间排序,逐笔标注其对应的被动方档位,验证成交价是否等于被动方价格;第四步,统计每个档位被消耗的数量,与快照中的档位数量对照,检查是否存在跨档成交;第五步,观察主动方向连续性与价格序列方向是否一致。若发现成交价不等于任何一档被动价,或档位消耗量与成交量不匹配,则应回查撮合规则实现或数据口径,而不是直接采信序列。

需要强调的是,订单簿快照与逐笔成交是两种不同粒度的数据:快照是切片,成交是流。连续竞价的运行机制只有在“流”的层面才能被完整观察——档位如何被逐笔消耗、价格如何从卖一迁移到卖二、主动方向如何累积,这些都体现在成交序列的逐笔记录中。掌握订单簿结构是看懂“账本”,掌握撮合逻辑是看懂“规则”,而掌握成交价格序列的生成过程,才是把账本与规则连成一条可验证的证据链。