news 2026/7/5 5:49:02

程序员量化交易实战 34:识别行情数据缺口

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
程序员量化交易实战 34:识别行情数据缺口

第 33 篇开始从历史角度看模拟盘是否稳定。

第 34 篇回到每日运行前的输入检查:如果目标股票里有价格缺失,系统应该明确报出缺口,而不是让策略在None0或旧价格上继续跑。

缺价格不是小事

模拟盘里最危险的 bug 往往不是程序直接崩溃,而是数据缺了但程序继续运行。

如果某只股票没有最新价格,调仓金额、风险敞口、权益快照都会跟着失真。早期系统宁可保守一点,把这类问题标成 blocker。

缺口对象

第 34 章新增app/data_gaps.py

@dataclass(frozen=True) class DataGap: symbol: str trade_date: date field: str severity: str @dataclass(frozen=True) class DataGapPlan: gaps: tuple[DataGap, ...] severity: str

第一版只检查last_price,后面可以继续扩展到成交量、复权因子、停牌状态等字段。

构造缺口计划

函数输入是价格快照和必需 symbol 列表:

def build_price_gap_plan( price_snapshot: PriceSnapshot, *, required_symbols: list[str], ) -> DataGapPlan:

实现时先去重,再比较必需列表和快照里已有价格。

required = list(dict.fromkeys(required_symbols)) missing = sorted(set(required) - set(price_snapshot.prices))

每个缺失 symbol 都变成一个 blocker:

DataGap( symbol=symbol, trade_date=price_snapshot.trade_date, field="last_price", severity="blocker", )

这个设计很朴素,但它让缺口从“日志里可能有一行”变成了可测试、可汇总、可进入运维检查清单的数据结构。

常见的数据缺口不只有价格缺失。日频策略里还可能遇到成交量缺失、复权因子缺失、停牌状态缺失、股票池成分更新延迟等问题。第一版只检查last_price,是因为价格缺口会直接影响权益、仓位和调仓金额,是模拟盘最该先挡住的一类问题。

当前联动运行结果

paper-ops-check会故意构造一个缺价格场景:必需 symbol 包含000001.SZ600519.SH,但价格源只返回000001.SZ

uv run python -m scripts.chapter_examples paper-ops-check

因此缺口计划输出severity=blockergap_symbols=['600519.SH']。这类结果会直接进入第 35 篇的运维检查清单,阻止系统在行情不完整时继续执行。

测试缺口输出

测试场景里,价格快照只有000001.SZ,必需列表还有600000.SH300001.SZ

uv run pytest tests/test_data_gaps.py

断言结果:

assert plan.severity == "blocker" assert gap_symbols(plan) == ["300001.SZ", "600000.SH"] assert plan.gaps[0].field == "last_price"

如果所有必需价格都存在,则返回severity == "ok"gaps == ()

本章更新与代码仓库

本章更新内容:

  • 新增app/data_gaps.py
  • 实现DataGapDataGapPlan
  • 对必需 symbol 和价格快照做缺口检查。
  • 缺失价格统一标记为 blocker。
  • 新增gap_symbols()便于测试和展示。
  • 增加paper-ops-check联动示例,展示缺价格如何变成 blocker 级别数据缺口。
  • 补充价格、成交量、复权因子、停牌状态等常见数据缺口背景。
  • 新增tests/test_data_gaps.py,覆盖缺价格和数据完整两种场景。

代码仓库:

https://github.com/ax2/zi-quant-platform

本章代码:

git clone https://github.com/ax2/zi-quant-platform.git cd zi-quant-platform git checkout chapter-34 uv sync --extra dev uv run pytest tests/test_data_gaps.py

第 34 章提交为5c94461,tag 为chapter-34

本篇小结

行情缺口要尽早变成结构化结果。

第 34 篇把缺失价格从隐性风险变成DataGapPlan。下一篇会把运行时间窗、历史摘要、数据缺口和健康报告组合成一张最终的运维检查清单。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/5 5:48:30

KMS_VL_ALL_AIO:Windows与Office智能激活解决方案深度技术解析

KMS_VL_ALL_AIO:Windows与Office智能激活解决方案深度技术解析 【免费下载链接】KMS_VL_ALL_AIO Smart Activation Script 项目地址: https://gitcode.com/gh_mirrors/km/KMS_VL_ALL_AIO KMS_VL_ALL_AIO是一款基于KMS(Key Management Service&…

作者头像 李华
网站建设 2026/7/5 5:46:20

企业级AI应用实战:Agent+RAG+MCP架构解决复杂系统集成难题

🚀 30款热门AI模型一站整合,DeepSeek/GLM/Qwen 随心用,限时 5 折。 👉 点击领海量免费额度 1. 这篇文章真正要解决的问题 如果你正在负责一个拥有百万行代码、数十个微服务、文档散落在Confluence和无数个PPT里的“祖传”项目…

作者头像 李华
网站建设 2026/7/5 5:45:25

gInk:颠覆屏幕标注工作流,效率提升300%的Windows开源神器

gInk:颠覆屏幕标注工作流,效率提升300%的Windows开源神器 【免费下载链接】gInk An easy to use on-screen annotation software inspired by Epic Pen. 项目地址: https://gitcode.com/gh_mirrors/gi/gInk 在数字协作时代,你是否经历…

作者头像 李华
网站建设 2026/7/5 5:44:39

3个步骤掌握B站视频下载:解锁大会员4K与充电专属内容

3个步骤掌握B站视频下载:解锁大会员4K与充电专属内容 【免费下载链接】bilibili-downloader B站视频下载,支持下载大会员清晰度4K,持续更新中 项目地址: https://gitcode.com/gh_mirrors/bil/bilibili-downloader 想要永久保存B站上的…

作者头像 李华