4. 执行数据清洗与预处理实战

交易执行质量评估的结论是否可信,几乎完全取决于进入评估模型的那份数据集是否干净。真实交易系统落库的执行明细往往混杂着测试单、撤单、部分成交、价格异常、时间戳错位、重复回报等问题。如果直接拿原始流水去计算滑点、成交率或执行偏差,得到的指标会严重失真。本节围绕异常价格、撤单、部分成交三类高频场景,讲清楚如何把原始执行流水加工成一份可用于质量评估的标准化执行数据集。

先明确标准化数据集的目标结构

清洗不是简单删行,而是把“一笔委托从下单到终态”的全过程整理成一条可评估的记录。建议以“委托单”为主键粒度,保留订单标识、标的、方向、委托时间、委托价、委托量、成交明细聚合结果、终态类型、撤单时间与撤单量、成交均价、成交总量、滑点基准价等字段。成交明细作为子表保留,用于核对部分成交的加权均价。这样一份数据集既能支撑单笔评估,也能按标的、时段、策略聚合。

清洗流程可以概括为“识别—判定—修正或剔除—标记”四步,但真正决定质量的是每一步的判定规则是否可复现。下图展示了从原始流水到标准化执行数据集的加工链路与三类异常的分流处理关系。

原始执行流水 委托回报 成交明细 撤单记录 字段对齐与去重 统一时间戳时区 订单号去重 剔除测试单 异常分流判定 价格越界 撤单状态 部分成交 聚合与标记 成交加权均价 终态类型 质量标记位 标准化 执行 数据集 价格异常 偏离基准价阈值 → 剔除或修正 撤单 保留终态与撤单量 → 标记未成交 部分成交 按成交明细聚合 → 计算加权均价 主链路:字段对齐 → 异常分流 → 聚合标记 → 标准化输出 异常分支不丢弃全部信息,而是修正或标记后回流

异常价格:先定基准,再定阈值

价格异常通常表现为成交价明显偏离当时市场价,常见成因包括数据源单位错误(如把“元”记成“分”)、错单、行情快照与成交时间不匹配。处理的关键是先确定比较基准。常用做法是以成交时刻前后若干秒的行情中间价作为基准价,或使用当日成交量加权均价(VWAP)作为粗基准。然后设定偏离阈值,例如以基准价的 ±5% 为界,超出则判为可疑。

判定后不要一律删除。建议分三档处理:偏离在阈值内直接保留;偏离超过阈值但成交明细与委托价一致、且行情快照缺失的,标记为“待复核”并保留,避免误删真实大单;明显单位错误(如价格恰为真实价的 100 倍或 1/100)则按比例修正并打修正标记。示例中某标的委托价 12.50 元,成交明细出现 1250.00,可判定为分/元单位错位,修正为 12.50 并记录修正原因。

撤单:保留终态,区分“未成交”与“部分成交后撤单”

撤单记录最容易在清洗中被误删,因为很多人只保留“已成交”记录。但执行质量评估恰恰需要撤单信息来计算撤单率、有效成交率和未成交原因。正确做法是保留撤单事件,并把订单终态标记为“全部撤单”或“部分成交后撤单”。对于全部撤单,成交量为 0,成交均价为空,不能参与滑点计算,但应计入撤单率分母。

需要特别处理的是“撤单量与已成交量之和是否等于委托量”。若不等,说明存在漏记成交或重复撤单回报,应回查成交明细。示例中委托 1000 股,成交 400 股后撤单 600 股,校验 400+600=1000 通过,终态标记为“部分成交后撤单”,成交均价按 400 股加权计算。

部分成交:按明细聚合,禁止用委托价代替成交价

部分成交场景下,一笔委托可能对应多条成交明细,价格和数量各不相同。评估滑点必须使用成交加权均价,而不是委托价或最后一笔成交价。聚合公式为:成交均价 = Σ(成交价×成交量) / Σ成交量。示例中某委托分三笔成交:12.48×300、12.50×500、12.52×200,则加权均价 =(3744+6250+2504)/1000 = 12.498 元。若直接取最后一笔 12.52,滑点会被高估约 0.022 元,对高频策略的评估结论影响显著。

聚合时还要校验成交总量不超过委托量、成交时间落在委托与撤单时间之间、成交明细无重复成交编号。任一校验失败,该订单进入“待复核”集合,不进入正式评估样本。

可直接套用的清洗规则与输出字段

下面给出一份可执行的清洗规则示例,字段与判定条件均按本节场景设计,参数为教学示例值,实际使用时需结合标的流动性与行情频率调整。

规则1 去重:按成交编号去重,保留首次出现记录
规则2 测试单:订单标识含 TEST 或委托量=0 的记录剔除
规则3 时间对齐:统一为交易所时区,成交时间须满足
       委托时间 <= 成交时间 <= 撤单时间(若有)
规则4 价格异常:|成交价 - 基准中间价| / 基准中间价 > 5%
       判为可疑;单位错位按 100 倍关系修正并标记
规则5 撤单校验:成交量 + 撤单量 = 委托量,否则转待复核
规则6 部分成交聚合:成交均价 = Σ(价×量)/Σ量
规则7 终态标记:全部成交 / 部分成交 / 全部撤单 /
       部分成交后撤单 / 待复核

输出数据集建议至少包含:订单标识、标的、方向、委托时间、委托价、委托量、成交总量、成交均价、撤单量、终态类型、滑点基准价、质量标记(正常/修正/待复核)。其中“质量标记”是后续评估时做样本筛选和敏感性分析的依据,务必保留而不是清洗完就丢弃。

清洗完成后做一次守恒校验:成交总量 ≤ 委托量、撤单量 + 成交量 = 委托量(撤单订单)、成交均价落在当日最高最低价之间。三项全部通过,数据集才具备进入质量评估的基本条件。

把上述规则固化为脚本或存储过程后,每次评估前对原始流水重跑一遍,输出带质量标记的标准化数据集,并统计各类异常的记录数与占比。异常占比突然升高往往意味着上游数据源或交易接口发生了变化,这本身就是执行质量监控的一个有价值的信号。