news 2026/7/5 7:52:50

程序员量化交易实战 32:把每日运行结果归档成 JSON

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
程序员量化交易实战 32:把每日运行结果归档成 JSON

第 31 篇给每日流程加了运行时间窗。

第 32 篇处理运行后的证据问题:今天到底发了什么提醒、健康状态是什么、复盘记录里写了什么,都应该落到一个稳定文件里。

为什么先归档 JSON

真实系统里,日报可能会发到群、邮件、飞书、文件,后面还可能进数据库。

但在模拟盘阶段,我更希望先有一个稳定、可 diff、可回放的文件。JSON 足够直白,也方便测试。

归档文件包含三块信息:

区块来源用途
alertPaperAlertMessage记录当天对外发送的标题、正文和严重级别
healthRunHealthReport记录运行是否健康,以及缺价格、通知回执等状态
reviewPaperReviewRecord记录权益、现金比例、风险级别和推荐动作

归档对象

第 32 章新增app/report_archive.py

@dataclass(frozen=True) class ArchivedReport: path: Path trade_date: date status: str

ArchivedReport不保存完整内容,只返回归档路径、交易日和健康状态。完整内容通过文件读取。

写入稳定文件

文件名直接使用交易日:

path = target_dir / f"{trade_date.isoformat()}-paper-report.json"

核心写入逻辑是把已有对象压成一个稳定 payload:

payload = { "trade_date": trade_date.isoformat(), "alert": { "title": alert_message.title, "body": alert_message.body, "severity": alert_message.severity, }, "health": { "status": health_report.status, "summary": health_report.summary, "issue_count": health_report.issue_count, "missing_price_count": health_report.missing_price_count, "notification_accepted": health_report.notification_accepted, }, "review": { "total_equity": review_record.total_equity, "cash_ratio": review_record.cash_ratio, "risk_severity": review_record.risk_severity, "recommendation_action": review_record.recommendation_action, "note": review_record.note, }, }

写文件时使用ensure_ascii=Falsesort_keys=True。前者让中文日报可读,后者让文件结构稳定,后面排查问题更省心。

归档文件的角色接近“运行证据”。它不替代数据库,也不替代日志;它保存的是当天日报真正需要回看的最小闭环:对外发了什么、系统健康状态是什么、复盘记录里的关键口径是什么。

当前联动运行结果

继续运行同一条命令:

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

命令会在临时目录里写入两天归档,其中当天归档名为2026-03-05-paper-report.json

截图里可以看到归档 payload 固定包含alerthealthreviewtrade_date。这几个键稳定以后,后面的历史统计和运维清单就不需要再理解日报正文格式。

测试归档内容

测试用临时目录,不污染工作区。

uv run pytest tests/test_report_archive.py

关键断言包括:

assert archived.path.name == "2026-01-28-paper-report.json" assert payload["trade_date"] == "2026-01-28" assert payload["health"]["status"] == "ok" assert payload["review"]["recommendation_action"] == "HOLD"

这说明归档不仅写了文件,而且保留了后续统计真正需要的字段。

本章更新与代码仓库

本章更新内容:

  • 新增app/report_archive.py
  • 实现每日报告归档对象ArchivedReport
  • 把提醒消息、健康报告和复盘记录写入稳定 JSON。
  • 实现read_archived_report(),用于后续读取归档。
  • 增加paper-ops-check联动示例,展示真实归档文件名和归档 payload 结构。
  • 补充归档作为运行证据的工程定位。
  • 新增tests/test_report_archive.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-32 uv sync --extra dev uv run pytest tests/test_report_archive.py

第 32 章提交为8504ea9,tag 为chapter-32

本篇小结

归档不是为了多存一份文件,而是为了让每日运行有证据。

第 32 篇把日报、健康状态和复盘记录落成稳定 JSON。下一篇会读取这些归档文件,生成一段更长时间尺度上的运行历史摘要。

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

6DoF运动追踪:IMU与MCU硬件方案及算法实现

1. 从3D到6DoF:IMU与MCU的完美组合在运动追踪和空间定位领域,从传统的3D数据升级到6自由度(6DoF)感知是一个质的飞跃。IIM-42652作为一款高性能6轴IMU(惯性测量单元),与dsPIC33FJ256GP710A这款数…

作者头像 李华
网站建设 2026/7/5 7:51:58

开源决策的工程化方法论:四维校验与七道落地关

1. 这不是一句口号,而是一套可验证的工程决策逻辑“Why Open Source Makes Sense”——这个标题乍看像一篇泛泛而谈的布道文,但在我过去十二年参与过37个开源项目(从Linux内核模块到嵌入式固件工具链)、主导过9次企业级闭源转开源…

作者头像 李华
网站建设 2026/7/5 7:50:04

13DOF传感器与MK64FX512处理器在机器人导航中的应用

1. 为什么需要13DOF传感器组合在机器人导航和智能设备交互领域,传统的6DOF(三轴加速度计三轴陀螺仪)方案存在明显的局限性。我曾在无人机项目中深刻体会到,仅靠6DOF传感器在快速机动或长时间运行时,姿态解算会出现明显…

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

AI 平台模型注册表:别让模型文件散落在对象存储里

AI 平台模型注册表:别让模型文件散落在对象存储里 一、模型文件需要被治理 云原生 AI 平台里,模型权重、Tokenizer、配置、LoRA、量化版本经常被放在对象存储里。早期团队可能用路径约定管理,例如 models/v1/、models/latest/。规模一大&…

作者头像 李华
网站建设 2026/7/5 7:43:19

天天加班却不受重用?大佬聊职场进阶

导读每天疯狂搬砖,加班加点地完成一个又一个任务;提交的代码行数在团队中名列前茅,遇到不懂的逻辑也绝不废话,闷头硬啃。你的工作状态是不是也是这样?在潜意识里,甚至把这种“高度配合”的踏实与勤奋&#…

作者头像 李华
网站建设 2026/7/5 7:42:40

PyCharm语言切换(最新汉化附带图文)

前言 有时候,我们在阅读其他人写的文档的时候,图片是中文或者英文的设置,我们可能和当前的界面对应不上,这个时候切换成对应的语言设置,方便比对,就非常有必要。 一、中文改成英文 ****二、英文改成中文 **…

作者头像 李华