当前位置: 首页 > news >正文

程序员量化交易实战 33:汇总模拟盘运行历史

第 32 篇把每日运行结果写成了 JSON 归档。

单日归档解决了“当天发生了什么”。第 33 篇要回答另一个问题:最近一段时间,这个模拟盘系统是否稳定。

历史摘要看什么

现在先不做复杂报表,只统计四个最基础的指标:

字段含义
report_count归档报告数量
latest_trade_date最新交易日
latest_status最新健康状态
blocker_count历史阻断次数
notification_success_rate通知成功率

这些指标足够支撑一个很实际的判断:如果最近十天有三天 blocker,问题不在策略,而在运行链路。

摘要对象

第 33 章新增app/run_history.py

@dataclass(frozen=True) class RunHistorySummary: report_count: int latest_trade_date: str latest_status: str blocker_count: int notification_success_rate: float

这不是策略收益统计,而是运行质量统计。

从归档目录读取

实现逻辑很直接:读取目录下所有*-paper-report.json,按文件名排序,然后统计。

reports = [] for path in sorted(Path(directory).glob("*-paper-report.json")): reports.append(read_archived_report(path))

空目录也要有明确返回,不能抛异常。

if not reports: return RunHistorySummary(0, "", "missing", 0, 0.0)

对模拟盘来说,missing是一个有用状态。它告诉上层:不是系统健康,而是还没有历史。

通知成功率

通知成功率按归档报告里的健康信息统计。

notification_count = sum( 1 for item in reports if item["health"].get("notification_accepted") )

最后保留 6 位小数:

notification_success_rate=round(notification_count / len(reports), 6)

这里没有引入 pandas,也没有做图。运行历史摘要应该足够轻,可以在命令行、接口、日报里随手调用。

当前联动运行结果

paper-ops-check会先写入一条前一日 blocker 归档,再写入当天 ok 归档,然后从归档目录汇总历史:

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

这次历史摘要里,report_count=2blocker_count=1,通知成功率是50%。这不是收益统计,而是运行质量统计。等真实调度接入以后,这类摘要可以快速回答“最近是策略表现不好,还是系统经常没跑稳”。

测试历史统计

测试先复用第 32 章的归档函数造两天数据:

uv run pytest tests/test_run_history.py

关键断言:

assert summary.report_count == 2 assert summary.latest_trade_date == "2026-01-29" assert summary.latest_status == "blocker" assert summary.blocker_count == 1 assert summary.notification_success_rate == 0.5

这组断言说明历史摘要能跨多个归档文件稳定工作。

本章更新与代码仓库

本章更新内容:

  • 新增app/run_history.py
  • 实现RunHistorySummary
  • 从日报归档目录读取历史报告。
  • 统计报告数量、最新状态、阻断次数和通知成功率。
  • 增加paper-ops-check联动示例,展示两日归档汇总后的运行历史。
  • 补充运行质量统计和收益统计的区别。
  • 新增tests/test_run_history.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-33 uv sync --extra dev uv run pytest tests/test_run_history.py

第 33 章提交为9f55d07,tag 为chapter-33

本篇小结

历史摘要让模拟盘从“今天是否跑完”变成“最近是否稳定”。

第 33 篇读取归档报告,拿到最新状态、阻断次数和通知成功率。下一篇会继续补一个常见的生产问题:行情数据缺口应该如何被显式识别,而不是被策略静默忽略。

http://www.jsqmd.com/news/1126690/

相关文章:

  • 嵌入式EEPROM数据存储与I2C通信实战指南
  • 深度解析WeChatIntercept:macOS微信防撤回技术实战指南
  • 如何彻底掌控Mac睡眠:SleeperX终极电源管理指南
  • STM32F415RG与LP5812 LED驱动器的嵌入式灯光控制实战
  • 嵌入式系统2x2矩阵键盘硬件消抖方案
  • WarcraftHelper:魔兽争霸III终极性能优化与兼容性解决方案
  • PCF8591与PIC32MX664F064L的I2C信号转换系统设计
  • 免费开源AMD Ryzen调试神器:ZenStatesDebugTool终极掌控指南
  • AI开题报告写作工具哪家好?主流平台对比评测,看看哪款最适合你
  • 基于R7FA4L1BD4CFP与MPC48CMD22的高精度DAC设计实践
  • ParsecVDisplay:Windows虚拟显示器配置终极指南
  • gray灰度图自动曝光设计
  • Lumafly终极指南:让《空洞骑士》模组管理变得轻松有趣
  • Triton调试:Triton调试从入门到裂开再到起飞:一套工具链吃透MLIR全流程
  • STM32智能散热系统设计与DRV8213电机驱动应用
  • SPI接口EEPROM与PIC MCU的嵌入式存储优化实践
  • Si4732与PIC24FJ256GA705在数字收音机设计中的优化实践
  • 解锁AI编程潜力:Codex必装Skills配置指南与实战应用
  • 基于Si4731与TM4C1299KCZAD的可编程收音机系统设计
  • LTC6904与PIC18LF2515构建高精度方波发生器方案
  • OBS多平台同步推流终极解决方案:obs-multi-rtmp深度解析
  • 使用CC Switch实现Codex与国产大模型的无缝路由切换
  • 如何用Parsec VDD实现Windows虚拟显示器:游戏串流与远程办公的完美方案
  • 数据质量保障体系设计:从被动修复到主动防御的转型路径
  • WarcraftHelper:魔兽争霸3现代化兼容性优化工具完全指南
  • WS2812与PIC18LF46K80的智能LED控制方案解析
  • Cadence 17.4 PCB布线:两段未连接线的接合技巧
  • 网站收录慢 案例:www.xssdgy.cn
  • 3分钟快速上手:免费AMD Ryzen调试神器SMUDebugTool完整指南
  • Power BI切片器底层原理与企业级配置指南