2. 封单数据的采集与清洗
横向比较连板股票的封单强弱,第一步不是画图,而是把“封单”这个原始字段变成一张干净、对齐、可比较的数据表。很多初学者直接打开行情软件截图,看到买一位置挂着几十万手就认为封单强,却忽略了不同股票的流通盘、股价、涨停时间、封单撤换情况完全不同。若数据本身没有经过采集规范化和清洗,后续任何强弱排序都不可信。本节围绕“取什么、怎么取、怎么对齐、怎么处理脏数据”四个环节展开,并给出可直接套用的字段结构与判断规则。
一、明确采集对象与字段口径
封单强弱比较所需的原始数据,至少应覆盖以下字段:股票代码、股票名称、交易日、涨停价、最新价、封单量(手)、封单金额(元)、首次涨停时间、最后封板时间、开板次数、成交额、流通市值、换手率。其中“封单量”与“封单金额”是两个不同口径:封单量是买一价位挂出的手数,封单金额等于封单量×100×涨停价,后者剔除了股价高低的影响,更适合横向比较。例如A股股价5元、封单量20万手,封单金额约1亿元;B股股价50元、封单量3万手,封单金额约1.5亿元,若只看手数会误判A更强。
采集来源通常有两类。第一类是行情软件导出,如同花顺、通达信、东方财富的“涨停板行情”或“封单额”排序页面,可导出CSV;优点是直观、含人工标注的涨停时间,缺点是字段名不统一、盘中数据为快照、收盘后可能不再更新。第二类是数据接口,如通过行情API按代码批量请求实时或历史快照,优点是字段规范、可定时采集,缺点是需要处理请求频率限制与字段映射。无论哪种来源,都应在采集时记录“采集时间戳”,因为封单是随时间变化的量,14:55的封单与09:35的封单含义完全不同。
二、数据对齐:让不同来源说同一种语言
多源数据合并时最常见的错误是“按行拼接”而非“按主键对齐”。正确做法是以“交易日+股票代码”作为联合主键进行左连接或全连接,而不是简单地把两个表格上下拼在一起。字段名需要建立映射表,例如行情软件导出的“封单量(手)”映射为 seal_vol,“封成比”映射为 seal_ratio;单位也要统一,手与股之间乘以100,万元与元之间乘以10000。时间字段应统一为 YYYY-MM-DD HH:MM:SS 格式,避免“9:35”与“09:35:00”无法排序。
另一个对齐要点是“时点对齐”。若封单数据取自收盘快照,而成交额取自全天累计,两者尚可配合使用;但若封单取自10:00快照、涨停时间取自收盘统计,则封单与涨停时间不在同一时点,比较会失真。实践中建议统一采用“收盘封单快照”作为横向比较基准,并在字段中注明 snapshot_time,保证所有股票在同一时点口径下比较。
三、缺失值处理与异常值识别
缺失值分三种情况区别对待。第一种是“非涨停股”导致的封单为空,这类记录应在筛选阶段就排除,不应填补。第二种是接口未返回某字段,如部分股票缺少“首次涨停时间”,此时可用“最后封板时间”近似替代,或标记为缺失并在比较时降权,而不是填0——填0会把“未知”误判为“极弱”。第三种是停牌、新股上市首日等特殊状态,应单独标记 status 字段后剔除。
异常值识别要结合业务逻辑,而非只看统计分布。常见异常包括:封单量为0却标记为涨停(多为数据延迟或字段错位);封单金额远大于流通市值(单位错误,如把“万元”当“元”);封单量出现负数(接口异常);同一股票同一交易日出现两条不同封单记录(快照重复采集)。可用如下规则做初筛:封单金额/流通市值大于1视为可疑;封单量为负直接置空;同一主键重复记录保留时间戳最新的一条。对识别出的异常,应保留原始值到 raw_seal_vol 字段,清洗后的值写入 seal_vol_clean,保证可追溯。
四、从清洗结果到可比指标
清洗完成后,建议直接派生两个横向比较指标:封单市值比 = 封单金额 ÷ 流通市值,以及封单成交比 = 封单金额 ÷ 当日成交额。前者衡量封单相对盘子的大小,后者衡量封单相对当日换手的坚决程度。以示例数据说明:某股封单金额1.02亿元、流通市值38亿元,封单市值比约2.68%;另一股封单0.86亿元、流通市值52亿元,封单市值比约1.65%。在封板时间接近的前提下,前者封单相对更强。这两个指标都建立在“金额口径”和“同一时点快照”之上,正是清洗环节要保障的。
最后给出一份可直接套用的采集检查清单,用于每次横向比较前自检:主键是否为“交易日+代码”且无重复;封单金额是否已由手数换算并乘以涨停价;时间字段是否统一格式且与快照时点一致;缺失值是否已区分“非涨停”与“接口缺失”;异常值是否已标记并保留原始值;是否已剔除停牌、新股首日等特殊状态。六项全部通过,这张表才具备横向比较封单强弱的资格。