量化交易系统架构
概述
Fire量化交易系统是一个支持多策略、多通道、多市场的自动化交易平台。本文档描述交易业务的整体架构设计和核心模块之间的关系。
注意:系统基础设施和工程架构请参考 基础架构文档。
系统目标
核心能力
- 多策略支持 - 支持技术指标、统计套利、机器学习等多种策略类型
- 多通道交易 - 支持激进、平衡、保守三种风险级别的并行交易通道
- 实盘与回测 - 统一的策略接口支持实盘交易和历史回测
- 风险管理 - 多层次的风险控制和实时监控
- 性能优化 - 低延迟的信号处理和订单执行
业务特性
| 特性 | 描述 | 实现方式 |
|---|---|---|
| 策略隔离 | 各策略独立运行互不干扰 | 独立的策略实例和上下文 |
| 通道并行 | 多通道同时运行不同配置 | 通道管理器和虚拟仓位 |
| 信号聚合 | 多策略信号智能综合 | 层次化投票系统 |
| 动态调仓 | 根据市场自动调整仓位 | 动态风险评估 |
| 实时监控 | 全流程状态实时可见 | WebSocket推送 |
业务架构全景
graph TB
subgraph "数据层"
MD[市场数据<br/>Market Data]
HD[历史数据<br/>Historical Data]
TD[交易数据<br/>Trade Data]
end
subgraph "交易核心层"
TSE[交易会话引擎<br/>TradingSessionEngine]
SE[策略引擎<br/>StrategyEngine]
TE[交易引擎<br/>TradingEngine]
RE[风险引擎<br/>RiskEngine]
end
subgraph "策略层"
BS[策略基类<br/>BaseStrategy]
TS[技术策略<br/>Technical]
SS[统计策略<br/>Statistical]
MS[机器学习<br/>ML Strategy]
end
subgraph "通道层"
CM[通道管理器<br/>ChannelManager]
CH1[激进通道<br/>Aggressive]
CH2[平衡通道<br/>Balanced]
CH3[保守通道<br/>Conservative]
end
subgraph "执行层"
OM[订单管理<br/>OrderManager]
PM[仓位管理<br/>PositionManager]
EM[执行引擎<br/>ExecutionEngine]
end
subgraph "分析层"
BT[回测引擎<br/>BacktestEngine]
PA[绩效分析<br/>Performance]
OPT[参数优化<br/>Optimizer]
end
MD --> TSE
HD --> TSE
TSE --> SE
TSE --> CM
SE --> BS
BS --> TS
BS --> SS
BS --> MS
CM --> CH1
CM --> CH2
CM --> CH3
SE --> TE
TE --> OM
TE --> PM
TE --> EM
SE --> RE
RE --> TE
TSE --> BT
BT --> PA
BT --> OPT
TE --> TD
核心模块设计
1. 交易会话引擎(TradingSessionEngine)
系统的中央调度器,负责协调所有模块的运行。
classDiagram
class TradingSessionEngine {
-session_id: str
-user_id: str
-trading_mode: TradingMode
-asset_mode: AssetMode
-trading_engine: TradingEngine
-simulation_engine: SimulationEngine
-channel_manager: ChannelManager
-quote_adapter: QuoteAdapter
-engine_status: EngineStatus
-is_running: bool
-is_paused: bool
+initialize() bool
+start() bool
+stop() bool
+pause() bool
+resume() bool
}
class TradingMode {
<<enumeration>>
LIVE
SIMULATION
BACKTEST
}
class AssetMode {
<<enumeration>>
REAL
SIMULATION
}
class EngineStatus {
<<enumeration>>
NOT_STARTED
INITIALIZING
READY
RUNNING
PAUSED
STOPPED
ERROR
}
TradingSessionEngine --> TradingMode
TradingSessionEngine --> AssetMode
TradingSessionEngine --> EngineStatus
核心职责:
- 会话生命周期管理
- 数据流调度和分发
- 模块协调和同步
- 状态监控和日志
2. 策略引擎(StrategyEngine)
管理所有交易策略的执行和信号生成。
classDiagram
class StrategyEngine {
-strategies: Dict[str, BaseStrategy]
-signal_aggregator: SignalAggregator
-voting_system: VotingSystem
+add_strategy(strategy)
+remove_strategy(name)
+process_market_data(data)
+aggregate_signals()
+get_final_signal()
}
class SignalAggregator {
-weights: Dict[str, float]
+aggregate(signals)
+update_weights()
}
class VotingSystem {
-voting_rules: List[Rule]
+vote(signals)
+get_consensus()
}
StrategyEngine --> SignalAggregator
StrategyEngine --> VotingSystem
信号处理流程:
- 接收市场数据
- 分发到各策略
- 收集策略信号
- 聚合和投票
- 生成最终信号
3. 多通道交易系统
支持不同风险偏好的并行交易通道。
classDiagram
class ChannelManager {
-channels: Dict[str, TradingChannel]
-allocation_strategy: AllocationStrategy
+create_channel(config)
+allocate_capital(total)
+rebalance_channels()
+get_channel_status()
}
class TradingChannel {
-channel_id: str
-risk_level: RiskLevel
-capital_allocation: float
-virtual_positions: Dict
-strategies: List[str]
+process_signal(signal)
+execute_trade()
+update_position()
}
class RiskLevel {
<<enumeration>>
AGGRESSIVE
BALANCED
CONSERVATIVE
}
ChannelManager --> TradingChannel
TradingChannel --> RiskLevel
通道特性对比:
| 通道类型 | 风险级别 | 资金配比 | 杠杆倍数 | 止损比例 | 策略权重 |
|---|---|---|---|---|---|
| 激进型 | 高 | 40% | 2-3x | 10% | 技术70% 动量30% |
| 平衡型 | 中 | 40% | 1-2x | 7% | 均衡分配 |
| 保守型 | 低 | 20% | 1x | 5% | 价值70% 防御30% |
4. 交易执行引擎
处理订单生成、执行和仓位管理。
stateDiagram-v2
[*] --> 信号接收
信号接收 --> 风险检查
风险检查 --> 订单生成: 通过
风险检查 --> [*]: 拒绝
订单生成 --> 订单验证
订单验证 --> 订单发送: 有效
订单验证 --> [*]: 无效
订单发送 --> 等待成交
等待成交 --> 部分成交
等待成交 --> 完全成交
等待成交 --> 订单取消
部分成交 --> 等待成交
完全成交 --> 仓位更新
订单取消 --> [*]
仓位更新 --> [*]
5. 风险管理系统
多层次的风险控制机制。
graph LR
subgraph "风险层级"
L1[预交易风控<br/>Pre-Trade]
L2[交易中风控<br/>In-Trade]
L3[后交易风控<br/>Post-Trade]
end
subgraph "风险指标"
M1[仓位风险<br/>Position Risk]
M2[市场风险<br/>Market Risk]
M3[流动性风险<br/>Liquidity Risk]
M4[操作风险<br/>Operational Risk]
end
subgraph "风控措施"
A1[限额控制<br/>Limit Control]
A2[自动止损<br/>Stop Loss]
A3[仓位调整<br/>Position Adjust]
A4[交易暂停<br/>Trade Halt]
end
L1 --> M1
L1 --> M2
L2 --> M3
L3 --> M4
M1 --> A1
M2 --> A2
M3 --> A3
M4 --> A4
风险控制规则:
| 风险类型 | 监控指标 | 阈值设置 | 触发动作 |
|---|---|---|---|
| 仓位风险 | 单股占比 | <30% | 限制加仓 |
| 杠杆风险 | 总杠杆率 | <3x | 降低杠杆 |
| 回撤风险 | 最大回撤 | <15% | 减仓或停止 |
| 集中度风险 | 行业集中度 | <50% | 分散配置 |
| 流动性风险 | 成交量比率 | <5% | 分批执行 |
📊 数据流架构
实时数据流
sequenceDiagram
participant Market as 市场数据源
participant TSE as 交易会话引擎
participant SE as 策略引擎
participant CM as 通道管理器
participant TE as 交易引擎
participant Broker as 券商接口
Market->>TSE: 推送行情数据
TSE->>SE: 分发市场数据
SE->>SE: 策略计算
SE->>TSE: 返回交易信号
TSE->>CM: 信号路由
CM->>CM: 通道分配
CM->>TE: 生成订单
TE->>Broker: 发送订单
Broker-->>TE: 成交回报
TE-->>TSE: 更新状态
TSE-->>SE: 通知策略
回测数据流
sequenceDiagram
participant HD as 历史数据
participant BT as 回测引擎
participant SE as 策略引擎
participant VTE as 虚拟交易引擎
participant PA as 绩效分析
HD->>BT: 加载历史数据
BT->>SE: 按时序推送
SE->>SE: 策略计算
SE->>BT: 返回信号
BT->>VTE: 模拟交易
VTE->>VTE: 虚拟撮合
VTE->>BT: 成交结果
BT->>PA: 记录交易
PA->>PA: 计算指标
PA-->>BT: 返回报告
策略体系
策略分类
graph TD
S[交易策略] --> T[技术分析]
S --> F[基本面分析]
S --> Q[量化策略]
S --> A[套利策略]
T --> T1[趋势跟踪]
T --> T2[均值回归]
T --> T3[动量策略]
F --> F1[价值投资]
F --> F2[成长投资]
F --> F3[事件驱动]
Q --> Q1[统计套利]
Q --> Q2[机器学习]
Q --> Q3[高频交易]
A --> A1[期现套利]
A --> A2[跨期套利]
A --> A3[跨市套利]
策略接口标准
class BaseStrategy(ABC):
"""策略基类接口"""
@abstractmethod
def initialize(self, context: StrategyContext) -> None:
"""策略初始化"""
pass
@abstractmethod
def on_market_data(self, data: MarketData) -> Signal:
"""处理市场数据,生成交易信号"""
pass
@abstractmethod
def on_order_status(self, order: Order) -> None:
"""处理订单状态更新"""
pass
@abstractmethod
def on_position_update(self, position: Position) -> None:
"""处理仓位更新"""
pass
策略注册表系统
Fire 使用基于装饰器的策略注册机制,实现策略的自动发现和管理。详细实现参见 策略系统架构。
注册表架构
graph TB
subgraph "策略开发"
Dev[开发新策略]
Deco[@register装饰器]
Meta[元数据定义]
end
subgraph "策略注册表"
Registry[StrategyRegistry<br/>单例]
StratMap[策略映射表<br/>_strategies]
MetaMap[元数据映射表<br/>_metadata]
end
subgraph "策略工厂"
Factory[StrategyFactory]
Create[create_strategy]
Validate[validate_config]
end
subgraph "策略引擎"
Engine[StrategyEngine]
Instance[策略实例]
end
Dev --> Deco
Deco --> Meta
Meta --> Registry
Registry --> StratMap
Registry --> MetaMap
Factory --> Registry
Create --> Registry
Validate --> Registry
Engine --> Factory
Factory --> Instance
当前已注册策略
| 策略ID | 分类 | 描述 | 最少历史数据 |
|---|---|---|---|
| MomentumBreakoutStrategy | MOMENTUM | 价格突破 + 成交量确认 | 50 |
| RSIMomentumStrategy | MOMENTUM | RSI + 趋势过滤 | 50 |
| MACDStrategy | TREND_FOLLOWING | MACD 金叉死叉 | 50 |
| MACrossStrategy | TREND_FOLLOWING | 双均线交叉 | 60 |
| TrendChannelStrategy | TREND_FOLLOWING | 通道突破 + ATR 止损 | 50 |
| BollingerBandsStrategy | MEAN_REVERSION | 布林带均值回归 | 50 |
| LowVolatilityStrategy | VOLATILITY | 低波动率选股 | 50 |
| VolumeSpikeStrategy | VOLUME | 成交量异动检测 | 50 |
| RSIStrategy | MOMENTUM | RSI 超买超卖(旧版) | 50 |
| MovingAverageCrossoverStrategy | TREND_FOLLOWING | 均线交叉(旧版) | 50 |
pandas-ta 技术指标集成
Fire 集成了专业的技术分析库 pandas-ta,提供 130+ 种技术指标。详细实现参见 策略系统架构。
集成架构
graph TB
subgraph "策略层"
Strategy[策略实例]
GetInd[get_indicator方法]
end
subgraph "指标缓存层"
L1[L1 全局缓存<br/>IndicatorCache]
L2[L2 实例缓存<br/>_indicator_cache]
end
subgraph "pandas-ta 层"
PTA[pandas-ta库]
RSI[ta.rsi]
SMA[ta.sma]
MACD[ta.macd]
ATR[ta.atr]
BBAND[ta.bbands]
end
subgraph "数据层"
DF[DataFrame<br/>OHLCV数据]
end
Strategy --> GetInd
GetInd --> L2
L2 --> L1
L1 --> PTA
PTA --> RSI
PTA --> SMA
PTA --> MACD
PTA --> ATR
PTA --> BBAND
DF --> PTA
支持的指标类别
| 类别 | 指标数量 | 典型指标 |
|---|---|---|
| 趋势指标 | 30+ | SMA, EMA, WMA, DEMA, TEMA, ADX, Aroon |
| 动量指标 | 20+ | RSI, MACD, Stochastic, CCI, CMO, ROC |
| 波动率指标 | 15+ | ATR, Bollinger Bands, Keltner Channel, Donchian |
| 成交量指标 | 15+ | OBV, CMF, MFI, AD, VWAP, PVT |
| 统计指标 | 10+ | ZSCORE, STDEV, VAR, MAD, Skew, Kurt |
| 其他指标 | 40+ | Ichimoku, Supertrend, Fibonacci, Pivot Points |
市场数据管理器 Pub/Sub 架构
Fire 使用 ChannelManager 直接分发模式,不使用独立的消息代理,保持架构简洁高效。
市场数据分发架构
graph TB
subgraph "数据源层"
DS[TradingSessionEngine<br/>接收市场数据]
end
subgraph "分发层"
CM[ChannelManager<br/>distribute_market_data]
end
subgraph "通道层"
CH1[激进通道<br/>TradingChannel]
CH2[稳健通道<br/>TradingChannel]
CH3[保守通道<br/>TradingChannel]
end
subgraph "策略层"
SE1[StrategyEngine<br/>策略组1]
SE2[StrategyEngine<br/>策略组2]
SE3[StrategyEngine<br/>策略组3]
end
DS --> CM
CM -->|并行分发| CH1
CM -->|并行分发| CH2
CM -->|并行分发| CH3
CH1 --> SE1
CH2 --> SE2
CH3 --> SE3
SE1 -->|投票信号| CH1
SE2 -->|投票信号| CH2
SE3 -->|投票信号| CH3
CH1 -->|聚合信号| CM
CH2 -->|聚合信号| CM
CH3 -->|聚合信号| CM
数据流程(实际实现)
sequenceDiagram
participant Engine as TradingSessionEngine
participant CM as ChannelManager
participant CH as TradingChannel
participant SE as StrategyEngine
participant S as Strategy
Engine->>CM: distribute_market_data(data)
Note over CM: 遍历所有活跃通道
par 并行分发到3个通道
CM->>CH: process_market_data(data)
CH->>SE: on_market_data(data)
loop 每个策略
SE->>S: on_market_data(data, is_warmup)
S->>S: 计算指标
S->>S: 生成信号
S-->>SE: 返回投票
end
SE-->>CH: 返回策略组投票
CH->>CH: aggregate_votes()
CH-->>CM: 返回聚合信号
end
CM->>CM: collect_signals()
Note over CM: 收集所有通道信号
数据分发机制
Fire 使用 ChannelManager 直接处理市场数据分发,无需单独的订阅管理器。详细实现参见 Trading 模块架构 和 Data Pipeline 模块架构。
核心特性:
- 并行分发到多个通道
- 每个通道独立处理数据
- 实时信号收集和聚合
策略生命周期管理
完整的策略生命周期包括:注册、创建、初始化、运行、暂停、恢复、停止和销毁。详细实现参见 策略系统架构。
生命周期状态图
stateDiagram-v2
[*] --> 已注册: @register装饰器
已注册 --> 已创建: create_strategy()
已创建 --> 已初始化: initialize()
已初始化 --> 预热中: warmup()
预热中 --> 运行中: start()
运行中 --> 暂停中: pause()
暂停中 --> 运行中: resume()
运行中 --> 已停止: stop()
暂停中 --> 已停止: stop()
已停止 --> 已销毁: destroy()
已销毁 --> [*]
预热中 --> 错误: 异常
运行中 --> 错误: 异常
错误 --> 已停止: error_handler()
主要生命周期阶段
| 状态 | 触发方法 | 描述 |
|---|---|---|
| 已注册 | @register装饰器 | 策略类注册到系统 |
| 已创建 | create_strategy() | 创建策略实例 |
| 已初始化 | initialize() | 初始化策略配置 |
| 预热中 | warmup() | 使用历史数据预热 |
| 运行中 | start() | 策略正常运行 |
| 暂停中 | pause() | 暂停交易信号 |
| 已停止 | stop() | 停止策略运行 |
| 已销毁 | destroy() | 释放资源 |
信号聚合机制
graph LR
subgraph "策略信号"
S1[MACD: 买入]
S2[RSI: 卖出]
S3[MA: 买入]
S4[BOLL: 持有]
end
subgraph "权重分配"
W1[MACD: 30%]
W2[RSI: 25%]
W3[MA: 25%]
W4[BOLL: 20%]
end
subgraph "投票系统"
V[加权投票<br/>买入: 55%<br/>卖出: 25%<br/>持有: 20%]
end
subgraph "最终信号"
F[买入信号<br/>置信度: 0.55]
end
S1 --> W1
S2 --> W2
S3 --> W3
S4 --> W4
W1 --> V
W2 --> V
W3 --> V
W4 --> V
V --> F
💼 仓位管理
虚拟仓位系统
每个交易通道维护独立的虚拟仓位,最后合并为实际仓位。
graph TD
subgraph "虚拟仓位"
VP1[激进通道<br/>AAPL: 1000<br/>GOOGL: 500]
VP2[平衡通道<br/>AAPL: 500<br/>MSFT: 800]
VP3[保守通道<br/>AAPL: 300<br/>SPY: 1000]
end
subgraph "仓位合并"
PN[仓位净额计算<br/>Position Netting]
end
subgraph "实际仓位"
RP[实际持仓<br/>AAPL: 1800<br/>GOOGL: 500<br/>MSFT: 800<br/>SPY: 1000]
end
VP1 --> PN
VP2 --> PN
VP3 --> PN
PN --> RP
仓位调整策略
| 市场状态 | 总仓位 | 激进通道 | 平衡通道 | 保守通道 |
|---|---|---|---|---|
| 强势上涨 | 90-95% | 50% | 35% | 15% |
| 温和上涨 | 70-80% | 35% | 35% | 20% |
| 震荡整理 | 50-60% | 20% | 30% | 25% |
| 温和下跌 | 30-40% | 10% | 20% | 30% |
| 急速下跌 | 10-20% | 0% | 5% | 35% |
回测与优化
回测架构
graph TB
subgraph "数据准备"
DS[数据源选择]
DP[数据预处理]
DV[数据验证]
end
subgraph "回测执行"
BE[回测引擎]
TSR[交易模拟]
CM[成本模型]
end
subgraph "结果分析"
PM[绩效指标]
RA[风险分析]
VIS[可视化]
end
subgraph "参数优化"
GO[网格搜索]
BO[贝叶斯优化]
GA[遗传算法]
end
DS --> DP
DP --> DV
DV --> BE
BE --> TSR
TSR --> CM
CM --> PM
PM --> RA
RA --> VIS
PM --> GO
GO --> BO
BO --> GA
GA --> BE
绩效评估指标
| 指标类别 | 具体指标 | 计算方法 | 评价标准 |
|---|---|---|---|
| 收益指标 | 年化收益率 | (1+总收益)^(365/天数)-1 | >15% |
| 风险指标 | 夏普比率 | (收益-无风险)/标准差 | >1.5 |
| 回撤指标 | 最大回撤 | max(峰值-谷值)/峰值 | <20% |
| 稳定性 | 胜率 | 盈利次数/总次数 | >55% |
| 效率指标 | 盈亏比 | 平均盈利/平均亏损 | >1.5 |
参数优化机制
参数优化功能当前支持手动调优。自动化优化工具尚未实现。