3. 未匹配量的数据获取与清洗
集合竞价未匹配量分析的第一步,不是画图,也不是下结论,而是把“未匹配量”这一列数据可靠地拿到手,并处理成可用于比较和计算的干净序列。很多分析结论失真,根源往往不在判断逻辑,而在数据本身:字段含义理解错、时间点取错、缺失值被当成零、异常值未识别。本节围绕数据获取与清洗展开,重点讲清楚从哪里取、取什么、怎么判断脏数据、怎么处理。
一、先明确要取的字段与口径
集合竞价阶段(以A股为例,9:15—9:25)行情软件通常提供“匹配量”“未匹配量”“虚拟匹配价”“虚拟匹配量”等字段。不同软件对“未匹配量”的定义可能不同,常见有两种口径:一是未匹配量指当前虚拟匹配价下,买方或卖方未能成交的剩余委托量(通常带方向,如“未匹配买入量/未匹配卖出量”);二是部分软件只给出一个净额或绝对值。取数前必须确认口径,否则后续“未匹配量大小代表压力方向”的判断会完全反过来。
建议至少取以下字段:交易日期、证券代码、竞价时间点(如9:20、9:24、9:25)、虚拟匹配价、匹配量、未匹配买入量、未匹配卖出量、未匹配量方向标识。若接口只提供净未匹配量,则需在文档中记录“净额=买入未匹配−卖出未匹配”或相反的定义,并在全课程中保持一致。
二、数据获取的两条路径
路径一:行情软件导出。多数软件支持将集合竞价明细或分时快照导出为CSV/Excel。操作要点是:选择“集合竞价”时段而非连续竞价;导出字段勾选完整;注意导出的是“快照”还是“逐笔”。快照类数据每个时间点一行,适合做时间序列;逐笔类数据需要按时间聚合。导出后第一时间检查行数是否与交易日、时间点数量吻合,例如某日9:20—9:25每5秒一个点,理论上应有约60行,若只有几行说明导出范围选错。
路径二:数据接口提取。常见方式是通过行情API或本地数据库(如Level-1快照、Level-2逐笔委托)按字段拉取。以Python伪代码示意取数与初步整理:
import pandas as pd
# 假设 df 为接口返回的集合竞价快照
# 字段:code, trade_date, snap_time, match_price, match_vol,
# unmatched_buy_vol, unmatched_sell_vol
df["snap_time"] = pd.to_datetime(df["snap_time"])
df = df.sort_values(["code", "trade_date", "snap_time"])
# 统一未匹配量方向:净未匹配量 = 买入未匹配 - 卖出未匹配
df["net_unmatched"] = df["unmatched_buy_vol"] - df["unmatched_sell_vol"]
# 只保留 9:15—9:25 的竞价快照
df = df[(df["snap_time"].dt.time >= pd.Timestamp("09:15").time()) &
(df["snap_time"].dt.time <= pd.Timestamp("09:25").time())]
接口取数要特别注意两点:一是时间戳时区与格式,避免把9:25的数据错标成9:30;二是字段单位(股/手),不同接口可能不一致,混用会导致量级错误。
三、缺失值的识别与处理
缺失值在竞价数据中很常见,原因包括:该时间点无成交也无有效委托、接口限流丢包、软件导出空单元格、停牌或临时停牌。处理原则是先区分“真缺失”和“假缺失”:若某时间点确实没有未匹配量(例如9:15刚开盘委托极少),记为零是合理的;若是接口丢包导致整段缺失,则不能简单补零,否则会人为制造“无压力”的假象。
实操中可按证券—日期分组检查时间点连续性:若相邻快照间隔明显大于正常采样间隔(如正常5秒、出现60秒空档),标记为疑似丢包;若某字段为空但同组其他字段正常,标记为字段级缺失。对字段级缺失,可用前向填充(ffill)并限制填充步数,或直接剔除该时间点;对整段丢包,建议剔除该证券当日数据或从备用源补取,而不是插值。插值只适用于连续且变化平缓的匹配价,不适合未匹配量这种可能突变的量。
四、异常值的判定与处置
未匹配量的异常值通常表现为:数量级远超当日匹配量、方向与价格明显矛盾、同一时间点重复记录、负值(若口径不允许)。判定可结合业务规则与统计规则:业务上,未匹配量一般不应为负(除非接口用负号表示卖出方向,此时需先统一符号);统计上,可用同一证券近N日同时点未匹配量的中位数与MAD(中位数绝对偏差)做稳健离群判断,避免均值受极端值拉偏。
处置方式要分情况:重复记录直接去重(按代码+日期+时间点保留一条);明显录入错误的负值按口径修正符号或置为缺失;数量级异常的记录先核对原始接口再决定剔除,不可盲目截断。所有被修改、剔除的记录应保留清洗日志,记录代码、日期、时间点、原值、处理方式和原因,便于复核。
五、清洗后的质量检查
清洗完成不等于可用。建议做三项快速检查:其一,抽样核对,随机抽3—5只证券,把清洗后的未匹配量与原始导出文件逐点比对,确认没有错位或单位错误;其二,分布检查,看同一时点全市场未匹配量的分布是否出现明显双峰或极端长尾,若有,往往说明混入了不同口径的数据源;其三,时间序列连续性检查,确认每只证券在9:20—9:25的关键时点都有记录,因为9:20后不可撤单,这一段的未匹配量对价格压力判断最有价值。
把数据获取与清洗做扎实,后续的未匹配量趋势、方向变化与价格压力的对应关系才有可靠基础。清洗阶段多花十分钟核对口径与日志,往往能避免分析阶段数小时的返工。