2. 数据质量排障

交易执行成本估计的输入几乎全部来自成交回报(Fill)与订单事件(Order Event)。一旦成交数据本身存在缺失、重复或时间戳错误,后续的到达价格基准、VWAP 基准、滑点、实现价差(Implementation Shortfall)分解都会系统性失真。本节不讨论估计模型本身,而是聚焦“脏数据如何污染成本数字”,并给出一套可复现的排查与修复路径。

三类缺陷如何扭曲成本估计

成交缺失最直接的后果是成交量被低估。假设某笔母单分 5 次成交,实际共买入 10000 股,但回报中丢失了其中一笔 3000 股,则计算出的成交均价会偏向剩余 4 笔的价格分布,且成交量加权基准(如当日 VWAP)的分母被缩小。更隐蔽的是,缺失往往不是随机的——交易所断线、FIX 会话重连、部分成交(Partial Fill)回报被覆盖,都会让缺失集中在特定时段或特定价格档位,从而产生方向性偏差。

成交重复则相反,会把同一笔成交计两次,导致成交量虚增、均价被同一价格重复加权。常见来源包括:回报重传(Resend Request 后的重放)、撮合与清算两路数据同时入库、以及以“成交编号 + 日期”为主键缺失时的幂等失效。重复数据对 Implementation Shortfall 的影响尤其大,因为分母(总成交量)被放大,单位成本被稀释,容易让执行质量看起来“比实际更好”。

时间戳错误破坏的是“价格基准对齐”。成本估计需要把每笔成交映射到决策时刻、下单时刻或某个基准窗口(如开盘后 30 分钟 VWAP)。若时间戳存在时区错位(UTC 与本地时间混用)、精度不足(只到秒)、或时钟漂移,成交就会被归入错误的窗口,基准价与成交价错配,滑点符号甚至可能反转。典型症状是:某日成本估计突然出现大量“负滑点”,而逐笔核对后发现成交被整体平移了 8 小时。

成交数据缺陷 → 成本估计失真 → 修复闭环 成交缺失 断线 / 部分成交被覆盖 成交重复 重传 / 双路入库 / 幂等失效 时间戳错误 时区混用 / 秒级精度 / 时钟漂移 成交量低估,均价偏移 缺失集中于特定时段 → 方向性偏差 成交量虚增,单位成本被稀释 执行质量“看起来更好” 成交与基准窗口错配 滑点符号可能反转 对账补齐:订单累计成交量 vs 成交明细 差额定位缺失笔数,按回报重放补录 去重:成交编号 + 交易日 唯一键 保留首条,记录重复条数与来源 时间归一:统一 UTC + 毫秒精度 与交易所时钟比对,校正漂移量 修复后回归校验(三项必须同时通过) ① Σ成交明细成交量 = 订单累计成交量(逐单核对) ② 成交编号无重复,重复率 = 0 ③ 成交时间落在 [下单时刻, 收盘] 区间内,且与基准窗口对齐

案例:一笔母单的成本估计被“重复 + 时区”双重污染

某日一笔买入母单,目标 20000 股,交易时段为 09:30–11:30。原始成交明细入库后,成本估计模块给出的成交均价为 24.812 元,当日基准 VWAP 为 24.850 元,显示“负滑点 −0.038 元”,即执行优于基准。但交易员凭经验判断当日盘面偏强,负滑点不合常理,于是发起数据核查。

第一步做成交量对账:订单回报中的累计成交量为 20000 股,而成交明细表按成交编号汇总后为 23000 股,差额 +3000 股,说明存在重复。进一步按成交编号分组,发现编号 F20240612-00871 出现 2 次,成交量各 1500 股,来源字段分别为 MATCH 与 CLEAR,即撮合与清算两路数据同时入库,且入库表未设唯一约束。

第二步检查时间戳:剩余明细中有 6 笔的时间落在 17:31–17:45,明显超出交易时段。核对后发现这些记录的时间字段为 UTC,而其余记录为本地时间(UTC+8),入库时未统一。这 6 笔实际对应上午 09:31–09:45 的成交,被错误地排除在上午基准窗口之外,导致基准 VWAP 计算时少计了这部分成交量。

修复动作分三步执行:其一,以 成交编号 + 交易日 为唯一键去重,保留 MATCH 来源、删除 CLEAR 重复记录,共删除 1 条、涉及 1500 股;其二,将时间字段统一转换为 UTC 后按本地时区重新标注,6 笔记录回填至正确时段;其三,重新计算成本。修复后成交明细合计 20000 股,与订单累计成交量一致;成交均价变为 24.874 元,相对基准 VWAP 24.850 元为 正滑点 +0.024 元,与当日偏强盘面一致,符号恢复正常。

注意:去重时不能简单“按价格 + 数量 + 时间”判重,因为同一毫秒内可能真实存在两笔同价同量成交。必须以交易所或柜台返回的成交编号为主键,缺失成交编号时退化为“订单号 + 成交序号”,并记录降级原因。

可复用的排查顺序与判断依据

面对成本估计异常,建议固定按“量—重—时”顺序排查,因为三者的证据链是递进的:先确认总量是否闭合,再确认记录是否唯一,最后确认时间是否可对齐。若跳过量的对账直接去重,可能把真实的部分成交误删;若先修时间再对账,时间错位会让对账口径本身失效。

检查项 核对口径 异常阈值(示例) 处置动作
成交量闭合 Σ成交明细量 vs 订单累计成交量 差额 ≠ 0 定位缺失笔数,按回报重放补录
记录唯一性 成交编号分组计数 任一组计数 > 1 保留主来源,删除重复并留痕
时间合法性 成交时间 ∈ [下单时刻, 收盘] 越界记录 > 0 统一时区与精度,校正漂移
基准对齐 成交所属窗口 vs 基准窗口定义 窗口归属不一致 重算基准,复核滑点符号

最后需要强调,修复不是终点,防复发才是。工程上应把唯一键约束、时区强制转换、成交量日终对账做成入库前的硬校验,并保留每次修复的删除条数、补录条数与时间校正量,形成可审计的数据质量日志。只有成交数据在量、重、时三个维度都闭合,成本估计的数字才具备解释力,否则再精细的模型也只是在错误输入上做运算。