我用 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 投研工具链我们下篇见。

相关新闻

先确认当前防火墙状态

先确认当前防火墙状态

如果主机使用的是 firewalld,可以先执行下面的命令查看当前规则: sudo firewall-cmd --list-all 这一步的作用很简单:先看现在已经放行了什么,再决定是否继续新增 http 和 https。 02 | 同时放行 HTTP 和 HTTPS 在常见的 Oracle L…

2026/7/20 15:15:25阅读更多 →
Roo Code终极指南:如何在VS Code中搭建AI编程助手开发团队

Roo Code终极指南:如何在VS Code中搭建AI编程助手开发团队

Roo Code终极指南:如何在VS Code中搭建AI编程助手开发团队 【免费下载链接】Roo-Code Roo Code gives you a whole dev team of AI agents in your code editor. 项目地址: https://gitcode.com/GitHub_Trending/ro/Roo-Code 想要提升编程效率却担心响应延迟…

2026/7/20 15:15:25阅读更多 →
PG 日报|探讨 CREATE TABLE LIKE 自动同步表注释

PG 日报|探讨 CREATE TABLE LIKE 自动同步表注释

PostgreSQL Hacker 电子邮件讨论精选 pg_plan_advice:修复数字中下划线的解析问题 该讨论涉及 pg_plan_advice 中的一个 bug:pgpa_scanner 可接受带下划线的整数(如 1_000),但错误地使用了普通的 strtoint 进行解析,…

2026/7/20 15:15:25阅读更多 →
C2000 FSI高速串行接口:原理、配置与信号完整性实战

C2000 FSI高速串行接口:原理、配置与信号完整性实战

1. FSI协议在C2000平台上的核心价值与设计哲学在工业控制、电机驱动和数字电源这些对实时性和可靠性要求近乎苛刻的领域,微控制器(MCU)之间的数据交换一直是系统设计的瓶颈。传统的并行总线占用引脚多,布线复杂,抗干扰…

2026/7/21 22:04:34阅读更多 →
从Notebook到生产:机器学习模型的系统韧性与治理闭环

从Notebook到生产:机器学习模型的系统韧性与治理闭环

1. 为什么“模型上线”不是终点,而是系统性风险的起点?你有没有经历过这样的场景:模型在Jupyter Notebook里跑得飞起,AUC 0.92,F1 0.87,业务方拍板签字,庆功会都快安排上了——结果上线第三天&a…

2026/7/21 22:04:34阅读更多 →
C++编程核心:递归与迭代的本质差异、适用场景与性能优化实战

C++编程核心:递归与迭代的本质差异、适用场景与性能优化实战

1. 项目概述:递归与迭代,两种思维的碰撞 在C的世界里,解决同一个问题往往有多条路径。递归和迭代,就是其中最经典、也最常被拿来对比的两种编程范式。它们不仅仅是代码实现上的差异,更代表了两种截然不同的思考方式。递…

2026/7/21 22:04:34阅读更多 →
GTA 5增强版终极菜单:YimMenuV2完整功能指南与快速上手教程

GTA 5增强版终极菜单:YimMenuV2完整功能指南与快速上手教程

GTA 5增强版终极菜单:YimMenuV2完整功能指南与快速上手教程 【免费下载链接】YimMenuV2 Experimental menu for GTA 5: Enhanced 项目地址: https://gitcode.com/GitHub_Trending/yi/YimMenuV2 你是否曾想过在GTA 5增强版中拥有上帝般的控制力?是…

2026/7/21 22:04:34阅读更多 →
17- 文本统计/处理工具使用指南

17- 文本统计/处理工具使用指南

17- 文本统计/处理工具使用指南 字数统计、大小写转换、去重排序——文本处理是日常开发中的高频需求。本文介绍 WATools 中文本统计/处理工具的完整功能和使用技巧。 界面总览 文本统计/处理工具采用上下分区布局,上半部分为输入区 统计卡片,下半部分…

2026/7/21 22:04:34阅读更多 →
ICCV 2025 | 插值调鸡尾酒:LUT 超分首次突破任意缩放,CPU 秒出图

ICCV 2025 | 插值调鸡尾酒:LUT 超分首次突破任意缩放,CPU 秒出图

