1. 异常行情数据质量核验导论

在量化研究与交易系统建设中,行情数据常被当作“基础设施”而非“研究对象”。但真实情况是:交易所推送、第三方数据商落库、内部转发链路中的任何一环出现偏差,都会让后续的因子计算、回测收益、风控阈值全部失真。异常行情数据质量核验,就是要在数据进入策略之前,系统性地识别“哪些数据不可信、为什么不可信、影响范围有多大”。

本节先厘清两个基础问题:什么算异常行情数据,以及核验要达成什么目标。随后梳理行情数据最常见的五类质量问题,并给出从数据接入到质量报告的全流程框架,为后续各章的检测方法与工程实现奠定共同语言。

一、异常行情数据的界定范围

“异常”不等于“错误”。行情数据中的异常可以分为三类:

  • 客观错误:数据本身违反基本事实,如价格小于等于零、成交量出现负值、同一标的同一时刻出现两条不同收盘价。这类异常无需业务判断即可判定。
  • 统计异常:数据在统计意义上偏离历史分布,如某只股票单笔涨跌幅超过 20%、买卖价差异常放大、成交量突增数十倍。这类异常可能是真实行情(如重大公告、涨跌停打开),也可能是数据问题,需要结合上下文判断。
  • 链路异常:数据在传输、落库、转发过程中产生的结构性偏差,如时间戳乱序、快照与逐笔不一致、字段缺失或错位。这类异常往往成批出现,是核验的重点。

核验的目标不是“消灭所有异常”,而是建立可量化的可信度判断:对每条记录或每个时间窗口,给出“可用 / 可疑 / 不可用”的结论,并保留判定依据。这样策略层才能决定是剔除、修复还是降权使用。

二、行情数据常见质量问题

结合 A 股 Level-1/Level-2 行情、期货快照与逐笔成交的实际场景,常见问题可归纳为五类:

问题类型典型表现常见成因
缺失某标的在交易时段内无快照;某字段整列为空;逐笔成交中间断档采集进程中断、订阅未覆盖、字段映射遗漏
重复同一时间戳同一标的出现多条相同记录;快照被重复写入重试机制未去重、多路数据源合并冲突
跳变相邻快照价格跳变超过合理阈值;成交量回退真实极端行情、数据拼接错位、单位换算错误
时间戳错乱记录时间倒序;交易所时间与本地时间偏差过大;跨市场时间基准不一致时钟未同步、时区处理错误、批量补数覆盖
价格越界价格超出涨跌停范围;买卖价倒挂;最高价低于最低价字段错位、复权处理错误、异常撮合数据

这五类问题并非孤立存在。例如时间戳错乱会导致相邻记录顺序错误,进而被误判为价格跳变;重复记录会干扰成交量统计,表现为“跳变”。因此核验流程需要按依赖顺序组织,而不是逐项独立检查。

三、从数据接入到质量报告的全流程框架

一个可落地的核验框架应覆盖五个环节,形成闭环:

  1. 接入校验:数据落地时立即检查结构完整性——字段数量、类型、主键唯一性、时间戳可解析性。这一层拦截的是“明显不可用”的数据,成本最低。
  2. 规则检测:按标的、按交易日执行确定性规则,如价格区间、买卖价关系、成交量单调性、时间戳单调性。规则应参数化,阈值可按市场、板块配置。
  3. 统计检测:对规则无法覆盖的异常,用分布方法识别,如基于历史分位数的涨跌幅阈值、基于滚动窗口的成交量 Z-Score、快照间隔的异常检测。
  4. 关联核验:跨数据源、跨字段交叉验证,如快照收盘价与逐笔成交均价对比、不同数据商同一标的的价格偏差、期货与现货基差异常。
  5. 质量报告:将检测结果聚合为可读的指标——异常率、异常类型分布、受影响标的清单、时间分布热力图,并给出每条异常的处理建议。
行情数据质量核验全流程框架 数据接入 交易所 / 数据商 接入校验 结构 / 主键 / 类型 规则检测 价格 / 时间 / 量 统计检测 分位数 / Z-Score 关联核验 跨源 / 跨字段 质量报告 异常率 / 清单 / 建议 策略 / 回测 剔除 / 修复 / 降权 阈值调优反馈 五类常见质量问题与检测环节对应 缺失 接入校验 + 规则检测 重复 接入校验(主键去重) 跳变 规则检测 + 统计检测 时间戳错乱 规则检测(单调性) 价格越界 规则检测 + 关联核验 检测顺序遵循依赖关系:先结构后内容,先确定性后统计性,先单源后跨源

图中虚线回路表示一个容易被忽略但至关重要的设计:质量报告应反哺检测阈值。例如某板块在财报季的成交量波动天然放大,若统计检测的 Z-Score 阈值固定不变,会把正常放量误判为异常。通过报告中的误报率统计,可以按板块、按季节动态调整阈值,使核验体系持续可用。

四、核验工作的三个实践原则

第一,先定基准再谈异常。价格越界需要涨跌停规则作为基准,时间戳错乱需要交易所时钟作为基准,跳变判断需要历史波动分布作为基准。没有基准的“异常”只是主观感受。实践中应把基准参数显式配置化,例如:

{
  "market": "A股主板",
  "price_limit_pct": 0.10,
  "snapshot_interval_ms": 3000,
  "max_gap_ratio": 3.0,
  "volume_zscore_window": 20,
  "volume_zscore_threshold": 5.0,
  "timestamp_drift_ms": 500
}

这些参数是示例配置,实际取值需根据数据频率、标的流动性和业务容忍度标定。

第二,异常要可追溯。每条异常记录应保留原始值、检测规则、触发阈值、所在时间窗口和标的代码。否则质量报告只是一堆数字,无法支撑修复决策。建议异常表至少包含:trade_date、symbol、field、raw_value、rule_id、severity、detected_at。

第三,区分“数据问题”与“行情问题”。涨停板打开瞬间的价格跳变、停牌复牌后的价格断层、新股上市首日的极端波动,都是真实行情。核验系统应能识别这些已知场景并打上“真实异常”标签,避免策略层误删有效信号。这要求核验规则与交易日历、停复牌信息、涨跌停状态联动,而不是孤立地看单条记录。

五、本节小结