1. 异常行情数据质量核验导论
在量化研究与交易系统建设中,行情数据常被当作“基础设施”而非“研究对象”。但真实情况是:交易所推送、第三方数据商落库、内部转发链路中的任何一环出现偏差,都会让后续的因子计算、回测收益、风控阈值全部失真。异常行情数据质量核验,就是要在数据进入策略之前,系统性地识别“哪些数据不可信、为什么不可信、影响范围有多大”。
本节先厘清两个基础问题:什么算异常行情数据,以及核验要达成什么目标。随后梳理行情数据最常见的五类质量问题,并给出从数据接入到质量报告的全流程框架,为后续各章的检测方法与工程实现奠定共同语言。
一、异常行情数据的界定范围
“异常”不等于“错误”。行情数据中的异常可以分为三类:
- 客观错误:数据本身违反基本事实,如价格小于等于零、成交量出现负值、同一标的同一时刻出现两条不同收盘价。这类异常无需业务判断即可判定。
- 统计异常:数据在统计意义上偏离历史分布,如某只股票单笔涨跌幅超过 20%、买卖价差异常放大、成交量突增数十倍。这类异常可能是真实行情(如重大公告、涨跌停打开),也可能是数据问题,需要结合上下文判断。
- 链路异常:数据在传输、落库、转发过程中产生的结构性偏差,如时间戳乱序、快照与逐笔不一致、字段缺失或错位。这类异常往往成批出现,是核验的重点。
核验的目标不是“消灭所有异常”,而是建立可量化的可信度判断:对每条记录或每个时间窗口,给出“可用 / 可疑 / 不可用”的结论,并保留判定依据。这样策略层才能决定是剔除、修复还是降权使用。
二、行情数据常见质量问题
结合 A 股 Level-1/Level-2 行情、期货快照与逐笔成交的实际场景,常见问题可归纳为五类:
| 问题类型 | 典型表现 | 常见成因 |
|---|---|---|
| 缺失 | 某标的在交易时段内无快照;某字段整列为空;逐笔成交中间断档 | 采集进程中断、订阅未覆盖、字段映射遗漏 |
| 重复 | 同一时间戳同一标的出现多条相同记录;快照被重复写入 | 重试机制未去重、多路数据源合并冲突 |
| 跳变 | 相邻快照价格跳变超过合理阈值;成交量回退 | 真实极端行情、数据拼接错位、单位换算错误 |
| 时间戳错乱 | 记录时间倒序;交易所时间与本地时间偏差过大;跨市场时间基准不一致 | 时钟未同步、时区处理错误、批量补数覆盖 |
| 价格越界 | 价格超出涨跌停范围;买卖价倒挂;最高价低于最低价 | 字段错位、复权处理错误、异常撮合数据 |
这五类问题并非孤立存在。例如时间戳错乱会导致相邻记录顺序错误,进而被误判为价格跳变;重复记录会干扰成交量统计,表现为“跳变”。因此核验流程需要按依赖顺序组织,而不是逐项独立检查。
三、从数据接入到质量报告的全流程框架
一个可落地的核验框架应覆盖五个环节,形成闭环:
- 接入校验:数据落地时立即检查结构完整性——字段数量、类型、主键唯一性、时间戳可解析性。这一层拦截的是“明显不可用”的数据,成本最低。
- 规则检测:按标的、按交易日执行确定性规则,如价格区间、买卖价关系、成交量单调性、时间戳单调性。规则应参数化,阈值可按市场、板块配置。
- 统计检测:对规则无法覆盖的异常,用分布方法识别,如基于历史分位数的涨跌幅阈值、基于滚动窗口的成交量 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。
第三,区分“数据问题”与“行情问题”。涨停板打开瞬间的价格跳变、停牌复牌后的价格断层、新股上市首日的极端波动,都是真实行情。核验系统应能识别这些已知场景并打上“真实异常”标签,避免策略层误删有效信号。这要求核验规则与交易日历、停复牌信息、涨跌停状态联动,而不是孤立地看单条记录。