Skip to content

[feature] RiskEngine paper 真接入 + 配置加载(D-9) #3

Description

@mirror29

想解决的问题

`services/paper/src/inalpha_paper/execution/risk_engine.py` 框架已就绪,规则也已 Pydantic 驱动可从 TOML 加载(见 `execution/risk_rules/config.py`),但 paper service 启动时未必真加载这套配置——`RiskEngine` 可能默认 `rules=None`,等于裸跑 `OrderExecutor`,CLAUDE.md §5 明示 D-9 active TODO 就是"RiskEngine 规则化 + paper 真接入"。

后果:

提议的方向

  1. 配置加载:paper service startup 时从 `config/risk_rules.toml`(位置待定)加载 → 构造 RiskEngine 实例 → 注入到 OrderExecutor / live runner
  2. 接入路径:`POST /orders/submit` + `POST /plans/{id}/execute` 都过 RiskEngine.check() 才落库;不过则返 422 + 拦截原因写 audit
  3. rule 真激活:当前 `risk_rules/` 下若干 rule 类(cooldown / market_hours / max_drawdown / stoploss_guard / low_profit),逐条确认 `config.py` 能 enable 它们
  4. 可观测:每次 check 不论通过/拦截都写 audit log(一行 JSON),便于事后排查
  5. 测试:现有 `test_risk_engine_rules.py` / 各 `test_risk_rule_*.py` 已有单测,补一个 `test_risk_engine_e2e.py` 验证 startup 加载 + 拦截真实下单

这个建议属于哪个 Phase?

  • D-8b
  • D-9(RiskEngine 规则化 + paper 真接入)—— CLAUDE.md 当前 active TODO
  • D-10 及之后

是否破坏现有约束?

  • 只涉及 crypto 市场
  • 不让 LLM 获得直接下单路径 —— 反而增强护栏
  • 不动 `services/_shared/`
  • 不引入与 AGPL-3.0 不兼容的依赖

其他

验收标准

  1. paper service 启动 log 显示 RiskEngine 已加载 N 条规则
  2. agent 触发 `trade.create_plan → approve → execute` 时,违规单(如 quantity 超 max_notional)被拦,返 422
  3. 拦截在 audit log 里能看到 rule_name + 拦截原因
  4. live runner(issue [feature] paper live runner —— 让 promoted candidate 按行情自动跑(E2 / D-7) #1)跑起来后违规自动下单也被同一套规则拦

关联

优先级判断:HIGH —— D-9 CLAUDE.md 明示的当前 active TODO;不接入则执行层无防御,agent 自助下单风险敞口大。

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions