1. 涨停封板瞬间的逐笔成交结构拆解
封板瞬间的逐笔结构:先定口径,再切窗口
本节只做一件事:把一只当日首次触及涨停的个股,在封板瞬间前后各30秒的逐笔成交切成两段,用同一套口径算出成交笔数、单笔均量、主动买/主动卖方向占比,再对比“封板前最后一波扫单”与“封板后首笔成交”的结构差异。逐笔数据的关键在于方向判定与窗口切分,口径不统一,后面的对比就没有意义。
方向判定采用交易所逐笔成交常见的主动方口径:成交价等于卖方委托价(买方主动吃单)记为主动买(B);成交价等于买方委托价(卖方主动砸单)记为主动卖(S);若逐笔数据带 BS 标志则直接采用,不带标志时用相邻买一/卖一价近似判定,并在结果中注明判定方式。窗口以首次封板时刻 T0 为界:前窗 [T0−30s, T0),后窗 (T0, T0+30s]。封板后价格被锁在涨停价,主动卖方向通常骤减,这是结构差异的核心来源。
用逐笔数据算出两窗指标
下面给出可直接运行的 Python 示例。输入是一份逐笔成交表(字段:时间、价格、成交量、方向),先按 T0 切窗,再分别统计笔数、均量与主动买占比。示例数据为教学构造,用于演示计算路径,不代表任何真实个股。
import pandas as pd
# 逐笔成交示例(教学构造):time 为秒偏移,dir 为 B/S
ticks = pd.DataFrame({
"time": [-28, -25, -22, -19, -15, -12, -8, -5, -2, 1, 4, 9, 15, 22, 28],
"price": [10.00, 10.02, 10.05, 10.08, 10.10, 10.10, 10.10, 10.10, 10.10, 10.10, 10.10, 10.10, 10.10, 10.10, 10.10],
"vol": [300, 500, 800, 1200, 2000, 1500, 900, 600, 400, 200, 150, 100, 80, 60, 50],
"dir": ["B", "B", "B", "B", "B", "B", "B", "B", "B", "B", "S", "B", "S", "B", "S"],
})
T0 = 0
pre = ticks[(ticks.time >= T0-30) & (ticks.time < T0)]
post = ticks[(ticks.time > T0) & (ticks.time <= T0+30)]
def stats(df):
n = len(df)
avg = df.vol.mean() if n else 0
buy_ratio = df.loc[df.dir=="B","vol"].sum() / df.vol.sum() if df.vol.sum() else 0
return n, round(avg,1), round(buy_ratio,3)
print("前窗:", stats(pre))
print("后窗:", stats(post))
按示例数据运行,前窗为 9 笔、单笔均量约 911、主动买占比 1.0;后窗为 6 笔、单笔均量约 107、主动买占比约 0.72。前窗呈现“笔数多、均量大、几乎全为主动买”的扫单特征,后窗笔数与均量明显收缩,符合封板后撮合稀疏的预期。实际使用时把 ticks 换成所选个股的逐笔导出数据,并确认时间字段已换算为相对 T0 的秒偏移。
结果判读与记录
把两窗指标并列后,重点看三个差异:笔数是否骤降、单笔均量是否收缩、主动买占比是否维持高位。若前窗主动买占比高但均量并不大,说明扫单以碎单堆积为主,封板质量需结合封单量进一步判断;若后窗仍出现较大主动卖单,则封板可能不牢。建议按下表记录,便于后续案例横向比较。
| 窗口 | 成交笔数 | 单笔均量 | 主动买占比 | 结构判读 |
|---|---|---|---|---|
| 前窗 [T0−30s, T0) | 9 | 约 911 | 1.00 | 连续大单扫货 |
| 后窗 (T0, T0+30s] | 6 | 约 107 | 约 0.72 | 撮合稀疏、封板锁定 |
完成本节任务的最低验证标准:能对任一只首次涨停个股导出逐笔数据、正确切出前后30秒窗口、算出三项指标,并指出前窗扫单与后窗首笔在笔数与均量上的方向性差异。