这篇论文最有意思的地方,不是"又做了一个查表上采样"这么简单,而是——把好几种插值方法像调鸡尾酒一样混合起来,让查表超分居然能支持任意缩放倍数,而且 CPU 上跑一张 720p 图片只要 2.7 秒。 论文标题:IM-LUT: Interpolation Mixing Look-Up Tables for Image…

2026/7/21 22:02:33阅读更多 →
Go语言静态资源打包方案对比与实践指南

Go语言静态资源打包方案对比与实践指南

1. 项目背景与核心需求在Go语言开发中,我们经常需要处理静态资源文件的打包问题。无论是Web应用的模板文件、前端资源,还是配置文件、证书等,都需要随程序一起分发。传统做法是将这些文件与编译后的二进制文件放在同一目录下,但这…

2026/7/21 0:51:49阅读更多 →
Go语言实现高性能LDAP认证服务的架构与实践

Go语言实现高性能LDAP认证服务的架构与实践

1. 项目背景与核心价值LDAP(轻量级目录访问协议)作为企业级身份认证的黄金标准,已经服务了超过80%的财富500强公司。我在金融科技领域实施统一认证体系时,发现传统Java方案存在启动慢、内存占用高等痛点。而Go语言凭借其协程并发模…

2026/7/21 0:51:49阅读更多 →
【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

更多请点击: https://intelliparadigm.com 第一章:AI面试官实战指南的核心价值与适用场景 AI面试官并非替代人类HR的“黑箱工具”,而是以可解释、可审计、可迭代的方式,赋能招聘全链路的关键基础设施。其核心价值在于将主观经验沉…

2026/7/21 0:51:49阅读更多 →
Windows+macOS 通用 OpenClaw 部署流程,内置依赖一键启动智能桌面助手

Windows+macOS 通用 OpenClaw 部署流程,内置依赖一键启动智能桌面助手

📌教程适配:OpenClaw v2.7.9 | 兼容 Windows10/11、macOS 双系统 📖前言 当下各类本地 AI 工具层出不穷,多数产品仅能完成文字问答交互,很难直接操控电脑执行实际操作。OpenClaw,业内常称小龙虾 AI&#…

2026/7/21 0:01:46阅读更多 →
Codex 接入后 Bug 反增?复盘从个人演示到团队协作的“流程陷阱”

Codex 接入后 Bug 反增?复盘从个人演示到团队协作的“流程陷阱”

聊《一次Codex项目复盘,问题最后出在流程而不是模型》之前,先说一句实在的:别急着背概念,先看它在真实项目里到底解决什么问题。摘要先把这篇文章的目标说清楚:看完之后,你应该能判断这件事值不值得做&…

2026/7/21 0:01:46阅读更多 →
手把手搓一个五子棋游戏,零代码也能当“游戏开发者”

手把手搓一个五子棋游戏,零代码也能当“游戏开发者”

大家好,还是我。前几期带大家做了心情日记本和可视化大屏,后台有朋友留言:“能不能教点好玩的?我想做游戏,但一行代码都不会。”行,这期就安排。今天的目标:从零做一个五子棋游戏。 带AI对战、三…

2026/7/21 0:03:46阅读更多 →
YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

如果你在部署 YOLOv8 时,发现推理速度只有可怜的 1-2 FPS,而别人的演示视频却能跑到 30 FPS 以上,那么问题很可能不在模型本身,而在于你的整个处理链路。很多开发者拿到一个训练好的 YOLOv8 模型后,会直接使用官方示例…

2026/7/20 22:51:39阅读更多 →
Coze与Dify对比指南:低代码AI应用开发从入门到实战

Coze与Dify对比指南:低代码AI应用开发从入门到实战

1. 从零到一:为什么你需要了解 Coze 和 Dify?如果你对 AI 应用开发感兴趣,但一看到“大模型”、“智能体”、“工作流”这些词就头疼,觉得门槛太高,那这篇文章就是为你准备的。很多开发者,包括我自己&#…

2026/7/21 18:53:30阅读更多 →
AI生图工具怎么选?2026年6月版实测对比

AI生图工具怎么选?2026年6月版实测对比

做自媒体的朋友应该都有体会:配图一直是个让人头疼的问题。2026年,AI生图工具已经非常成熟了,但工具太多反而不知道怎么选。以下是截至2026年6月我对主流AI生图工具的实测对比。Midjourney V8.1:速度之王2026年6月11日&#xff0c…

2026/7/21 18:53:30阅读更多 →