量化交易系统架构设计
概述
本系统是一个完整的量化交易平台,支持实时交易和回测功能,具备多币种支持、风险管理和统一日志管理等功能。系统采用前后端分离架构,基于现代技术栈构建,具备高性能、高可用、易扩展的特点。
系统架构图
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 真实资产模式
- 交易执行: 通过券商API进行真实交易
- 数据来源: 券商实时数据
- 风险控制: 严格的资金和持仓限制
2.2 模拟资产模式
- 交易执行: 通过模拟交易引擎
- 数据来源: 券商数据 + 模拟数据生成
- 风险控制: 可配置的模拟资金
3. 核心模块概述
3.1 模拟交易模块 (SimulationEngine)
- 核心功能: 模拟订单处理、持仓管理、资金管理
- 成交判定: 基于市场数据的智能成交判定逻辑
- 数据存储: Redis缓存 + 数据库持久化
- 详细设计: 参见 交易模块架构文档
3.2 策略引擎 (StrategyEngine)
- 策略接口: 抽象基类定义策略标准接口
- 策略上下文: 提供策略执行环境和依赖注入
- 生命周期管理: 策略启动、停止、暂停、恢复
- 初始化生命周期: 完整的初始化状态管理,确保历史数据加载完成
- 统一日志管理: 所有模块日志通过StrategyEngine统一上报
- 被动执行模式: 策略完全被动,接收数据推送而非主动轮询
- 详细设计: 参见 策略模块架构文档
3.3 风险管理模块 (RiskEngine)
- 风险控制: 多维度风险检查和限制
- 风险指标: VaR、最大回撤、波动率等指标计算
- 风险配置: 支持预设配置和用户自定义
- 详细设计: 参见 风险管理模块架构文档
3.4 数据源模块 (DataAdapter)
- 统一接口: 通过适配器模式统一不同数据源
- 客户端工厂: 统一管理外部API客户端
- 缓存优化: 多级缓存提高数据访问性能
- 详细设计: 参见 数据源模块架构文档
数据流设计
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. 关键设计原则
- 策略被动接收:策略不主动获取实时数据,只处理推送的数据
- 历史数据按需查询:策略需要历史数据时,直接从数据库/缓存查询
- 交易模块被动调用:交易模块不主动运行,只处理策略触发的交易信号
- 模拟交易模块主动推送:模拟交易模块主动推送历史数据和模拟成交结果
- 量化交易系统统一调度:负责协调所有模块间的数据流
- 模式隔离:实时交易模式调用长桥API,回测模式只使用数据库数据
- 数据粒度统一:策略使用分钟级数据,保持实时数据和历史数据的一致性
- 异步初始化:API立即返回成功,后台异步进行完整初始化
- 统一日志管理:所有模块日志通过StrategyEngine统一上报和序号管理
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 数据粒度说明
- 策略数据需求:策略只需要分钟级数据,不需要天级别聚合数据
- 实时数据:接收分钟级实时数据
- 历史数据:从数据库获取分钟级历史数据
- 数据一致性:实时数据和历史数据都是分钟级,保持一致性
- 技术指标计算:基于分钟级价格序列计算EMA、MACD等技术指标
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推送、图表展示 |