Skip to content

RiskGuard v1.4.0 — 每日体检 + 压力测试:AI 帮你盯盘的那一层

Latest

Choose a tag to compare

@SilentFleetKK SilentFleetKK released this 10 Jul 03:59

回应"AI 帮你 24 小时盯盘,普通人也能用上机构级风控武器"这个刚需场景。

🧭 先说清楚:逐层比对之后的判断

机构级风控拆开是四层:实时监控 → 异常检测 → 硬编码熔断线 → 压力测试。逐层核实 RiskGuard 现状:

  • 硬编码熔断线——RiskGuard 自 v1.0 起就在做的事,且是唯一的立库使命(五轮对抗审查验证过)。
  • 实时监控——核心机制(RiskMonitor)已有,这版补上它的交付形态:每日体检。
  • 压力测试——原语已在(backtest 模块),这版补上一键推演当前持仓的顺手入口。
  • 异常检测——明确排除。统计/AI 判定"这次不一样"是数据科学能力,和本库"确定性、fail-closed、绝不模糊判断"的设计哲学是两种不同的产品。这一层交给外部 AI agent:agent 负责观察、判断、叙述,RiskGuard 只保证它拿到的事实是真的、以及在规则被触发时毫不犹豫地执行——这条线不能由 AI 决定

🌙 新增:riskguard.reporting

from riskguard.reporting import build_digest, render_digest_text, run_stress_test, render_stress_text

# 每日体检:结构化摘要,交给 AI agent 去叙述、去推送提醒
report = build_digest(engine, portfolio)
report.to_dict()

# 压力测试:"如果集体跌 20%,我扛得住吗"——绝对只读,零副作用
result = run_stress_test(engine, portfolio, shock_pct=-0.20)

CLI 同步支持多持仓输入:

$ riskguard digest --equity 95000 --position AAPL:80:190 --position TSLA:-40:250 --state-db risk.db
$ riskguard stress --equity 95000 --shock -0.20 --position AAPL:80:190 --position TSLA:-40:250

压力测试的只读承诺很硬:不触发熔断、不写审计、不碰持久化——即便 --state-db 指向一个还不存在的文件,也不会在磁盘上留下任何新文件。

🛡️ 发布前对抗审查(1 critical + 1 high + 2 low)

新模块经一轮聚焦审查,逮到一个 critical:账户被冲击打穿仓(权益 ≤ 0,恰恰是压力测试最该报警的场景)时,position_breaches 会因为 Portfolio.weight() 的除零防御性默认值而漏报所有超限仓位——同一份结果里总敞口比例却正确显示 inf,两个字段自相矛盾,CLI 的退出码可能因此静默显示"一切正常"。已用新增的 weight_or_inf() 统一修复(不改动已被多轮验证过的 Portfolio.weight() 核心方法)。详见 CHANGELOG

774 项测试全绿

⚡ 升级

pip install -U "riskguard @ git+https://github.com/SilentFleetKK/riskguard.git"