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

量化交易系统架构设计

概述

本系统是一个完整的量化交易平台,支持实时交易和回测功能,具备多币种支持、风险管理和统一日志管理等功能。系统采用前后端分离架构,基于现代技术栈构建,具备高性能、高可用、易扩展的特点。

系统架构图

1. 整体架构层次

graph TB
    subgraph "前端交互层"
        FE1[启动页面<br/>/trading/start]
        FE2[历史记录<br/>/trading/list]
        FE3[交易详情<br/>/trading/detail/:id]
    end
    
    subgraph "API网关层"
        API1[Trading API<br/>交易管理]
        API2[Strategy API<br/>策略管理]
        API3[Simulation API<br/>模拟交易]
        API4[Risk API<br/>风险管理]
    end
    
    subgraph "业务服务层"
        SVC1[TradingService<br/>交易服务]
        SVC2[StrategyService<br/>策略服务]
        SVC3[SimulationService<br/>模拟交易服务]
        SVC4[RiskService<br/>风险服务]
    end
    
    subgraph "核心引擎层"
        ENG1[TradingEngine<br/>交易引擎<br/>RealTradingEngine/SimulationTradingEngine]
        ENG2[StrategyEngine<br/>策略引擎<br/>统一日志管理<br/>被动数据接收]
        ENG3[SimulationEngine<br/>模拟交易引擎<br/>订单持久化<br/>多币种支持]
        ENG4[RiskEngine<br/>风险引擎<br/>全局/个股风险控制]
        ENG5[TradingSessionEngine<br/>量化交易系统<br/>统一编排<br/>异步初始化]
        ENG6[TimeSeriesController<br/>时序控制器<br/>回测时间管理]
    end
    
    subgraph "统一数据源层"
        ADAPTER1[AssetAdapter<br/>资产适配器]
        ADAPTER2[QuoteAdapter<br/>行情适配器]
        ADAPTER3[TradeAdapter<br/>交易适配器]
        ADAPTER4[DataAdapter<br/>数据适配器]
    end
    
    subgraph "外部数据源"
        EXT1[LongPort API<br/>券商接口]
        EXT2[历史数据存储<br/>回测数据]
        EXT3[Redis缓存<br/>实时缓存]
        EXT4[数据库存储<br/>持久化存储]
    end
    
    %% 依赖关系
    FE1 --> API1
    FE2 --> API1
    FE3 --> API1
    
    API1 --> SVC1
    API2 --> SVC2
    API3 --> SVC3
    API4 --> SVC4
    
    SVC1 --> ENG1
    SVC2 --> ENG2
    SVC3 --> ENG3
    SVC4 --> ENG4
    
    ENG5 --> ENG1
    ENG5 --> ENG2
    ENG5 --> ENG3
    ENG5 --> ENG4
    ENG5 --> ENG6
    
    ENG1 --> ADAPTER1
    ENG2 --> ADAPTER2
    ENG3 --> ADAPTER1
    ENG4 --> ADAPTER1
    ENG6 --> ADAPTER2
    
    ADAPTER1 --> EXT1
    ADAPTER2 --> EXT2
    ADAPTER3 --> EXT1
    ADAPTER4 --> EXT2
    
    EXT3 --> ADAPTER1
    EXT4 --> ADAPTER1

2. 核心模块依赖关系

