原创 · 约 6 分钟阅读 · 阅读 --
Last updated on
程序员量化交易实战 26:先抽象提醒通道
程序员量化交易实战 26:先抽象提醒通道
古董级程序员,大厂出来后一直在创业公司,现在仍活跃在一线做 AI 相关的开发。这个专栏会把一个 A 股量化平台从 0 到 1 拆开写:数据、策略、回测、模拟盘、提醒和生产化,尽量用真实代码和真实运行结果说话。更完整的更新也会同步到微信公众号「字与码」。
第 25 篇已经给每日流程加了生产检查。接下来要把日报送出去。
第 26 篇先不接飞书、不接邮件,只做提醒通道抽象。消息怎么生成是一回事,发到哪里、是否被接收,是另一回事。

先稳定发送接口
提醒通道最容易一开始就写死。
今天发到文件,明天想发到飞书,后天又想发邮件。如果日报生成逻辑直接依赖某个具体通道,后面改起来会很别扭。

回执对象
第 26 章新增 app/notification_channels.py。
@dataclass(frozen=True)
class NotificationReceipt:
channel: str
accepted: bool
destination: str
message_title: str
sent_at: datetime
error: str = ""
发送动作必须有回执。没有回执,就无法在后续健康报告里判断提醒是否真的被通道接收。
通道协议
class NotificationChannel(Protocol):
name: str
def send(self, message: PaperAlertMessage, *, destination: str, sent_at: datetime) -> NotificationReceipt:
...
这个协议很小,只约束输入消息、目的地和发送时间。具体通道可以是文件、飞书、邮件,也可以是测试用的内存实现。
本章更新与代码仓库
本章更新内容:
- 新增
app/notification_channels.py。 - 定义通知回执和通道协议。
- 实现
MemoryNotificationChannel,用于离线测试。 - 新增
tests/test_notification_channels.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-26
uv sync --extra dev
uv run pytest tests/test_notification_channels.py
第 26 章提交为 6bf1a6f,tag 为 chapter-26。
本篇小结
提醒通道要先有边界,再接具体平台。
第 26 篇把发送接口和回执结构稳定下来。下一篇会实现一个文件型通道,让日报发送在本地也能被验证和回放。