2. 逐笔数据基础与跨股票异质性

逐笔特征标准化的前提,是先看清原始逐笔数据长什么样,以及不同股票之间到底在哪些维度上"不一样"。如果忽略这种异质性,直接把一只股票上训练出的特征阈值套到另一只股票上,模型很可能把"正常的流动性差异"误判为"异常信号"。本节从数据结构出发,逐层拆解价格水平、波动率、流动性三类差异如何传导到特征分布上。

一、逐笔成交与委托数据的结构

沪深市场的逐笔数据通常分为两类:逐笔成交(Trade)与逐笔委托(Order)。逐笔成交记录每一笔撮合成交,核心字段包括成交时间(精确到毫秒或十毫秒)、证券代码、成交价格、成交数量、成交金额、买卖方向标识(主动买/主动卖,部分数据源以内外盘或 BS 标志给出)以及成交编号。逐笔委托记录每一笔进入撮合队列的委托,核心字段包括委托时间、委托价格、委托数量、买卖方向、委托类型(限价/市价/本方最优等)以及委托编号。

两类数据的关键差别在于"事件语义":成交是已发生的撮合结果,委托是尚未成交的意图。因此由逐笔成交可以派生主动买卖量、大单占比、成交价差等"已实现"特征;由逐笔委托可以派生委托簿不平衡、撤单率、委托价格相对盘口的偏移等"意图"特征。标准化时必须区分这两类来源,因为它们的量纲和分布形态差异很大——成交量是正整数且右偏严重,委托价格偏移则可能围绕零对称分布。

一个常被忽视的细节是时间戳对齐。不同数据源的时间精度可能是毫秒、十毫秒甚至秒级快照,同一秒内的事件顺序依赖编号而非时间。做跨股票特征时,应统一到相同的时间粒度(例如统一聚合到 3 秒或 10 秒窗口),否则高活跃股票在细粒度窗口内事件密集、低活跃股票事件稀疏,窗口内样本量本身就成了混杂因素。

二、跨股票异质性的三个主要来源

价格水平差异。高价股与低价股在同一"最小变动价位"下,相对价格精度完全不同。以 A 股 0.01 元的最小报价单位为例,10 元股票的 tick 相对幅度是 0.1%,而 100 元股票只有 0.01%。这直接导致高价股的买卖价差(以相对值计)系统性更小、价格序列更"平滑",而低价股的价格跳跃更粗糙。若用绝对价差做特征,高价股天然数值更大;若用相对价差,低价股又因离散化而呈现阶梯状分布。

波动率差异。不同股票的日内已实现波动率可能相差数倍。波动率高的股票,其收益率分布尾部更厚,成交量与价格变化的联动更强。对成交量取对数、对收益率做波动率归一化(如除以滚动标准差),是缓解这一差异的常用手段,但归一化窗口的选择本身会引入新的股票间差异。

流动性差异。流动性体现在盘口深度、成交频率、换手率和冲击成本上。高流动性股票盘口挂单厚、成交密集、大单对价格冲击小;低流动性股票则相反。流动性差异会让"大单"的绝对阈值失效——同样是 50 万元的单笔成交,对一只日成交额数亿元的股票是常态,对一只日成交额几千万元的股票则是显著异常。

逐笔数据 → 特征 → 跨股票异质性传导 逐笔成交 Trade 时间·价格·数量·方向 成交编号 逐笔委托 Order 时间·价格·数量·方向 委托类型·委托编号 已实现类特征 主动买卖量·大单占比 成交价差·成交额 意图类特征 委托簿不平衡·撤单率 委托价相对盘口偏移 价格水平差异 tick 相对幅度:0.1% vs 0.01% 波动率差异 日内已实现波动率相差数倍 流动性差异 盘口深度·成交频率·冲击成本 对特征分布的影响 • 绝对量纲特征:高价/高流动性股票数值系统性偏大 → 需对数或分位数变换 • 相对量纲特征:低价股受 tick 离散化影响呈阶梯分布 → 需按价格分层校准 • 事件计数特征:活跃股窗口内样本多、稀疏股样本少 → 需统一时间粒度或按事件数归一

三、异质性如何改变特征分布

把上述差异落到具体特征上,可以归纳为三种典型影响。第一类是位置漂移:绝对量纲特征(成交额、委托量、价差绝对值)的均值随股票规模系统性变化,直接做 z-score 后,大盘股的特征值仍可能整体偏高。第二类是形状改变:低价股的相对价差因 tick 离散化呈现多峰或阶梯分布,高价股则接近连续分布,同一变换无法同时适配。第三类是稀疏性差异:低流动性股票在固定时间窗口内可能只有寥寥数笔成交,导致窗口统计量方差极大,甚至出现空窗口。

因此,跨股票标准化的核心思路不是"用一套参数抹平一切",而是先按异质性来源分层,再在层内做可比变换。常见做法包括:对金额和数量类特征取对数;对价格类特征转为相对值(除以中间价或滚动均价);对计数类特征按窗口内事件总数归一;对分布形状差异明显的特征,采用按价格分组的经验分位数映射(将原始值映射到 [0,1] 的分位区间),使不同股票的同名特征在各自分布上具有相同的相对位置。

四、一个可操作的分层标准化示例

假设我们要为三只示例股票构造"单笔成交金额强度"特征,并做跨股票可比化。示例参数如下(均为教学假设,非实测):股票 A 价格约 8 元、日成交额 2 亿元;股票 B 价格约 45 元、日成交额 15 亿元;股票 C 价格约 120 元、日成交额 6 亿元。直接使用单笔成交金额的均值,B 会显著高于 A 和 C,但这主要反映规模而非"大单异常程度"。

步骤1  按股票分别计算单笔成交金额 amt 的滚动 20 日经验分布
步骤2  对每笔成交求分位值 q = F_stock(amt),映射到 [0,1]
步骤3  以 q 替代原始 amt 作为特征输入
步骤4  校验:各股票 q 的均值应接近 0.5,方差接近均匀分布理论值 1/12
步骤5  若某股票 q 的分布明显偏离均匀(如大量堆积在 0.9 以上),
       检查是否存在涨跌停、集合竞价等特殊时段未剔除

这一流程的关键判断依据是分位映射后的分布形状:如果映射正确,三只股票的特征都应近似均匀分布,跨股票的均值与方差可比;如果某只股票仍出现尖峰,通常说明其原始分布存在截断(如低价股受 tick 约束)或特殊时段污染,需要回到数据清洗环节处理,而不是继续调标准化参数。

做跨股票特征时,先问三个问题:这个特征带绝对量纲吗?它的分布形状会随价格水平改变吗?它的样本密度会随流动性改变吗?三个问题的答案基本决定了应该用对数变换、相对化、分位映射还是按事件数归一。

需要强调的是,分层标准化的目标是"可比",不是"相同"。过度归一化会抹掉股票间真实存在的流动性溢价与波动率差异,而这些差异本身可能正是预测信号。合理的做法是保留一部分绝对水平信息(例如把股票规模、波动率作为额外特征一并输入),让模型自己学习如何在可比特征与原始水平之间权衡。