graph TB
    subgraph "量化交易系统核心"
        TSE[TradingSessionEngine<br/>统一调度中心<br/>异步初始化流程]
    end
    
    subgraph "策略模块"
        SE[StrategyEngine<br/>策略管理器+统一日志中心<br/>初始化生命周期管理<br/>被动数据接收]
        BS[BaseStrategy<br/>策略基类<br/>被动执行模式<br/>统一日志接口]
        SF[StrategyFactory<br/>策略工厂]
        MACD[MACDStrategy<br/>MACD策略<br/>技术指标预计算]
        RSI[RSIStrategy<br/>RSI策略]
        BB[BollingerBandsStrategy<br/>布林带策略]
    end
    
    subgraph "交易模块"
        TE[TradingEngine<br/>交易引擎<br/>RealTradingEngine/SimulationTradingEngine]
        SE2[SimulationEngine<br/>模拟交易引擎<br/>订单持久化<br/>多币种支持]
    end
    
    subgraph "风险管理模块"
        RE[RiskEngine<br/>风险引擎<br/>全局/个股风险控制]
        RC[RiskConfig<br/>风险配置<br/>最大持仓/止损/回撤]
    end
    
    subgraph "数据模块"
        QA[QuoteAdapter<br/>行情适配器]
        AA[AssetAdapter<br/>资产适配器]
        TA[TradeAdapter<br/>交易适配器]
    end
    
    %% 核心依赖关系
    TSE --> SE
    TSE --> TE
    TSE --> RE
    
    SE --> BS
    SE --> SF
    SE --> QA
    
    TE --> SE2
    TE --> AA
    TE --> TA
    
    RE --> RC
    RE --> AA
    
    BS --> TE
    BS --> QA
    BS --> SE
    
    MACD --> BS
    RSI --> BS
    BB --> BS

核心模块设计

模块架构文档

量化交易系统采用模块化设计,各核心模块都有详细的架构文档:

1. 交易模式管理 (TradingMode)

1.1 实时交易模式

1.2 回测模式

2. 资产模式管理 (AssetMode)

2.1 真实资产模式

2.2 模拟资产模式

3. 核心模块概述

3.1 模拟交易模块 (SimulationEngine)

3.2 策略引擎 (StrategyEngine)

3.3 风险管理模块 (RiskEngine)

3.4 数据源模块 (DataAdapter)

数据流设计

1. 四种交易模式数据流

graph TB
    subgraph "实时交易 + 模拟资产"
        A1[券商API] --> A2[WebSocket接收]
        A2 --> A3[数据适配器]
        A3 --> A4[量化交易系统<br/>异步初始化]
        A4 --> A5[策略被动接收<br/>统一日志管理]
        A5 --> A6[交易模块]
        A6 --> A7[模拟交易模块]
        A7 --> A8[挂单成交推送]
    end
    
    subgraph "实时交易 + 真实资产"
        B1[券商API] --> B2[WebSocket接收]
        B2 --> B3[数据适配器]
        B3 --> B4[量化交易系统<br/>异步初始化]
        B4 --> B5[策略被动接收<br/>统一日志管理]
        B5 --> B6[交易模块]
        B6 --> B7[券商API]
        B7 --> B8[真实挂单成交]
    end
    
    subgraph "回测模式 + 模拟资产"
        C1[数据库历史数据] --> C2[量化交易系统<br/>异步初始化]
        C2 --> C3[策略被动接收<br/>统一日志管理]
        C3 --> C4[交易模块]
        C4 --> C5[模拟交易模块]
        C5 --> C6[模拟挂单成交]
    end
    
    subgraph "回测模式 + 真实资产"
        D1[数据库历史数据] --> D2[量化交易系统<br/>异步初始化]
        D2 --> D3[策略被动接收<br/>统一日志管理]
        D3 --> D4[交易模块]
        D4 --> D5[券商API]
        D5 --> D6[真实挂单成交]
    end

2. 初始化生命周期管理

2.1 异步初始化流程

sequenceDiagram
    participant User as 用户
    participant API as TradingService
    participant TSE as TradingSessionEngine
    participant SE as StrategyEngine
    participant TE as TradingEngine
    participant RE as RiskEngine
    
    User->>API: 启动交易会话
    API->>API: 更新数据库状态为RUNNING
    API->>User: 立即返回成功 (0.07秒)
    
    par 异步初始化
        API->>TSE: 启动交易会话引擎
        TSE->>TSE: 标记为启动中状态
        TSE->>TE: 启动交易引擎
        TSE->>SE: 启动策略引擎
        SE->>SE: 加载策略历史数据
        SE->>SE: 预计算技术指标
        SE->>TSE: 初始化完成
        TSE->>TSE: 启动数据流处理
        API->>RE: 创建风险管理引擎
    end
    
    Note over User: 前端立即看到状态变化<br/>后台继续初始化

2.2 策略模块初始化生命周期

