2. 高频成交数据基础
要识别高频成交簇,第一步不是写算法,而是把数据“看透”。高频成交簇本质上是“在极短时间窗口内、围绕相近价格、由连续多笔成交构成的密集事件”,因此它天然依赖两类底层数据:逐笔成交数据(Tick/Trade)与快照数据(Snapshot/Quote)。前者回答“每一笔成交发生了什么”,后者回答“在每个时刻盘口长什么样”。二者结构不同、时间语义不同,混用或误读会直接导致簇识别结果失真。
一、逐笔成交数据的结构与字段含义
逐笔成交数据以“一笔成交”为一条记录,是构建成交簇最核心的原料。不同数据源字段命名略有差异,但核心字段基本一致,可归纳为下表所示的语义层次。
| 字段类别 | 典型字段 | 含义与在簇识别中的作用 |
|---|---|---|
| 标的标识 | symbol / code | 区分不同证券,簇识别必须按标的独立计算,不可跨标的聚合。 |
| 时间 | trade_time / timestamp | 成交发生时刻,决定窗口切分与簇内间隔判断,精度问题最集中。 |
| 价格 | price | 成交价,用于判断簇内价格是否“相近”,以及区分主动买卖方向。 |
| 数量 | volume / qty | 成交股数或手数,用于度量簇的强度与单笔规模。 |
| 金额 | amount / turnover | 价格×数量,用于跨价位比较簇的成交额权重。 |
| 方向 | side / bs_flag | 主动买、主动卖或未知,决定簇的方向属性与后续信号含义。 |
| 序号 | seq / trade_index | 同一时间戳内的排序依据,解决“同刻多笔”的先后问题。 |
需要特别强调方向字段。很多数据源并不直接给出主动买卖标志,而是需要依据成交价与当时买一/卖一价的关系推断:成交价等于卖一价通常视为主动买,等于买一价视为主动卖,介于两者之间则需结合逐笔委托或规则判定。若方向字段缺失或推断错误,成交簇的“买方簇/卖方簇”标签就会整体偏移,这是实盘中非常隐蔽的错误来源。
二、快照数据的结构与字段含义
快照数据是按固定频率(如每3秒、每500毫秒)对盘口状态的一次“拍照”,一条记录对应一个时刻的完整盘口切片。其核心字段包括:时间戳、最新价、成交量累计值、成交额累计值,以及买一至买N、卖一至卖N的价位与挂单量。
快照与逐笔的关系需要厘清:快照中的“累计成交量”是单调递增的累计值,相邻两期之差才是该区间内的成交量;而逐笔成交是逐条明细。二者可以互相校验——用逐笔成交量求和去比对快照累计量差值,是发现数据缺失、重复、错位的常用手段。此外,快照的买卖盘口为逐笔成交提供了“当时可成交价位”的参照,是判断主动方向与评估簇冲击成本的重要背景。
三、时间戳精度:簇识别的“隐形地基”
成交簇的判定高度依赖“时间间隔”这一参数,例如“相邻成交间隔小于300毫秒视为同一簇”。因此时间戳精度直接决定窗口边界是否可靠。实践中需关注三点:
- 精度等级:常见有秒级、毫秒级、微秒级。秒级数据无法支撑毫秒级簇划分,只能退化为“同秒聚合”,簇的粒度会明显变粗。
- 同刻多笔:同一时间戳下可能有多笔成交,必须借助序号字段排序,否则簇内顺序错乱会影响方向与强度统计。
- 时钟基准:逐笔与快照若来自不同系统,时钟可能不同步,导致“成交发生在快照之前还是之后”判断错误。应统一到同一时间基准,并明确时间戳是“成交时刻”还是“入库时刻”。
四、常见数据质量问题与处理思路
真实数据几乎不可能“干净”。以下是高频成交数据中最常见的几类问题及其识别与处理方式:
| 问题类型 | 典型表现 | 识别与处理 |
|---|---|---|
| 缺失 | 某段时间无记录,或快照累计量跳变 | 用累计量差值反推应有成交量,与逐笔求和比对,缺口标记为缺失区间,簇识别时降权或剔除。 |
| 重复 | 同一笔成交出现两次 | 按“时间+价格+数量+序号”去重,避免簇强度被虚增。 |
| 错位 | 时间戳乱序或跨日 | 按时间与序号重排,检查跨日边界,防止窗口跨越非交易时段。 |
| 异常值 | 价格为0、数量为0或极端偏离 | 设定合理价格区间与数量上限过滤,异常记录单独留存备查。 |
| 方向缺失 | side字段为空或全为未知 | 用成交价与盘口买卖一价关系推断,并抽样人工核对。 |
把上述基础打牢后,逐笔成交提供“点”,快照提供“面”,时间戳提供“轴”,数据质量校验提供“可信度”。只有这四者对齐,后续的时间窗口分割与高频成交簇识别才有稳定的输入,簇的边界、强度与方向才具备可解释性和可复现性。