风险控制

📎 引用文件

本文引用的文件 - order_guard.py - halt.py - enforcement.py - daily_count.py - audit.py - model.py - risk.py

目录

  1. 简介
  2. 项目结构
  3. 核心组件
  4. 架构总览
  5. 详细组件分析
  6. 依赖关系分析
  7. 性能与实时性
  8. 故障排查指南
  9. 结论
  10. 附录:配置与监控清单

简介

本文件面向 Vibe-Trading 风险控制系统,系统性说明订单守卫机制、风控规则引擎与熔断保护策略。内容覆盖: - 多层风控架构(指令级、组合级、账户级、全局熔断) - 风险指标计算(VaR/CVaR、回撤、极端分布拟合等) - 阈值监控与自动干预(拒绝、暂停重授权、紧急止损/平仓) - 与订单系统的集成方式与实时处理能力 - 误报处理、规则冲突与性能优化建议 - 风控参数配置项、监控指标与告警机制

项目结构

Vibe-Trading 的风险控制由“前置守卫 + 规则引擎 + 熔断开关 + 审计与计数”构成,关键路径位于 live 模块与 quantlib 风险度量库: - 订单守卫:拦截并校验所有写操作(下单/撤单),在调用券商前执行风控检查 - 规则引擎:将订单意图与当前持仓/余额对照硬上限与宇宙约束,输出允许/拒绝/暂停 - 熔断保护:基于文件系统的全局/分券商即时停机,支持预取动作(取消挂单、可选平仓) - 审计与计数:不可变审计账本、每日订单计数、SSE 事件推送 - 风险度量:历史 VaR/CVaR、参数化 VaR、最大回撤、蒙特卡洛模拟、极值理论尾部拟合

graph TB A["交易代理/工具"] --> B["订单守卫<br/>LiveOrderGuardTool"] B --> C["规则引擎<br/>check_mandate"] B --> D["熔断检查<br/>halt_flag_set"] B --> E["读快照<br/>持仓/余额/报价"] C --> F["市场数据/加载器<br/>last_price_usd / ADV / 市值"] B --> G["审计记录<br/>write_live_action"] B --> H["日计数<br/>daily_order_lock / increment"] D --> I["预取动作注册<br/>register_halt_action"]

图表来源 - order_guard.py:97-215 - enforcement.py:455-617 - halt.py:135-163 - audit.py:248-352 - daily_count.py:72-135

章节来源 - order_guard.py:1-831 - enforcement.py:1-798 - halt.py:1-281 - audit.py:1-352 - daily_count.py:1-135 - model.py:1-149 - risk.py:1-512

核心组件

章节来源 - order_guard.py:97-215 - enforcement.py:455-617 - halt.py:72-163 - audit.py:172-352 - daily_count.py:72-135 - risk.py:142-247

架构总览

订单从代理侧发起,进入订单守卫后,先做轻量级前置检查(授权、过期、熔断),再读取市场与账户快照,交由规则引擎进行结构化与量化双重校验。通过后才会转发到券商;无论结果如何,都会写入审计并更新计数。熔断可在任意时刻通过文件哨兵触发,运行时观察到后可执行预取动作。

sequenceDiagram participant Agent as "代理/工具" participant Guard as "订单守卫" participant Enforce as "规则引擎" participant Broker as "券商接口" participant Audit as "审计" participant Halt as "熔断" Agent->>Guard : 调用写工具(下单/撤单) Guard->>Halt : halt_flag_set() alt 已熔断 Guard-->>Agent : 拒绝(状态=blocked) else 未熔断 Guard->>Guard : 解析意图/归一化名义金额 Guard->>Broker : 读取持仓/余额/报价 Guard->>Enforce : check_mandate(...) alt 通过 Guard->>Broker : 转发下单 Broker-->>Guard : 返回结果 Guard->>Audit : 写入审计/更新计数 Guard-->>Agent : 放行结果 else 违规 Guard-->>Agent : 拒绝(含BreachEvent) end end

图表来源 - order_guard.py:130-215 - enforcement.py:455-617 - audit.py:248-352 - halt.py:135-163

详细组件分析

订单守卫(LiveOrderGuardTool)

flowchart TD Start(["进入 execute"]) --> M["加载Mandate/校验版本"] M --> Exp{"是否过期?"} Exp -- 是 --> Deny1["拒绝: 需重新授权"] Exp -- 否 --> H["熔断检查 halt_flag_set"] H -- 是 --> Deny2["拒绝: 已熔断"] H -- 否 --> Int["解析订单意图"] Int --> Q{"能否解析?"} Q -- 否 --> Deny3["拒绝: 意图不可解析"] Q -- 是 --> N["归一化名义金额(数量×价格 vs 显式名义)"] N --> P{"能否定价?"} P -- 否 --> Deny4["拒绝: 无法定价(fail-closed)"] P -- 是 --> Snap["读取持仓/余额/报价"] Snap --> Check["check_mandate(...)"] Check --> Ok{"是否通过?"} Ok -- 是 --> Forward["转发至券商"] Forward --> Result{"券商返回错误?"} Result -- 是 --> AuditErr["审计: rejected/error, 不计日计数"] Result -- 否 --> Inc["审计: placed/accepted, 增加日计数"] Ok -- 否 --> Breach["拒绝/暂停(携带BreachEvent)"] AuditErr --> End(["结束"]) Inc --> End Breach --> End

