Risk 模块架构文档
本文档描述 Risk(风险管理)模块的架构设计、风控策略、组件结构和配置说明。
概述
Risk 模块是 Fire 量化交易系统的风险防控核心,采用三层风险管理架构,提供预交易检查、实时监控和风险告警的全流程风险控制。系统遵循”安全第一”原则,通过系统级、全局级和通道级的多层防护机制,确保交易安全。
核心功能
预交易检查
- 白名单验证: 确保只交易允许的标的
- 资金充足性: 验证账户资金是否满足订单需求
- 持仓限制: 控制单股和总体持仓比例
- 杠杆控制: 限制最大杠杆倍数
实时风险监控
- 回撤监控: 实时计算并监控最大回撤
- 日损失限制: 控制单日最大损失
- 持仓集中度: 监控投资组合集中度风险
- 动态指标更新: 毫秒级风险指标更新
风险告警与处理
- 分级告警: 警告、错误、严重三级告警
- 自动止损: 触发风控限制时自动平仓
- 违规记录: 记录所有风险违规事件
- 风险报告: 生成详细的风险分析报告
设计原则
- 安全第一: 风控优先于收益
- 实时响应: 毫秒级风险检查
- 多层防护: 系统/全局/通道三级风控
- 简单有效: 避免过度设计
- 规则扩展: 支持自定义风险规则
组件
三层风险架构图
graph TB
subgraph "第一层:系统级风控"
RE[RiskEngine<br/>基础风险引擎]
end
subgraph "第二层:全局风控"
GRM[GlobalRiskManager<br/>跨通道风险监控]
RG[RiskGuard<br/>风险守卫]
end
subgraph "第三层:通道级风控"
CRM1[ChannelRiskManager<br/>Aggressive 通道]
CRM2[ChannelRiskManager<br/>Balanced 通道]
CRM3[ChannelRiskManager<br/>Conservative 通道]
end
RE --> GRM
RE --> RG
GRM --> CRM1
GRM --> CRM2
GRM --> CRM3
style RE fill:#ff6b6b
style GRM fill:#ffa94d
style RG fill:#ffa94d
style CRM1 fill:#51cf66
style CRM2 fill:#51cf66
style CRM3 fill:#51cf66
核心组件说明
RiskEngine (系统级风险引擎)
- 职责: 执行基础风险规则检查
- 实现类:
backend.core.trading.risk.risk_engine.RiskEngine - 主要方法:
validate_order(): 预交易订单验证check_portfolio_risk(): 投资组合风险检查get_risk_metrics(): 计算风险指标update_daily_metrics(): 更新日度指标
- 状态管理: 有状态(维护风险监控状态)
GlobalRiskManager (全局风险管理器)
- 职责: 跨通道的全局风险监控和聚合
- 实现类:
backend.core.trading.services.risk_manager.GlobalRiskManager - 主要方法:
register_channel(): 注册通道风险管理器check_global_risk(): 全局风险检查update_global_metrics(): 更新全局指标get_aggregated_risk_report(): 生成聚合报告
- 状态管理: 有状态(维护全局风险状态)
RiskGuard (风险守卫)
- 职责: 实时风险监控和自动响应
- 实现类:
backend.core.trading.services.risk_guard.RiskGuard - 主要功能:
- 实时回撤监控
- 自动止损触发
- 风险事件记录
- 告警回调执行
ChannelRiskManager (通道级风险管理器)
- 职责: 单个交易通道的独立风险管理
- 实现类:
backend.core.trading.services.risk_manager.ChannelRiskManager - 主要功能:
- 通道回撤监控
- 通道日损失限制
- 持仓数量控制
- 违规历史记录
依赖关系
内部依赖
| 模块名 | 用途 |
|---|---|
core.trading.risk.risk_engine |
系统级风险引擎 |
core.trading.services.risk_manager |
全局和通道级风险管理 |
core.trading.services.risk_guard |
风险守卫 |
core.trading.models |
交易数据模型 |
core.models.trading |
订单和持仓模型 |
外部依赖
| 库名 | 版本要求 | 用途 |
|---|---|---|
numpy |
≥1.24.0 | 风险指标计算 |
pandas |
≥2.3.0 | 数据分析 |
数据流
预交易风险检查流程
sequenceDiagram
participant Strategy as 策略
participant RE as RiskEngine
participant GRM as GlobalRiskManager
participant CRM as ChannelRiskManager
participant Trading as 交易引擎
Strategy->>RE: 提交订单
RE->>RE: 白名单检查
RE->>RE: 资金充足性检查
RE->>RE: 持仓比例检查
alt 系统级检查通过
RE->>GRM: 全局风险检查
GRM->>GRM: 全局回撤检查
GRM->>GRM: 全局日损失检查
alt 全局检查通过
GRM->>CRM: 通道级检查
CRM->>CRM: 通道回撤检查
CRM->>CRM: 持仓数量检查
CRM-->>Trading: 允许交易
else 全局检查失败
GRM-->>Strategy: 拒绝订单
end
else 系统级检查失败
RE-->>Strategy: 拒绝订单
end
实时风险监控流程
flowchart LR
Start([开始监控]) --> Collect[收集市场数据]
Collect --> Update[更新持仓价值]
Update --> CalcMetrics[计算风险指标]
CalcMetrics --> CheckDD{检查回撤}
CheckDD -->|超限| Alert[触发告警]
CheckDD -->|正常| CheckDL{检查日损失}
CheckDL -->|超限| StopLoss[自动止损]
CheckDL -->|正常| Record[记录指标]
Alert --> Action[执行风控动作]
StopLoss --> Action
Record --> Wait[等待下次更新]
Wait --> Collect
style Alert fill:#ff6b6b
style StopLoss fill:#ff6b6b
style Action fill:#ffa94d
数据结构
输入数据格式
风险配置 (RiskConfig):
@dataclass
class RiskConfig:
max_position_ratio: Decimal # 单股最大持仓比例
stop_loss_ratio: Decimal # 止损比例
max_drawdown: Decimal # 最大回撤
allowed_symbols: List[str] # 白名单
max_single_order_ratio: Decimal # 单笔订单最大比例
max_daily_loss_ratio: Decimal # 日最大亏损比例
min_cash_ratio: Decimal # 最小现金比例
max_leverage: Decimal # 最大杠杆
输出数据格式
风险检查结果 (RiskResult):
@dataclass
class RiskResult:
is_valid: bool # 是否通过
errors: List[str] # 错误列表
warnings: List[str] # 警告列表
metrics: RiskMetrics # 风险指标
# 风险指标包括:
# - current_drawdown: 当前回撤
# - daily_pnl: 日盈亏
# - position_ratio: 持仓比例
# - leverage: 杠杆率
接口
Python API
RiskEngine 接口
class RiskEngine:
"""系统级风险引擎"""
def validate_order(
self,
order: Order,
portfolio: Portfolio
) -> RiskResult:
"""验证订单风险"""
pass
def check_portfolio_risk(
self,
portfolio: Portfolio
) -> RiskResult:
"""检查投资组合风险"""
pass
def get_risk_metrics(
self,
portfolio: Portfolio
) -> RiskMetrics:
"""计算风险指标"""
pass
风险管理使用示例
from backend.core.trading.risk.risk_engine import RiskEngine
from backend.core.trading.services.risk_manager import GlobalRiskManager
# 初始化风险引擎
risk_config = {
"max_position_ratio": 0.1,
"max_drawdown": 0.15,
"allowed_symbols": ["AAPL", "GOOGL"],
"max_daily_loss_ratio": 0.02
}
risk_engine = RiskEngine(user_id="user_123", risk_config=risk_config)
# 验证订单
result = risk_engine.validate_order(order, portfolio)
if not result.is_valid:
print(f"订单被拒绝: {result.errors}")
# 检查投资组合风险
portfolio_risk = risk_engine.check_portfolio_risk(portfolio)
if portfolio_risk.warnings:
print(f"风险警告: {portfolio_risk.warnings}")
扩展点
自定义风险规则
from backend.core.trading.risk import BaseRiskRule
class CustomRiskRule(BaseRiskRule):
"""自定义风险规则"""
def __init__(self, params: Dict[str, Any]):
self.params = params
def check(self, order: Order, portfolio: Portfolio) -> RiskResult:
"""执行自定义风险检查"""
# 实现自定义风险检查逻辑
# 返回 RiskResult 表明检查结果
pass
注册自定义规则
from backend.core.trading.risk import RiskRuleRegistry
# 注册自定义规则
RiskRuleRegistry.register(
rule_name="custom_volatility_check",
rule_class=CustomRiskRule,
params={"max_volatility": 0.3}
)
配置
实际配置方式
Risk 模块的配置通过以下方式管理:
- 风险参数配置: 通过策略配置或 API 传入
- 环境变量: 通过
infrastructure/config/settings.py - 运行时参数: 通过交易会话配置
默认风险参数
| 参数名 | 默认值 | 说明 |
|---|---|---|
max_position_ratio |
0.1 | 单股最大持仓 10% |
stop_loss_ratio |
0.05 | 止损比例 5% |
max_drawdown |
0.15 | 最大回撤 15% |
max_single_order_ratio |
0.05 | 单笔订单最大 5% |
max_daily_loss_ratio |
0.02 | 日最大亏损 2% |
min_cash_ratio |
0.1 | 最小现金比例 10% |
max_leverage |
1.0 | 最大杠杆 1倍 |
通道风险配置示例
# Aggressive 通道配置
aggressive_risk = {
"max_drawdown": 0.20, # 允许更高回撤
"max_daily_loss": 0.03, # 允许更高日损失
"max_position_count": 15, # 允许更多持仓
"max_leverage": 1.5 # 允许杠杆
}
# Conservative 通道配置
conservative_risk = {
"max_drawdown": 0.10, # 严格控制回撤
"max_daily_loss": 0.01, # 严格控制日损失
"max_position_count": 5, # 限制持仓数量
"max_leverage": 0.8 # 不使用杠杆
}