程序员量化交易实战 27:用文件记录模拟盘日报发送
原创 · 约 7 分钟阅读 · 阅读 --
Last updated on

程序员量化交易实战 27:用文件记录模拟盘日报发送

作者: Alex Xiang


程序员量化交易实战 27:用文件记录模拟盘日报发送

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

第 26 篇抽象了提醒通道。现在需要一个真实可运行的实现。

第 27 篇先做文件型通道:把日报发送记录写入 JSONL。它不是最终通知方案,但很适合本地调试和测试回放。

ZiCode 工程师把模拟盘日报写入文件通道

为什么先写文件

真实通知平台会带来网络、鉴权、限流和配置问题。

这些都重要,但不是当前最该解决的问题。我们先要证明:每日流程能产出日报,通道能接收,发送结果能保存。

JSONL 发送记录

第 27 章新增 app/file_notifications.py

FileNotificationChannel 会把每次发送写成一行 JSON:

channel = FileNotificationChannel(path=Path("data/paper-alerts.jsonl"))
receipt = send_paper_alert(channel, message, destination="paper-daily", sent_at=now)

每行包含通道、是否接收、目的地、标题、发送时间、严重级别、正文和错误信息。

为什么不是 CSV

日报正文天然可能有换行,CSV 也能处理,但阅读和追加都不如 JSONL 直接。

JSONL 的好处是每一行都是完整记录,后续可以按行读取,也可以用命令行工具快速检查。

它还有一个工程上的好处:追加写入天然适合做本地审计日志。即使程序中途退出,已经写入的行也不会因为某个大 JSON 数组没闭合而整体不可读。

当前联动运行结果

继续运行同一条命令:

uv run python -m scripts.chapter_examples paper-notify

文件通道会把日报写入 paper-alerts.jsonl,示例命令随后用 read_file_notifications() 回读记录:

paper-notify 命令生成的文件通知记录

这张图里保留的是一行 JSONL 的核心字段。后续如果接入飞书或邮件,也可以保持类似的回执结构,只是通道名和外部平台字段不同。

本章更新与代码仓库

本章更新内容:

  • 新增 app/file_notifications.py
  • 实现文件型提醒通道。
  • 将发送记录追加写入 JSONL。
  • 提供 read_file_notifications() 回读函数。
  • 增加 paper-notify 联动示例,展示日报发送、JSONL 记录和回读结果。
  • 补充 JSONL 作为追加审计日志的适用场景。
  • 新增 tests/test_file_notifications.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-27
uv sync --extra dev
uv run pytest tests/test_file_notifications.py

第 27 章提交为 5191340,tag 为 chapter-27

本篇小结

文件型通道让提醒这件事先变得可验证。

第 27 篇没有接任何外部平台,但已经能保存日报发送记录。下一篇会继续拆边界,把每日流程里的价格输入抽象出来。

微信公众号

欢迎关注「字与码」

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

微信公众号字与码二维码