AI Market Maker风险管理台拆解:仓位规模与波动率控制的实现原理
【免费下载链接】ai-market-makerAgentic AI Hedge Fund OS (AIMM)项目地址: https://gitcode.com/gh_mirrors/ai/ai-market-maker
AI Market Maker(AIMM)是一个 Agentic AI 对冲基金操作系统,让多个 AI 交易 Agent 像真实投研团队一样协作交易。它的风险管理台由两个核心 Agent 组成:风险管理台(Risk Desk)负责按波动率计算每个标的的仓位规模与止损价,风险守卫(Risk Guard)则在最后一道环节行使一票否决权。本文拆解这两者如何实现"波动率控制仓位、回撤控制生死"的风控闭环。
风险管理台的双角色:建议仓位 + 一票否决
在 AIMM 的 Agent 编排流水线中,风险管理台位于两个关键位置:
- 风险顾问(建议层):在所有 9 个 Tier-0 分析 Agent(宏观、新闻、技术、情绪等)完成分析之后、桌面辩论(Desk Debate)开始之前运行,为下游组合节点输出"建议仓位 + 波动率画像"。它只有建议权,没有否决权。
- 风险守卫(治理层):位于组合执行提案之后、真实下单之前,是唯一拥有Veto Power(一票否决)的治理节点,风险评分超过阈值时直接否决整个提案。
这套"建议在前、否决在后"的设计,对应两个源码文件:
- 风险管理台:src/agents/risk_management.py
- 风险守卫:src/agents/governance/risk_guard.py
两者的角色分工与数据契约在 docs/personas/10_risk_desk.md 中完整定义。
波动率怎么算:20 根 K 线的相对波动率
风险管理台不需要复杂的风险模型。它对每个标的取最近最多 20 根 K 线的收盘价,计算标准差并除以均价,得到一个"相对波动率":
- 均价 = 近 20 根收盘价的算术平均
- 波动率 = 收盘价标准差 / 均价
- 数据不足 2 根时退化为固定 0.02(2%)的保守估计
实现在 src/agents/risk_management.py#L27-L36。
这个设计有两个优点:短窗口能紧跟市场 regime 变化(行情变野时仓位自动缩小);数据不足时给默认值保证回测第一根 K 线就能正常出仓位。
波动率仓位公式:cap / (1 + volatility)
拿到波动率后,仓位规模用一条非常直观的公式控制:
position_size = min(上限, 上限 / (1 + 波动率)) × 风险乘数其中"上限"来自基金策略文件的risk_position_cap_usd(默认2800 美元),即任何单一标的的建议仓位不会超过这个值。核心逻辑在 src/agents/risk_management.py#L42:
| 波动率 | 计算效果 | 含义 |
|---|---|---|
| 0.05(较平稳) | 上限 × 约 0.95 | 接近满额度建仓 |
| 0.20(波动较大) | 上限 × 约 0.83 | 明显降杠杆 |
| 1.00(极端波动) | 上限 × 0.5 | 仓位自动腰斩 |
波动率每翻一倍,仓位就按 1/(1+波动率) 递减——这是典型的波动率倒数加权思路,保证组合承担的风险暴露与市场实际波动匹配。
止损与估值修正:什么时候仓位再减半?
除波动率外,风险管理台还做两件防御动作:
- 止损价:按策略文件的
stop_loss_pct(默认 2.5%)计算,止损价 = 现价 × (1 − 止损比例),见 src/agents/risk_management.py#L43-L44。 - 估值修正:如果估值 Agent 给出的公允价格低于当前市价(即"市场价偏贵"),风险乘数直接取0.5,仓位再砍一半;估值合理或偏低时乘数为 1.0。
这样,波动率和估值两个维度会叠加收缩仓位——市场又贵又野时,单标的仓位可能只有上限的 40% 左右。
风险守卫否决机制:回撤、杠杆、急停三重闸门
风险守卫RiskGuardAgent对每份执行提案计算一个0~1 的风险评分,评分 >0.8 直接 VETO(否决),见 src/agents/governance/risk_guard.py#L40-L55。评分由三类闸门驱动:
1️⃣ 回撤熔断(Drawdown Stop)
用组合净值与其历史峰值计算回撤比例:dd = 1 − 净值 / 峰值。一旦达到策略里的risk_max_drawdown_stop(默认12%),风险评分直接置 1.0,必然触发否决——这是组合级的"断路器",见 src/agents/governance/risk_guard.py#L116-L129。
2️⃣ 杠杆/敞口软闸门
用总敞口 / 净值 计算实际杠杆,与策略的max_leverage(默认 2 倍)比较:
- 杠杆超过上限102%:评分至少 0.95,接近必否决;
- 杠杆接近上限90%以上:评分至少 0.75,进入高危区。
这是"软闸门"——不是硬性拒单,而是通过抬高风险评分影响下游决策。
3️⃣ 急停开关(Kill Switch)
只要设置了环境变量AIMM_KILL_SWITCH或AIMM_RISK_GUARD_KILL_SWITCH,所有执行提案无条件否决,评分锁定 1.0。这是留给运维人员的"物理急停按钮",见 src/agents/governance/risk_guard.py#L28-L38。
此外还有一个兜底:如果拿不到足够的组合快照无法计算,评分默认给0.35并标注"信息不足、默认谨慎"——宁可保守,不误放行,见 src/agents/governance/risk_guard.py#L144-L146。
策略配置:一份 JSON 管住所有风控参数
上述所有阈值都不是写死在代码里的,而是集中在单一策略文件中作为"单一事实来源",由 src/config/policy_loader.py 严格加载并做边界校验:
- 默认策略:config/policy.default.json
- 参数含义:docs/policy-schema.md
- 参数类型定义:src/config/policy_types.py
与风控直接相关的核心参数速查(以 config/policy.default.json#L17-L19 为例):
| 参数 | 默认值 | 作用 |
|---|---|---|
risk_position_cap_usd | 2800 | 单标的仓位上限(美元) |
stop_loss_pct | 0.025 | 止损比例(2.5%) |
max_leverage | 2 | 组合最大杠杆 |
risk_max_drawdown_stop | 0.12 | 回撤熔断线(12%) |
risk_kill_switch_cooldown_bars | 120 | 熔断后冷却 K 线数 |
项目还内置了针对不同风格的策略预设(如 config/policy.buffett.json、config/policy.daytrade.json):价值型(Buffett 风格)回撤线更紧(12%、冷却 240 根 K 线),而日内/剥头皮风格放宽到 20%~22% 并缩短冷却期——风格不同,风控松紧不同。
小结:三层防线如何构成风控闭环
AIMM 的风险管理台可以概括为三道递进的防线:
- 仓位层(风险管理台):波动率倒数加权 + 估值修正 + 固定上限,从源头控制每笔交易的规模;
- 熔断层(策略参数):回撤达 12% 触发组合级断路器并进入冷却期,防止情绪化追单;
- 否决层(风险守卫):杠杆越界、回撤触线或急停开关生效时,一票否决所有执行提案。
对新手而言,这套架构最值得借鉴的正是它的分层思想:风控不靠单一指标,而是"仓位收缩 → 熔断冷却 → 最终否决"层层递进。如果你希望深入了解每个风控 Agent 的输入输出契约与 SOP,建议阅读 docs/personas/10_risk_desk.md 和风险守卫的技能说明 src/agents/governance/risk_guard/SKILL.md。
【免费下载链接】ai-market-makerAgentic AI Hedge Fund OS (AIMM)项目地址: https://gitcode.com/gh_mirrors/ai/ai-market-maker
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考