2. 涨停盘口数据结构解析

做涨停盘口的历史回放,第一步不是画图,而是把行情源给出的原始字段“翻译”成可计算、可标注的盘口状态。很多回放系统之所以在复盘时对不上号,根源往往不在策略逻辑,而在于对涨停价、封单量、封单金额、买一队列、卖一至卖五挂单以及逐笔委托、逐笔成交这几组字段的口径理解不一致。本节围绕这些字段逐一拆解,并给出它们与事件标注之间的映射关系。

一、涨停价:不是现价,而是当日价格约束的上边界

涨停价是交易所按前收盘价与涨跌幅限制计算出的当日最高可成交价格。以主板为例,涨停价 = 前收盘价 × (1 + 10%),结果按价格最小变动单位四舍五入。这里有两个容易踩坑的细节:其一,涨停价依赖“前收盘价”这一基准,除权除息日基准会变,回放时必须使用当日实际生效的前收盘价,而不能用上一交易日收盘价;其二,不同板块涨跌幅不同(主板 10%、创业板与科创板 20%、ST 类 5%),回放数据里若混入不同板块标的,必须按标的所属板块分别计算,不能统一套用 10%。

在数据结构上,涨停价通常作为“派生字段”存在:行情快照里往往只给最新价、买卖五档,涨停价需要由回放系统依据前收盘价和板块规则自行推算,并与快照中的最新价比较,判断是否触及涨停。判断条件应写成“最新价 ≥ 涨停价 − 半个最小变动单位”,而不是严格相等,以规避浮点误差和四舍五入差异。

二、封单量、封单金额与买一队列

当个股封住涨停时,卖盘被扫空,买一价位即为涨停价,买一挂单量就是通常所说的“封单量”。封单金额 = 封单量 × 涨停价,它比封单量更能横向比较不同价位个股的封板强度。但要注意,买一队列并不等于封单量:买一队列是涨停价上所有未成交买单的集合,包含不同时间进入、不同委托类型的订单,封单量只是这个队列的总量。回放时若只记录总量,就无法还原“谁先谁后、大单是否撤走”的过程,因此需要保留逐笔委托来重建队列。

买一队列的还原逻辑是:以涨停价为键,维护一个按委托时间排序的订单列表;逐笔委托中价格等于涨停价、方向为买的记录入队,撤单记录出队,成交记录按成交量扣减队首(或按交易所撮合规则扣减)。队列的“厚度变化”和“队首大单是否消失”是判断封板稳定性的关键信号。

三、卖一至卖五挂单:涨停状态下的“空档”证据

封住涨停时,卖一至卖五通常全部为空,这是涨停状态最直接的盘口特征。但回放中不能只看“是否为空”,还要看“从有到空”的瞬间:卖盘被扫空的那一笔成交,往往就是封板事件的时间戳。反之,若卖一重新出现挂单,说明封板被打开,这是炸板事件的起点。因此卖一至卖五字段在回放中的价值,主要在于捕捉“卖盘消失”与“卖盘重现”这两个状态切换点,而不是静态展示五档价格。

四、逐笔委托与逐笔成交:事件标注的原始素材

逐笔委托记录每一笔委托的进入、撤单与成交,字段通常包括委托编号、时间、价格、数量、方向、委托类型;逐笔成交记录每一笔撮合结果,字段包括成交编号、时间、价格、数量、买卖方向。两者结合才能还原“某笔大单挂入后是否被撤、是否被吃掉”。事件标注正是建立在这些原始记录之上:封板事件对应“卖盘扫空 + 买一队列在涨停价形成”,炸板事件对应“卖一重现挂单 + 涨停价买一队列快速消耗”,撤单事件对应“涨停价买一队列中某委托编号的撤单记录”。

涨停盘口字段 → 盘口状态 → 事件标注 映射链 原始行情字段 前收盘价 / 板块规则 最新价、买一价、买一量 卖一至卖五价与量 逐笔委托、逐笔成交 时间戳(毫秒级) 派生计算字段 涨停价 = 前收 × (1+幅度) 封单量 = 买一量(涨停价) 封单金额 = 封单量 × 涨停价 买一队列(按委托时间排序) 卖盘空档标志位 盘口状态 未涨停 触及涨停(卖盘扫空) 封板稳定(队列增厚) 封板松动(队列消耗) 炸板(卖一重现) 事件标注 封板事件 加封事件 撤单事件 炸板事件 回封事件 盘口状态与事件标注的判定规则(示例口径) 盘口状态 判定条件(字段组合) 对应事件标注 触及涨停 最新价 ≥ 涨停价−半档,且卖一至卖五量为 0 封板事件(记录时间戳) 封板稳定 买一队列总量持续增加,无大额撤单 加封事件 封板松动 涨停价买一队列出现撤单或大额成交扣减 撤单事件 / 消耗事件 炸板 卖一重新出现挂单,最新价回落至涨停价下方 炸板事件 回封 炸板后卖盘再次扫空,买一队列在涨停价重建 回封事件

五、字段口径统一:回放系统最容易出错的地方

把上述字段接入回放系统时,建议先固定三件事。第一,时间基准统一到毫秒级时间戳,快照与逐笔数据必须使用同一时钟源,否则“卖盘扫空”与“买一队列形成”会被错判为两个不同时刻。第二,数量单位统一为“股”或“手”,封单量与逐笔委托数量必须同单位,否则封单金额会差 100 倍。第三,涨停价判定统一使用“≥ 涨停价 − 半档”的容差写法,并在回放日志中记录每次判定的实际最新价与涨停价,便于事后核对。

一个常见的实操做法是:先按交易日加载快照序列,逐条计算涨停价并标记“是否触及涨停”;再加载逐笔委托与逐笔成交,按委托编号重建涨停价买一队列;最后用队列总量变化和卖一挂单状态,按上图的判定规则打上事件标签。这样得到的标注结果,既能回答“几点几分封板”,也能回答“封板后队列是增厚还是被消耗”,为后续的封板质量分析提供结构化输入。

回放校验小技巧:随机抽取若干个封板事件,用逐笔成交中“卖盘最后一笔成交价等于涨停价”的时间戳,与快照中“卖一至卖五首次全空”的时间戳比对,两者偏差应在 1 秒以内;若偏差过大,优先检查快照与逐笔数据的时间基准是否一致。

需要强调的是,封单量、封单金额、买一队列三者虽然同源,但用途不同:封单量适合看绝对规模,封单金额适合跨标的横向比较,买一队列适合看结构与稳定性。事件标注应优先绑定到“队列结构变化”上,而不是只绑定总量数字,否则容易把“大单撤走又被小单补上”误判为封板稳定。把字段口径、派生计算和判定规则三者固定下来,涨停盘口的历史回放才具备可复现、可对比的基础。