原创 · 约 5 分钟阅读 · 阅读 --
Last updated on
程序员量化交易实战 18:模拟盘也要有风控检查
程序员量化交易实战 18:模拟盘也要有风控检查
古董级程序员,大厂出来后一直在创业公司,现在仍活跃在一线做 AI 相关的开发。这个专栏会把一个 A 股量化平台从 0 到 1 拆开写:数据、策略、回测、模拟盘、提醒和生产化,尽量用真实代码和真实运行结果说话。更完整的更新也会同步到微信公众号「字与码」。
纸面模拟盘不会真的下单,但它仍然需要风控。
原因很简单:模拟盘的意义不是让策略随便跑,而是提前暴露策略在账户层面的风险行为。

第一版风控规则
第 18 篇新增 app/paper_risk.py,先实现三类检查:
- 总仓位是否过高。
- 现金缓冲是否太低。
- 单只股票权重是否超过上限。

风控报告
风控结果不是一个布尔值,而是 PaperRiskReport:
@dataclass(frozen=True)
class PaperRiskReport:
passed: bool
severity: str
violations: tuple[PaperRiskViolation, ...]
severity 当前有三种:ok、warning、blocker。这样后续通知可以区分普通提示和需要阻断的风险。
为什么要保留违规项
违规项包含 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 篇把模拟盘账户快照接入风控检查,并输出可读、可测试的违规报告。下一篇会把目标权重转成调仓计划,让策略建议进入可执行前的计划层。