程序员量化交易实战 42:每日运行 artifact 落盘
第 41 篇把每日运行计划压成了一行摘要适合日志和命令行。但日志只能回答“当时看起来是什么状态”。如果要排查一次运行为什么 blocked还需要更完整的证据输入股票、失败检查、失败动作、生成时间。这就是 artifact 的作用。artifact 存什么第 42 章新增app/daily_run_artifacts.py。dataclass(frozenTrue) class DailyRunArtifact: path: Path payload: dict[str, Any]payload不是把 dataclass 直接粗暴序列化而是写成稳定的调试格式。字段说明trade_date运行对应的交易日statusready、dry_run_ready 或 blockedrequired_symbols本次运行请求的股票列表failed_checks未通过的检查项actions每个失败检查对应的处理动作generated_at请求生成时间executable是否允许真实执行构造 JSON payload核心函数是daily_run_artifact_payload()。def daily_run_artifact_payload(plan: DailyRunPlan) - dict[str, Any]: summary build_daily_run_summary(plan) return { trade_date: summary.trade_date, status: summary.status, dry_run: summary.dry_run, symbol_count: summary.symbol_count, required_symbols: list(plan.request.required_symbols), failed_checks: list(plan.result.failed_checks), actions: [ { check_name: action.check_name, action: action.action, severity: action.severity, } for action in plan.failure_actions ], action_summary: summary.action_summary, executable: summary.executable, generated_at: plan.request.generated_at.isoformat(), }这里刻意把 tuple 转成 list。artifact 是给外部读取的不应该暴露 Python 内部对象习惯。写入文件文件名按交易日生成def write_daily_run_artifact(plan: DailyRunPlan, *, directory: Path) - DailyRunArtifact: payload daily_run_artifact_payload(plan) directory.mkdir(parentsTrue, exist_okTrue) path directory / fdaily-run-{payload[trade_date]}.json path.write_text(json.dumps(payload, ensure_asciiFalse, indent2) \n, encodingutf-8) return DailyRunArtifact(pathpath, payloadpayload)blocked 场景下artifact 会保留这样的动作信息{ actions: [ { check_name: run_health, action: inspect_run_health, severity: blocker } ] }这比只在日志里看到blocked有用得多。接到可运行示例第 42 篇继续使用同一个命令复现 artifact 落盘uv run python -m scripts.chapter_examples paper-command本章对应的输出如下这张图里有三个排查时真正有用的点。artifactdaily-run-2026-03-07.json说明文件名稳定按交易日定位。值班时不需要在日志目录里猜哪个文件是当天结果。payload_keys说明 artifact 里同时保留了请求、状态、失败检查、动作和生成时间。它不是一行摘要的备份而是更完整的运行证据。failed_checks[data_gaps] actions[repair_market_data] executableFalse把失败原因和处理方向放在一起。看到这行就知道不是策略信号问题也不是运行窗口问题而是行情数据缺口挡住了执行。生产系统里我会把日志、artifact 和后续 runbook 分开看日志用于第一眼判断artifact 用于复盘证据runbook 用于下一步动作。三者互相引用但不要互相替代。测试本章测试覆盖payload 是否包含调试所需上下文。写入后的 JSON 是否能完整读回。blocked 场景下动作是否保留check_name、action和severity。运行命令uv run pytest tests/test_daily_run_artifacts.py tests/test_daily_run_summary.py tests/test_daily_run_plan.py本批次补充paper-command后全量测试通过276 passed, 2 warnings本章更新与代码仓库本章更新内容新增app/daily_run_artifacts.py。新增DailyRunArtifact。实现daily_run_artifact_payload()。实现write_daily_run_artifact()和read_daily_run_artifact()。新增tests/test_daily_run_artifacts.py覆盖 payload 与 JSON round trip。在scripts/chapter_examples.py中接入 artifact 写入与读回文章截图来自该命令输出。代码仓库https://github.com/ax2/zi-quant-platform本章代码git clone https://github.com/ax2/zi-quant-platform.git cd zi-quant-platform git checkout chapter-41-45-paper-command uv sync --extra dev uv run python -m scripts.chapter_examples paper-command uv run pytest tests/test_daily_run_artifacts.py tests/test_daily_run_summary.py tests/test_daily_run_plan.py tests/test_chapter_examples.py第 41-45 篇共用 tagchapter-41-45-paper-command。当前全量测试通过276 passed只有既有 FastAPI deprecation warning。本篇小结artifact 是生产系统里的证据文件。第 42 篇把每日运行计划落成 JSON让后续命令、告警和排查都能指向同一个文件而不是各自拼一份上下文。

