程序员量化交易实战 23:串起每日模拟盘流程
原创 · 约 6 分钟阅读 · 阅读 --
Last updated on

程序员量化交易实战 23:串起每日模拟盘流程

作者: Alex Xiang


程序员量化交易实战 23:串起每日模拟盘流程

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

第 17-22 篇已经有了很多小模块。单独看都能跑,但系统每天运行时需要的是一条完整链路。

第 23 篇新增每日模拟盘流程,把快照、风控、调仓、推荐、日报和复盘串成一次可测试的运行结果。

ZiCode 工程师串起模拟盘每日流程

先做纯函数编排

这章仍然不引入 APScheduler、Celery 或 crontab。

原因是现在更需要确定流程顺序,而不是确定运行器。只要核心编排是纯函数,后续接任何调度系统都比较容易。

模拟盘每日流程

每日流程结果

第 23 章新增 app/paper_daily_cycle.py

@dataclass(frozen=True)
class PaperDailyCycleResult:
    snapshot: PaperAccountSnapshot
    risk_report: PaperRiskReport
    rebalance_plan: RebalancePlan
    recommendation: PaperRecommendation
    alert_message: PaperAlertMessage
    review_record: PaperReviewRecord

这个对象把一天的主要产物放在一起,方便测试、日志和后续持久化。

编排入口

result = run_paper_daily_cycle(
    account,
    trade_date=date(2026, 1, 19),
    last_prices={"000001.SZ": 10.0},
    target_weights={"000001.SZ": 0.4},
)

函数内部依次生成快照、风控报告、调仓计划、推荐摘要、日报消息和复盘记录。它不会修改账户,也不会发送消息。

为什么暂时不自动执行

模拟盘自动化要慢一点。

如果流程本身还没测清楚,过早接调度器只会让问题变得更难定位。第 23 篇先把“每天该算什么”固定下来,下一步再讨论“每天什么时候算、算完保存到哪里”。

本章更新与代码仓库

本章更新内容:

  • 新增 app/paper_daily_cycle.py
  • 实现每日模拟盘运行结果对象。
  • 串联账户快照、风控、调仓、推荐、日报和复盘记录。
  • 新增 tests/test_paper_daily_cycle.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-23
uv sync --extra dev
uv run pytest tests/test_paper_daily_cycle.py

第 23 章提交为 9e6672c,tag 为 chapter-23

本篇小结

每日流程不是新功能堆叠,而是边界整合。

第 23 篇把前面几个模块串成一个稳定入口。下一篇会解决一个现实问题:程序重启后,模拟盘账户状态从哪里恢复。