一、原始行情最常见的四类问题
第一类是缺失:节假日、停牌、接口中断都会造成记录缺口;第二类是重复:多次拉取或补数时同一交易日出现多条;第三类是异常:价格为 0、成交量为负、单日涨跌幅明显超出规则;第四类是口径不一致。
口径问题最隐蔽:不同数据源的复权方式、字段单位、时区与交易日历可能不同。单看每一份数据都正常,合并后却出现错位。
二、四步清洗流程
把清洗拆成校验、补全、对齐、入库四步,每一步都保留输入与输出,便于复现。先校验再修改,避免在补全过程中掩盖原始问题。
清洗程序应可重复执行:同一份原始数据跑两次,输出必须一致;重复执行不应产生重复记录,也不应覆盖人工确认过的修正。
- 校验:字段完整性、类型、取值范围与时间连续性
- 补全:明确缺失原因,停牌与节假日不强行插值
- 对齐:统一交易日历、时区、复权口径与单位
- 入库:主键唯一、写入幂等、保留数据版本
三、缺失与停牌的处理原则
缺失值不能一律用前值填充。停牌期间没有成交,用前收盘价填充价格可以接受,但成交量应保持为空或标记为零,否则量能指标会失真。
节假日缺口应在交易日历层解决,而不是在每张表里补行。把“没有交易日”和“有交易日但无数据”区分开,是清洗设计的关键。
四、可复用的质量检查项
质量检查不必复杂,关键是固定下来并每次运行。下面几项能覆盖大多数常见问题,适合放在管道末尾自动执行。
- 主键唯一:同一标的同一时间只有一条记录
- 价格合法:最高价不低于最低价,收盘价在区间内
- 成交合法:成交量与成交额非负,单位统一
- 时间连续:交易日历内无意外缺口
- 跨源一致:关键字段与基准数据源比对
五、把清洗写进工程而不是记忆里
清洗规则要写成代码与配置,不要停留在个人经验。规则变更时记录版本与原因,历史结果才能解释。
管道输出建议附带一份质量报告:记录条数、缺失比例、异常条数与处理动作。看板与回测共用这份报告,出现差异时能快速定位。
六、日线与分钟线的差异
日线清洗关注交易日历与停牌,分钟线还要处理集合竞价、午间休市与跨日拼接。不同数据源对分钟时间戳的定义可能是开始时间或结束时间,合并前必须统一。
分钟线数据量大,重复写入与断点续传更容易出问题。建议按标的与日期分区,写入前做幂等校验,失败重跑只覆盖对应分区。