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:00 | 130000 | 0 | 0.000 | 130000 | — |
| 09:31:30 | 30000 | 60000 | 2.000 | 100000 | -30000 |
| 09:32:00 | 130000 | 120000 | 0.923 | 110000 | +10000 |
| 09:32:30 | 40000 | 150000 | 3.750 | 0 | -110000 |
| 09:33:00 | 20000 | 180000 | 9.000 | -160000 | -160000 |
| 09:33:30 | 10000 | 160000 | 16.000 | -310000 | -150000 |
撤单率大于 1 说明该窗口撤单量超过新增委托量,封单量出现负值,意味着封单已被撤穿、涨停板实际已打开。这是联动计算中最需要警惕的信号,不能简单当作数值异常忽略。
从对齐结果可以读出联动规律:09:31:30 窗口撤单率首次跳升到 2.0,封单量同步减少 3 万;到 09:32:30 撤单率升至 3.75,封单量直接归零;此后撤单率持续放大,封单量转为负值。撤单率突增与封单量骤降在时间上高度同步,且撤单率越极端,封单量下降越剧烈。
对齐时的三个判断要点
- 先看撤单率是否“突增”:以相邻窗口撤单率环比翻倍或绝对增量超过 1.0 作为突增初筛条件,本例 09:31:30 与 09:32:30 均满足。
- 再看封单量是否“同步骤降”:突增窗口的封单变化为负且降幅明显(本例 -3 万、-11 万),若撤单率升高但封单量不降,说明撤单被新增委托对冲,风险等级较低。
- 最后看封单量是否转负:一旦封单量 ≤ 0,说明涨停价买盘已被撤空,属于最高优先级异常,应直接标记开板。
按上述口径,本例可判定 09:32:30 起进入高风险区间,09:33:00 后封单量转负,涨停板实质已打开。计算时务必保证委托与撤单使用同一时间戳基准、同一数量单位,否则撤单率与封单量的对齐会整体错位。