程序员量化交易实战 18:模拟盘也要有风控检查
原创 · 约 5 分钟阅读 · 阅读 --
Last updated on

程序员量化交易实战 18:模拟盘也要有风控检查

作者: Alex Xiang


程序员量化交易实战 18:模拟盘也要有风控检查

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

纸面模拟盘不会真的下单,但它仍然需要风控。

原因很简单:模拟盘的意义不是让策略随便跑,而是提前暴露策略在账户层面的风险行为。

ZiCode 工程师检查模拟盘风控规则

第一版风控规则

第 18 篇新增 app/paper_risk.py,先实现三类检查:

  • 总仓位是否过高。
  • 现金缓冲是否太低。
  • 单只股票权重是否超过上限。

模拟盘风控检查

风控报告

风控结果不是一个布尔值,而是 PaperRiskReport

@dataclass(frozen=True)
class PaperRiskReport:
    passed: bool
    severity: str
    violations: tuple[PaperRiskViolation, ...]

severity 当前有三种:okwarningblocker。这样后续通知可以区分普通提示和需要阻断的风险。

为什么要保留违规项

违规项包含 code、message、value、limit、severity 和可选 symbol。

这让风控不只是告诉你“不通过”,还会说明是哪条规则、当前值是多少、阈值是多少。

PaperRiskViolation(
    code="position_too_large",
    message="单只股票持仓权重过高",
    value=0.72,
    limit=0.35,
    severity="blocker",
    symbol="000001.SZ",
)

这类结构后面可以直接进入日报、飞书消息或风控看板。

本章更新与代码仓库

本章更新内容:

  • 新增 app/paper_risk.py
  • 实现总仓位、现金缓冲和单票权重检查。
  • 输出 PaperRiskReport 和结构化违规项。
  • 新增 tests/test_paper_risk.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-18
uv sync --extra dev
uv run pytest tests/test_paper_risk.py

第 18 章提交为 5b381f3,tag 为 chapter-18

本篇小结

风控不应该等到真实交易前才出现。

第 18 篇把模拟盘账户快照接入风控检查,并输出可读、可测试的违规报告。下一篇会把目标权重转成调仓计划,让策略建议进入可执行前的计划层。