🇨🇳 简体中文
🇺🇸 English
🇯🇵 日本語
Skip to the content.

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 (系统级风险引擎)

GlobalRiskManager (全局风险管理器)

RiskGuard (风险守卫)

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 模块的配置通过以下方式管理:

  1. 风险参数配置: 通过策略配置或 API 传入
  2. 环境变量: 通过 infrastructure/config/settings.py
  3. 运行时参数: 通过交易会话配置

默认风险参数

参数名 默认值 说明
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            # 不使用杠杆
}

相关文档