我用 Codex,给本地量化数据库搭了一套数据质检系统 开源项目地址https://github.com/zer0quant/zer0share这是本地股票数据系统系列的第四篇。前面几篇解决了数据同步、复权和 AI agent 调用这一篇继续补上一个更基础、也更容易被忽视的环节数据质量。大概一个月没有更新文章了。最近我一直沉迷于用 Fable 5 做策略研究策略验证的速度确实快了很多。不过在研究过程中我也越来越强烈地意识到一个问题数据能查、代码能跑不代表数据真的可信。前面几篇文章里我已经把股票、指数、ETF 等数据同步到本地并通过zer0share-dataskill 让 AI agent 可以直接调用。但数据接进来之后质量到底怎么样有没有漏数据内部逻辑是否自洽复权因子是否可靠这些问题如果不主动检查平时很难发现。所以这次我决定给 zer0share 补上一套数据质检系统。一、数据可用和数据可靠是两回事做研究久了会发现几乎所有数据源都会存在或多或少的问题无论免费还是付费。有些问题很明显比如整天行情缺失、字段为空、代码错误有些问题则很隐蔽比如 OHLC 关系异常、涨跌幅计算不一致或者复权后收益率突然跳变。早年我还听说过一个有意思的故事某家数据商曾经通过淘宝购买数据用来补充自己的数据库。这个故事是否还能考证不重要它至少提醒我们一件事付费只能降低数据出错的概率不能替代自己的质量检查。当然很多早期历史数据里的细微异常并不会明显改变研究结论。但量化研究的每个环节都建立在数据之上问题最好被看见、被记录而不是默认它不存在。数据问题只有被持续监控起来才会一个个暴露出来。二、先收敛范围再开始设计我最初的想法比较大希望质检系统同时适配股票、指数、ETF、期货和期权并覆盖行情与复权因子。但如果一开始把所有市场、所有表和所有规则都放进来项目很容易失控。所以我先用 superpowers 的 brainstorming 流程和 Codex 澄清需求通过一轮轮选择题确定边界再补充自己的定制要求。这一步最重要的不是让 AI 立刻写代码而是把输入和输出说清楚。最终收敛出来的需求主要包括支持历史全量质检也支持每天定时增量质检第一阶段聚焦行情数据和复权因子同时输出总体概况和具体异常明细单条规则失败时继续执行不让整批任务中断限定首期接入的数据表避免范围继续膨胀。范围收敛后后面的架构和规则设计就清楚了很多。三、数据质检的四个基础维度这套方案主要围绕四个维度展开完整性、准确性、一致性和唯一性。1. 完整性完整性解决的是“数据缺不缺”。例如可以结合交易日历、股票基础信息和上市状态检查某个交易日是否缺少应有的行情记录或者某只正常交易的股票是否整段缺失。只看实际数据本身是不够的。必须先知道“理论上应该有哪些数据”才能判断“实际缺了什么”。2. 准确性准确性解决的是“数值到底对不对”。最常见的方法是多数据源交叉验证。对于关键日期、关键标的和可疑异常点可以用另一个独立数据源进行抽样比对。第一版系统先把准确性检查的接口和输出结构留好后续再逐步增加跨数据源校验。3. 一致性一致性检查的是数据内部是否自洽。例如日线行情可以定义下面这些基础规则open 0 high 0 low 0 close 0 amount 0 volume 0 high max(open, close) low min(open, close) high low close / pre_close - 1 ≈ pct_change单个字段看起来可能都像正常数值但放到同一条行情里彼此之间未必符合逻辑。一致性规则就是用来发现这类问题。4. 唯一性唯一性解决的是重复数据。同一标的、交易日、时间戳和频率下应该只有一条有效记录。否则可能出现重复写入、版本冲突甚至同一查询返回两套不同价格。四个维度合在一起基本覆盖了第一版行情质检最需要关注的问题。四、Codex 给出的完整质检方案需求和规则确定后我让 Codex 继续设计整体方案。最终方案从设计目标、首期范围、系统架构、规则体系、严重级别、结果输出到最后的调度集成都考虑得比较完整。确认方案没有明显问题后我继续让 superpowers 输出设计文档再对设计文档做 review最后拆成可以执行的 implementation plan。这套流程对我来说很有价值先把边界、规则和输出想清楚再让模型进入实现阶段。后面即使切换模型执行目标也不会漂移。五、设计用强模型执行可以换轻量模型implementation plan 写完之后每一步要改什么文件、实现什么逻辑、运行什么测试基本都已经写清楚了。这时候继续用 GPT-5.5 执行所有机械任务token 消耗会比较高。我的做法是把模型分工拆开用 GPT-5.5 收敛需求、设计方案、review 和生成测试计划用 GPT-5.4-mini 按计划执行大部分编码任务也可以把执行计划交给 Claude Code再用 Sonnet 4.6 实现。这样既保留了关键环节的推理质量也能控制实现阶段的成本。长任务运行过程中agent 经常需要文件或命令权限。Codex CLI 可以通过/permission调整权限Claude Code 可以用ShiftTab切换 auto mode。不过自动授权只适合在计划明确、工作目录和命令范围都确认过的情况下开启。任务跑完之后代码和执行结果仍然要重新 review。大约半小时后GPT-5.4-mini 完成了第一版实现。六、先跑小数据再跑全量历史数据数据质检的测试原则很简单先用小范围数据验证规则再跑全量历史数据。如果一开始就扫描全市场、全历史不仅耗时更长规则本身有问题时也很难快速定位。所以我先选择一个月的数据进行测试确认命令、规则、输出和异常处理都能正常工作。当然也可以先让 GPT-5.5 生成一份测试计划再让它根据实际命令输出汇总测试结果。第一轮结果很快就发现了问题股票复权因子缺了一天期货和期权数据里则出现了不少NaN和空值。为了避免第一版范围继续扩张我决定暂时跳过期货和期权先把股票、指数和 ETF 的质检链路跑完整。这也是前面收敛范围的意义发现某个市场的数据问题过多时可以先记录并隔离不必拖住整套系统。七、全量质检真的找出了不少问题小范围测试通过后我开始跑股票日线行情和复权因子的全量质检。Codex CLI 跑长任务时有一个体验问题界面里只能看到background terminal不容易知道任务具体跑到哪里。有时只能通过/btw继续询问进度这方面 Claude Code 的交互会更完整一些。股票日线行情股票日线的大部分异常集中在 1991 到 1993 年的早期行情包括 OHLC 关系异常、涨跌幅不一致和成交额缺失。这些数据在日常研究里基本不会使用。我的处理方式不是强行修复而是记录异常、明确影响范围。质检还发现了少量交易日行情缺失可能是同步时的网络问题。重新执行同步后缺失数据已经补齐。ETF 行情与复权因子ETF 数据里发现了一批异常代码部分代码甚至出现了七位数字导致无法匹配对应的复权因子。确认属于无效代码后我把这些记录删除也不再为它们匹配复权数据。ETF 整体没有发现严重错误主要问题是少量行情amount0以及部分交易日fund_adj覆盖率不足。到这里行情数据的完整性、内部一致性和唯一性检查基本跑通。八、复权后仍然跳变问题藏得更深最后我又增加了一类检查先根据复权因子计算后复权收盘价再计算连续收益率观察复权后的价格是否还会异常跳变。这个检查比单纯判断复权因子是否缺失更深入。因为一条复权因子记录即使存在也不代表它的数值一定正确。只有把它应用到价格上再检查收益率连续性才能发现隐藏的问题。结果确实发现了一些标的在复权后仍然发生明显跳变。我随机抽查了其中一个案例确认问题来自复权因子本身。异常主要集中在 1994—1995 年、2006—2007 年近年的数据里也有少量需要人工核对的点例如001331.SZ在2026-07-01附近的记录。这也让我重新思考复权因子的来源。相比完全依赖上游累计因子后续可以基于日线行情里的pre_close自己推导单次调整关系并把计算结果作为独立校验必要时用于修正累计复权因子。ETF 的同类检查没有发现明显的复权收益率跳变。九、最终结论整体可用但必须持续监控第一版质检完成后我对当前数据的判断是股票和 ETF 日线及复权数据整体可用但仍然存在需要记录、修复和持续观察的问题。目前发现的问题可以归纳为三类早期股票行情存在少量 OHLC 关系异常、涨跌幅不一致和成交额缺失少量日线数据因同步异常缺失可以通过重新同步补齐部分股票复权因子会造成后复权收益率跳变需要进一步核对和修正。ETF 数据整体更稳定主要是少量amount0、异常代码以及部分交易日复权因子覆盖不足。这次最大的收获不是证明数据库“完全没有问题”而是建立了一套能够持续发现问题的机制。数据质检不是上线前跑一次的验收而应该成为数据同步之后的固定环节。后续每天增量同步完成后都可以自动运行核心质检规则出现异常时记录明细和严重级别但不阻塞其他规则继续执行。这样一来我们面对的就不再是“数据到底有没有问题”这个模糊问题而是一份可以查询、追踪和处理的异常清单。一起交流如果你也在做本地量化数据库、数据质检或 AI 投研工具链可以通过公众号菜单「认识我」找到我交流。我也很好奇大家平时会怎样检查行情和复权数据又遇到过哪些比较隐蔽的数据问题。参考链接本地数据系统项目zer0share数据系统系列第一篇我用 Tushare Claude Code手搓了一套本地股票数据同步系统已开源数据系统系列第二篇我用 Tushare Codex把本地股票数据库补上了前后复权行情已开源数据系统系列第三篇我用 Hermes Agent zer0share-data skill把本地数据库变成了可对话的投研助手如果这篇文章对你有帮助⭐ Star 一下项目https://github.com/zer0quant/zer0share关注公众号后面继续更新本地数据系统、数据质检和 AI 投研工具链我们下篇见。

本月热点