相关新闻

盘锦瓷砖到货验收,破损色差别忽略

盘锦瓷砖到货验收,破损色差别忽略

盘锦很多业主选瓷砖时,把精力放在花色、规格和价格上,等瓷砖送到家才发现:有的边角磕碰、有的箱号不一致、有的颜色和展厅样板略有差异。瓷砖一旦开始铺贴,再回头处理破损、色差、补货和退换问题,就会麻烦很多。所以&a…

2026/7/9 12:33:18 阅读更多 →
基于YOLOv5的疲劳驾驶检测系统,疲劳驾驶数据集

基于YOLOv5的疲劳驾驶检测系统,疲劳驾驶数据集

基于YOLOv5的疲劳驾驶检测系统 如何配置环境,如何构建数据集模型 项目介绍: 软件:PycharmAnaconda 环境:python3.8 tensorflow2.9.1 torch1.8.0 PyQt5 文件: 1.完整程序文件(.py等) 2.UI界面…

2026/7/9 12:33:18 阅读更多 →
Agent 评测系统架构:从指标分层到 GT/Judge 闭环的工程化落地

Agent 评测系统架构:从指标分层到 GT/Judge 闭环的工程化落地

拆解 Agent 评测如何用指标分层、GT 来源和 Judge 校准,形成可回归的质量闭环。 原文链接:AI 小老六 导语 ​Agent 上线后​,最难回答的问题往往不是“模型有没有变强”,而是“这个 Agent 在业务里到底有没有帮上忙”。传统软件可…

2026/7/9 12:29:17 阅读更多 →

最新新闻

【Bug已解决】Workspace path with spaces / Special characters in path — Claude Code 路径含空格或特殊字符解决方案

【Bug已解决】Workspace path with spaces / Special characters in path — Claude Code 路径含空格或特殊字符解决方案

【Bug已解决】Workspace path with spaces / Special characters in path — Claude Code 路径含空格或特殊字符解决方案 1. 问题描述 当项目路径包含空格或特殊字符时,Claude Code 在执行文件操作或运行命令时出现各种错误: # 路径含空格 $ cd "/U…

2026/7/9 13:19:34 阅读更多 →
基于NT5CB64M16GP-EK的DDR3-1866内存模组设计:从颗粒选型到PCB布局

基于NT5CB64M16GP-EK的DDR3-1866内存模组设计:从颗粒选型到PCB布局