图表来源 - order_guard.py:130-215 - order_guard.py:218-317 - order_guard.py:321-389

章节来源 - order_guard.py:97-215 - order_guard.py:218-317 - order_guard.py:321-389

风控规则引擎(check_mandate)

flowchart TD S["开始"] --> X1["排除列表?"] X1 -- 命中 --> R1["拒绝(universe)"] X1 -- 未命中 --> X2["允许品种?"] X2 -- 否 --> R2["拒绝(instrument)"] X2 -- 是 --> X3["资产类别?"] X3 -- 否 --> R3["拒绝(universe)"] X3 -- 是 --> X4["单笔名义金额<=上限?"] X4 -- 否 --> R4["拒绝(quantitative)"] X4 -- 是 --> X5["交易后总敞口<=上限?"] X5 -- 否 --> R5["拒绝(quantitative)"] X5 -- 是 --> X6["杠杆<=上限?"] X6 -- 否 --> R6["拒绝(quantitative)"] X6 -- 是 --> X7["日交易次数<=上限?"] X7 -- 否 --> R7["拒绝(quantitative)"] X7 -- 是 --> X8["买入时不超资金上限?"] X8 -- 否 --> R8["拒绝(quantitative)"] X8 -- 是 --> X9["市值/流动性地板?"] X9 -- 否 --> R9["拒绝(universe)"] X9 -- 是 --> OK["允许"]

图表来源 - enforcement.py:455-617

章节来源 - enforcement.py:455-617

熔断保护(halt)

flowchart TD T["trip_halt(by, reason, broker?)"] --> W["原子写入哨兵(JSON元数据)"] W --> O["on_halt_action(broker)"] O --> A{"是否注册动作?"} A -- 否 --> N["仅日志提示(后续订单仍被守卫拒绝)"] A -- 是 --> F["执行预取动作(取消挂单/可选平仓)"]

图表来源 - halt.py:72-108 - halt.py:135-163 - halt.py:218-281

章节来源 - halt.py:72-163 - halt.py:218-281

审计与日计数

章节来源 - audit.py:172-352 - daily_count.py:72-135

风险指标计算(quantlib.risk)

这些指标可用于: - 设定动态阈值(如基于 VaR 的动态名义金额/敞口限制) - 评估策略尾部风险,指导熔断与降级策略 - 作为顾问层(advisory)的参考信号(只读,不阻断)

章节来源 - risk.py:142-247 - risk.py:250-327 - risk.py:329-427 - risk.py:430-512

依赖关系分析

graph LR Guard["订单守卫"] --> Enforce["规则引擎"] Guard --> Halt["熔断"] Guard --> Audit["审计"] Guard --> Count["日计数"] Enforce --> Data["数据加载器"] Enforce --> Model["Mandate模型"] Halt --> FS["文件系统"]

图表来源 - order_guard.py:97-215 - enforcement.py:455-617 - halt.py:135-163 - audit.py:248-352 - daily_count.py:72-135 - model.py:46-149

章节来源 - order_guard.py:97-215 - enforcement.py:455-617 - halt.py:135-163 - audit.py:248-352 - daily_count.py:72-135 - model.py:46-149

性能与实时性

[本节为通用性能讨论,不直接分析具体文件]

故障排查指南

章节来源 - order_guard.py:471-573 - audit.py:248-352 - daily_count.py:106-135 - halt.py:111-163

结论

Vibe-Trading 的风险控制体系以“订单守卫 + 规则引擎 + 熔断保护 + 审计计数”为核心,形成多层防御: - 指令级:排除列表、品种/资产类别、单笔名义金额 - 组合级:总敞口、杠杆、市值/流动性地板 - 账户级:资金上限、日交易次数 - 全局级:文件系统熔断,支持预取动作 该设计遵循 fail-closed 原则,确保在任何数据缺失或异常情况下优先拒绝,保障资金安全。配合审计与 SSE 事件,可实现全链路可追溯与实时监控。

[本节为总结性内容,不直接分析具体文件]

附录:配置与监控清单

风控参数(来自 Mandate 模型)

章节来源 - model.py:46-149

监控指标与告警

章节来源 - halt.py:135-163 - daily_count.py:106-135 - audit.py:248-352

与订单系统集成与实时处理

章节来源 - order_guard.py:130-215 - order_guard.py:321-389 - audit.py:248-352