程序员量化交易实战 30:生成每日运行健康报告
原创 · 约 9 分钟阅读 · 阅读 --
Last updated on

程序员量化交易实战 30:生成每日运行健康报告

作者: Alex Xiang


程序员量化交易实战 30:生成每日运行健康报告

古董级程序员,大厂出来后一直在创业公司,现在仍活跃在一线做 AI 相关的开发。这个专栏会把一个 A 股量化平台从 0 到 1 拆开写:数据、策略、回测、模拟盘、提醒和生产化,尽量用真实代码和真实运行结果说话。更完整的更新也会同步到微信公众号「字与码」。

第 26-29 篇补了提醒通道、文件发送、价格源和目标权重策略。

第 30 篇做一个阶段收口:把价格缺失、生产检查和提醒回执汇总成每日运行健康报告。

ZiCode 工程师查看模拟盘运行健康报告

健康报告看什么

健康报告不评价策略好坏。

它只回答一个工程问题:今天这次模拟盘运行是否健康?

当前判断包括:

  • 价格快照是否有缺失 symbol。
  • 输入生产检查是否有问题。
  • 输出生产检查是否有问题。
  • 通知回执是否接收成功。

这里的健康状态是“运行健康”,不是“账户健康”。账户可能没有风险,但通知失败;也可能账户触发风控,但运行链路本身是完整的。把两者分开,排障时才不会混在一起。

报告对象

第 30 章新增 app/run_health.py

@dataclass(frozen=True)
class RunHealthReport:
    status: str
    issue_count: int
    notification_accepted: bool
    missing_price_count: int
    summary: str

status 只保留三档:okwarningblocker

状态优先级

生产检查失败是 blocker。

缺价格或者提醒失败是 warning。它们未必让当天结果完全不可用,但必须被看见。

if issue_count:
    status = "blocker"
elif missing_price_count:
    status = "warning"
elif notification_receipt is not None and not notification_accepted:
    status = "warning"
else:
    status = "ok"

这类优先级以后可以继续细化,但第一版先把最重要的分叉写清楚。

当前联动运行结果

第 30 篇收口同一条命令:

uv run python -m scripts.chapter_examples paper-notify

这次命令会生成目标权重、取价、执行每日流程、发送文件通知,最后生成运行健康报告:

paper-notify 命令生成的运行健康报告

示例输出是 status=ok,因为价格没有缺失、输入输出检查没有 issue、文件通知也被接收。注意这不代表策略一定赚钱,只代表今天这次模拟盘流程在工程层面是完整的。

本章更新与代码仓库

本章更新内容:

  • 新增 app/run_health.py
  • 实现运行健康报告对象。
  • 汇总价格快照、输入检查、输出检查和提醒回执。
  • 增加 paper-notify 联动示例,展示从目标权重到通知回执再到健康报告的完整链路。
  • 补充运行健康与账户风控之间的边界说明。
  • 新增 tests/test_run_health.py,覆盖健康、阻断和提醒失败三类状态。
  • 完成第 26-30 篇阶段 review。

代码仓库:

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

本章代码:

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

第 30 章提交为 7add464,tag 为 chapter-30。当前全量测试通过:229 passed,只有既有 FastAPI deprecation warning。

第 26-30 篇阶段 review

第六组五篇补齐了模拟盘运行链路里几条关键边界。

第 26 篇抽象提醒通道,让日报发送不再绑定具体平台。

第 27 篇实现文件型通道,用 JSONL 保存日报发送记录,方便本地验证和回放。

第 28 篇抽象价格源,把价格输入和每日流程拆开,并显式暴露缺失 symbol。

第 29 篇加入目标权重策略,把候选列表转换成总仓位受控的等权目标。

第 30 篇生成运行健康报告,把价格、生产检查和通知回执汇总成 okwarningblocker

这一组的重点不是做更复杂的策略,而是继续把工程边界拆稳。提醒、价格、权重、健康状态都独立以后,后面接真实调度和真实行情时,改动范围会小很多。

当前主线代码也补了一个跨章节命令:

uv run python -m scripts.chapter_examples paper-notify

它把第 26-30 篇串成一次可运行演示:候选列表生成目标权重,价格源提供最新价,每日流程生成日报,通知通道记录回执,健康报告汇总运行状态。后面如果接真实行情或飞书通知,优先替换 PriceProviderNotificationChannel 的实现,而不是改每日流程主体。

本篇小结

健康报告是每日运行的最后一层摘要。

第 30 篇让模拟盘不仅能算、能提醒,还能说明这次运行本身是否健康。下一组文章可以在这条链路上继续接真实调度、报告归档和更接近生产环境的数据输入。

微信公众号

欢迎关注「字与码」

如果这篇文章对你有用,也欢迎在微信里继续关注后续更新。

微信公众号字与码二维码