NT5CB64M16GP-EK:南亚科技1Gb DDR3L SDRAM内存颗粒深度解析在个人计算机、网络通信设备、工业嵌入式系统以及各类需要标准DDR3内存的应用中,DDR3L SDRAM凭借其低电压特性和成熟的接口,成为系统设计中重要的存储组件。南亚科技(Nan…

2026/7/9 13:17:33 阅读更多 →
基于华为eNSP的双核心校园网网络设计案例、综合组网配置

基于华为eNSP的双核心校园网网络设计案例、综合组网配置

概要XX中学校园的主干层次结构采用核心,汇聚,接入的三层模型。核心层处理整体网络的数据流动,实现各节点间数据的高速处理,增加安全措施和访问权限等等。汇聚夹于两层之间,任务包括线路的整合汇聚,向信息点…

2026/7/9 13:13:32 阅读更多 →
从命令行到CI/CD:LTF与主流工具集成的终极指南

从命令行到CI/CD:LTF与主流工具集成的终极指南

从命令行到CI/CD:LTF与主流工具集成的终极指南 【免费下载链接】LTF A tool dedicated to automated functional testing and performance testing of operating systems. 项目地址: https://gitcode.com/openeuler/LTF 前往项目官网免费下载:htt…

2026/7/9 13:11:32 阅读更多 →
基于BQ25887的锂电池组智能平衡系统设计

基于BQ25887的锂电池组智能平衡系统设计

1. 项目背景与核心器件选型 在锂电池组应用中,电池单元之间的电压不平衡是影响整体性能和寿命的关键问题。当串联电池组中存在容量或内阻差异时,充电过程中会出现部分电池过充而其他电池未充满的情况。这不仅降低可用容量,还会加速电池老化。…

2026/7/9 13:11:32 阅读更多 →
直流有刷电机驱动方案:TC78H653FTG与GD32VF103VBT6组合应用

直流有刷电机驱动方案:TC78H653FTG与GD32VF103VBT6组合应用

1. 项目背景与核心器件解析在工业自动化和消费电子领域,直流有刷电机因其结构简单、控制方便、成本低廉等优势,始终占据着重要地位。根据市场调研数据显示,2023年全球直流电机市场规模已达到213亿美元,其中直流有刷电机占比超过35…

2026/7/9 13:09:32 阅读更多 →

日新闻

3大音乐平台逐字歌词完整解决方案:ESLyric-LyricsSource完全指南

3大音乐平台逐字歌词完整解决方案:ESLyric-LyricsSource完全指南

3大音乐平台逐字歌词完整解决方案:ESLyric-LyricsSource完全指南 【免费下载链接】ESLyric-LyricsSource Advanced lyrics source for ESLyric in foobar2000 项目地址: https://gitcode.com/gh_mirrors/es/ESLyric-LyricsSource 还在为Foobar2000找不到高质…

2026/7/9 0:01:04 阅读更多 →
ElegantBook封面定制揭秘:3个步骤打造专业级学术书籍

ElegantBook封面定制揭秘:3个步骤打造专业级学术书籍

ElegantBook封面定制揭秘:3个步骤打造专业级学术书籍 【免费下载链接】ElegantBook Elegant LaTeX Template for Books 项目地址: https://gitcode.com/gh_mirrors/el/ElegantBook 你是否曾经为学术书籍的封面设计而烦恼?想要一个既专业又美观的封…

2026/7/9 0:03:06 阅读更多 →
如何高效使用pyodbc:企业级数据库连接终极指南

如何高效使用pyodbc:企业级数据库连接终极指南

如何高效使用pyodbc:企业级数据库连接终极指南 【免费下载链接】pyodbc Python ODBC bridge 项目地址: https://gitcode.com/gh_mirrors/py/pyodbc 在当今数据驱动的商业环境中,企业级数据库连接已成为现代应用开发的核心需求。pyodbc作为一款强大…

2026/7/9 0:07:11 阅读更多 →

周新闻

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容 【免费下载链接】BiliTools A cross-platform bilibili toolbox. 跨平台哔哩哔哩工具箱,支持下载视频、番剧等等各类资源 项目地址: https://gitcode.com/GitHub_Trending/bilit/BiliTools …

2026/7/8 16:14:06 阅读更多 →
威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型的陌生现状在忙碌疲惫的一天里,参与了关于混合后量子密码学的讨论,应付端点攻击找茬的人,还参与留言板讨论后,发现“威胁模型”对多数人仍是陌生概念,且多被当作时髦用语。有趣的相关画作有一幅由 Embyr 创作的…

2026/7/7 12:34:47 阅读更多 →
渗透测试入门指南:从零基础到实战环境搭建

渗透测试入门指南:从零基础到实战环境搭建

1. 从“看热闹”到“入门”:我理解的渗透测试到底是什么?每次看到新闻里说某个大公司的数据被“黑”了,或者某个网站被攻击导致服务瘫痪,你是不是和我一样,心里会冒出两个念头:一是“这黑客真厉害”&#x…

2026/7/8 16:59:55 阅读更多 →

月新闻