stateDiagram-v2
    [*] --> 创建策略引擎
    创建策略引擎 --> 添加策略
    添加策略 --> 设置策略引擎引用
    设置策略引擎引用 --> 策略初始化
    策略初始化 --> 标记策略初始化完成
    标记策略初始化完成 --> 启动策略引擎
    启动策略引擎 --> 加载历史数据
    加载历史数据 --> 预计算技术指标
    预计算技术指标 --> 初始化完成
    初始化完成 --> 等待数据推送
    等待数据推送 --> 处理市场数据
    处理市场数据 --> 等待数据推送

3. 统一数据流架构

sequenceDiagram
    participant DS as 数据源
    participant TSE as TradingSessionEngine
    participant SE as StrategyEngine
    participant BS as BaseStrategy
    participant TE as TradingEngine
    participant RE as RiskEngine
    participant API as 券商API/模拟交易
    
    DS->>TSE: 市场数据推送
    TSE->>SE: process_market_data()
    SE->>BS: on_market_data()
    
    Note over BS: 策略被动接收数据<br/>生成交易信号
    
    BS->>RE: 风险检查
    RE->>BS: 风险验证结果
    
    alt 风险检查通过
        BS->>TE: submit_order()
        TE->>API: 执行交易
        API->>TE: 成交确认
        TE->>BS: 交易结果
    else 风险检查失败
        RE->>BS: 风险拒绝
    end
    
    BS->>SE: log_message()
    SE->>TSE: 日志推送

4. 统一日志管理系统

4.1 日志管理架构

graph TB
    subgraph "日志源"
        S1[策略模块]
        S2[交易引擎]
        S3[模拟交易模块]
        S4[风险管理引擎]
        S5[数据适配器]
        S6[量化交易系统]
    end
    
    subgraph "统一日志中心"
        SE[StrategyEngine<br/>统一日志管理器]
        WS[WebSocket服务工厂]
        REDIS[Redis日志存储]
    end
    
    subgraph "前端展示"
        FE[前端日志界面]
        WS2[WebSocket连接]
    end
    
    S1 --> SE
    S2 --> SE
    S3 --> SE
    S4 --> SE
    S5 --> SE
    S6 --> SE
    
    SE --> WS
    SE --> REDIS
    WS --> WS2
    WS2 --> FE

4.2 日志流程

sequenceDiagram
    participant Module as 任意模块
    participant SE as StrategyEngine
    participant WS as WebSocket服务
    participant Redis as Redis存储
    participant Frontend as 前端界面
    
    Module->>SE: log_message(message, type, component)
    SE->>SE: 生成序号
    SE->>Redis: 保存到session_logs:{session_id}
    SE->>WS: 发送WebSocket消息
    WS->>Frontend: 实时推送日志
    Frontend->>Frontend: 更新日志界面

5. 关键设计原则

6. 历史数据查询设计

6.1 策略历史数据需求

class Strategy(ABC):
    def get_historical_data(self, symbol: str, start_time: datetime, end_time: datetime) -> List[MarketData]:
        """策略需要历史数据时调用"""
        # 通过数据适配器从数据库/缓存获取分钟级历史数据
        return self.quote_adapter.get_historical_data(symbol, start_time, end_time)
    
    def calculate_indicators(self, symbol: str) -> Dict[str, Any]:
        """计算技术指标,可能需要历史数据"""
        # 获取最近N天的分钟级历史数据
        historical_data = self.get_historical_data(symbol, start_time, end_time)
        # 计算技术指标
        return self._calculate_indicators(historical_data)

6.2 数据适配器历史数据接口

class QuoteAdapter:
    def get_historical_data(self, symbol: str, start_time: datetime, end_time: datetime) -> List[MarketData]:
        """获取历史数据 - 实时交易和回测模式都使用相同接口"""
        # 从数据库/缓存获取分钟级历史数据
        # 不调用长桥API,避免回测模式下不必要的API调用
        # 支持分钟级数据,与实时数据保持一致
        pass

6.3 数据粒度说明

7. 时序控制设计

