2. 涨停板撤单率与封单量的联动计算

把“撤单率”和“封单量”放到同一时间轴上

本例要解决的核心问题是:涨停期间撤单率升高,是否真的对应封单量下降?单看某一时刻的撤单率没有意义,必须把两个指标按同一时间窗口对齐,才能看出“撤单率突增 → 封单量骤降”的联动关系。为此需要先明确三个计算口径,否则对齐结果会失真。

  • 撤单率 = 窗口内撤单量 ÷ 窗口内委托总量(按股数计,也可按金额计)。分母用“委托总量”而非“当前封单量”,避免封单量本身变化干扰比率。
  • 封单量 = 某时刻买一价位(涨停价)上的未成交委托余量,取窗口末的瞬时快照值。
  • 时间窗口:本例采用 30 秒等长窗口,窗口边界对齐到整分整秒,便于与逐笔流水的时间戳直接分桶。

下面用一段可运行的 Python 脚本完成分桶、计算与对齐。示例数据为教学构造的涨停期间流水,仅用于演示计算逻辑,不代表任何真实个股。

import pandas as pd

# 教学示例:涨停期间逐笔委托与撤单流水(时间戳、方向、数量、类型)
# type: 'order' 为新增委托,'cancel' 为撤单;price 均为涨停价 10.00
raw = [
    ("09:31:05", "order",  80000), ("09:31:18", "order",  50000),
    ("09:31:40", "cancel", 60000), ("09:31:52", "order",  30000),
    ("09:32:03", "order",  90000), ("09:32:15", "cancel", 120000),
    ("09:32:28", "order",  40000), ("09:32:44", "cancel", 150000),
    ("09:33:02", "order",  20000), ("09:33:20", "cancel", 180000),
    ("09:33:35", "order",  10000), ("09:33:50", "cancel", 160000),
]
df = pd.DataFrame(raw, columns=["ts", "type", "qty"])
df["ts"] = pd.to_datetime("2024-06-03 " + df["ts"])

# 30 秒等长窗口分桶
df["win"] = df["ts"].dt.floor("30s")

# 按窗口聚合:委托量、撤单量
g = df.groupby(["win", "type"])["qty"].sum().unstack(fill_value=0)
g = g.rename(columns={"order": "order_qty", "cancel": "cancel_qty"})
g["cancel_rate"] = (g["cancel_qty"] / g["order_qty"]).round(3)

# 封单量快照:窗口末的累计未撤委托余量(教学简化模型)
g["seal_qty"] = (g["order_qty"] - g["cancel_qty"]).cumsum()
g["seal_drop"] = g["seal_qty"].diff().fillna(0)

print(g[["order_qty", "cancel_qty", "cancel_rate", "seal_qty", "seal_drop"]])

运行后得到的关键对齐结果如下(示例输出,由上述输入直接推出):

窗口委托量撤单量撤单率封单量封单变化
09:31:0013000000.000130000—
09:31:3030000600002.000100000-30000
09:32:001300001200000.923110000+10000
09:32:30400001500003.7500-110000
09:33:00200001800009.000-160000-160000
09:33:301000016000016.000-310000-150000
撤单率大于 1 说明该窗口撤单量超过新增委托量,封单量出现负值,意味着封单已被撤穿、涨停板实际已打开。这是联动计算中最需要警惕的信号,不能简单当作数值异常忽略。

从对齐结果可以读出联动规律:09:31:30 窗口撤单率首次跳升到 2.0,封单量同步减少 3 万;到 09:32:30 撤单率升至 3.75,封单量直接归零;此后撤单率持续放大,封单量转为负值。撤单率突增与封单量骤降在时间上高度同步,且撤单率越极端,封单量下降越剧烈。

撤单率突增与封单量骤降的时间对齐 09:31:00 09:31:30 09:32:00 09:32:30 09:33:00 09:33:30 0.0 2.0 0.92 3.75 9.0 16.0 撤单率 13万 10万 11万 0 -16万 -31万 封单量 撤单率突增窗口(≥3.75) 封单量同步骤降甚至转负 → 涨停板被撤穿,开板风险高 撤单率(柱) 封单量(折线)

对齐时的三个判断要点

  1. 先看撤单率是否“突增”:以相邻窗口撤单率环比翻倍或绝对增量超过 1.0 作为突增初筛条件,本例 09:31:30 与 09:32:30 均满足。
  2. 再看封单量是否“同步骤降”:突增窗口的封单变化为负且降幅明显(本例 -3 万、-11 万),若撤单率升高但封单量不降,说明撤单被新增委托对冲,风险等级较低。
  3. 最后看封单量是否转负:一旦封单量 ≤ 0,说明涨停价买盘已被撤空,属于最高优先级异常,应直接标记开板。

按上述口径,本例可判定 09:32:30 起进入高风险区间,09:33:00 后封单量转负,涨停板实质已打开。计算时务必保证委托与撤单使用同一时间戳基准、同一数量单位,否则撤单率与封单量的对齐会整体错位。