class TimeSeriesController:
    """时间序列控制器"""
    
    def __init__(self, start_time: datetime, end_time: datetime, timezone: str):
        self.start_time = start_time
        self.end_time = end_time
        self.timezone = timezone
        self.current_time = start_time
        self.is_paused = False
    
    async def run_backtest(self, strategy: Strategy):
        """运行回测"""
        while self.current_time <= self.end_time and not self.is_paused:
            # 1. 获取当前时间点的市场数据
            market_data = await self.get_market_data(self.current_time)
            
            # 2. 推送给策略引擎
            await strategy.on_market_data(market_data)
            
            # 3. 等待策略处理完成
            await self.wait_for_strategy_completion()
            
            # 4. 处理交易结果
            await self.process_trading_results()
            
            # 5. 推进到下一个时间点
            self.current_time += timedelta(minutes=1)
    
    async def wait_for_strategy_completion(self):
        """等待策略处理完成"""
        # 确保策略完成所有分析和交易决策
        pass

数据存储设计

1. 数据存储架构

graph TB
    subgraph "应用层"
        A[业务逻辑]
    end
    
    subgraph "缓存层"
        B[Redis缓存<br/>实时数据]
    end
    
    subgraph "持久化层"
        C[数据库<br/>历史数据]
    end
    
    subgraph "数据内容"
        D[交易会话]
        E[订单记录]
        F[持仓历史]
        G[风险事件]
        H[系统日志]
    end
    
    A --> B
    A --> C
    B --> D
    B --> E
    C --> F
    C --> G
    C --> H

2. 数据存储策略

数据类型 存储位置 存储策略 访问特点
交易会话 Redis + 数据库 实时缓存 + 持久化 频繁读写
订单记录 Redis + 数据库 活跃订单缓存 + 历史持久化 实时更新
持仓信息 Redis + 数据库 实时缓存 + 快照持久化 实时计算
风险事件 数据库 持久化存储 历史查询
系统日志 Redis + 数据库 实时缓存 + 持久化 实时推送

API设计

1. API架构

graph TB
    subgraph "前端层"
        FE[React前端]
    end
    
    subgraph "API网关层"
        API1[Trading API]
        API2[Strategy API]
        API3[Risk API]
        API4[Data API]
    end
    
    subgraph "业务服务层"
        SVC1[TradingService]
        SVC2[StrategyService]
        SVC3[RiskService]
        SVC4[DataService]
    end
    
    subgraph "核心引擎层"
        ENG1[TradingEngine]
        ENG2[StrategyEngine]
        ENG3[RiskEngine]
        ENG4[DataAdapter]
    end
    
    FE --> API1
    FE --> API2
    FE --> API3
    FE --> API4
    
    API1 --> SVC1
    API2 --> SVC2
    API3 --> SVC3
    API4 --> SVC4
    
    SVC1 --> ENG1
    SVC2 --> ENG2
    SVC3 --> ENG3
    SVC4 --> ENG4

2. 核心API端点

API类别 端点 功能 详细文档
交易管理 /api/v1/trading/ 交易会话管理 参见各模块架构文档
策略管理 /api/v1/strategies/ 策略配置管理 参见策略模块架构文档
风险管理 /api/v1/risk/ 风险配置和监控 参见风险管理模块架构文档
数据管理 /api/v1/data/ 数据导入和查询 参见数据源模块架构文档

前端界面设计

1. 前端架构

graph TB
    subgraph "页面层"
        P1[启动页面<br/>/trading/start]
        P2[列表页面<br/>/trading/list]
        P3[详情页面<br/>/trading/detail/:id]
    end
    
    subgraph "组件层"
        C1[策略配置组件]
        C2[风险配置组件]
        C3[实时监控组件]
        C4[性能分析组件]
    end
    
    subgraph "服务层"
        S1[API服务]
        S2[WebSocket服务]
        S3[状态管理]
    end
    
    P1 --> C1
    P1 --> C2
    P2 --> C3
    P3 --> C3
    P3 --> C4
    
    C1 --> S1
    C2 --> S1
    C3 --> S2
    C4 --> S1
    
    S1 --> API
    S2 --> WebSocket

2. 界面功能

页面 核心功能 技术特点
启动页面 交易会话创建、策略配置 表单验证、实时预览
列表页面 会话管理、状态监控 实时更新、批量操作
详情页面 实时监控、性能分析 WebSocket推送、图表展示