系统架构
架构概述
Funiq Trading 采用分层式、模块化的架构设计,实现了完整的前后端分离。系统通过 HTTP 接口和 C 接口对外提供服务,使得客户端开发完全独立于核心业务逻辑。这种设计不仅提供了灵活的集成方式,还保证了核心策略在高性能环境下运行,不受网络层的影响。
核心设计理念
- 前后端完全分离:客户端通过标准接口调用,不依赖特定语言或平台
- 可插拔式架构:行情、交易、策略、回测等核心系统均可独立替换和扩展
- 高性能优先:策略在核心层直接运行,避免网络开销,当前延迟稳定在微秒级
- 语言无关:通过 C 接口和 HTTP 接口支持绝大多数编程语言集成
- 分层清晰:网络层、核心业务层、基础服务层职责明确,便于维护和扩展
整体架构
系统分层
graph TB
subgraph "客户端层"
WebUI[Web 界面]
PythonClient[Python 客户端]
OtherClients[其他语言客户端]
end
subgraph "接口层"
HTTP[HTTP API 服务]
CAPI[C 接口]
end
subgraph "网络层"
NetworkService[网络服务管理]
APIHandler[API 处理器]
Router[路由分发]
end
subgraph "核心业务层"
QuoteSystem[行情系统]
TradeSystem[交易系统]
StrategySystem[策略系统]
BacktestSystem[回测系统]
end
subgraph "基础服务层"
Database[(嵌入式数据库)]
Logger[日志系统]
DataManager[数据管理器]
Algorithem[算法管理器]
ConfigManager[配置管理]
Scheduler[定时调度]
end
WebUI --> HTTP
PythonClient --> HTTP
PythonClient --> CAPI
OtherClients --> HTTP
OtherClients --> CAPI
HTTP --> NetworkService
CAPI --> QuoteSystem
CAPI --> TradeSystem
CAPI --> StrategySystem
NetworkService --> APIHandler
APIHandler --> Router
Router --> QuoteSystem
Router --> TradeSystem
Router --> StrategySystem
Router --> BacktestSystem
QuoteSystem --> DataManager
TradeSystem --> DataManager
StrategySystem --> DataManager
BacktestSystem --> DataManager
BacktestSystem --> QuoteSystem
BacktestSystem --> TradeSystem
BacktestSystem --> StrategySystem
DataManager --> Database
DataManager --> Logger
style QuoteSystem fill:#e1f5ff
style TradeSystem fill:#fff4e1
style StrategySystem fill:#e8f5e9
style BacktestSystem fill:#ffe8e1
style HTTP fill:#f3e5f5
style CAPI fill:#f3e5f5
架构说明
系统采用三层架构:
-
网络层(Interface Layer)
- 负责对外接口暴露和请求处理
- 支持 HTTP RESTful API 和 C 函数调用两种方式
- 不包含业务逻辑,仅做请求转发和响应封装
-
核心业务层(Core Business Layer)
- 包含行情、交易、策略、回测四大核心系统
- 所有核心业务逻辑在此层执行
- 保证高性能和低延迟
- 系统间可相互调用(如回测系统调用行情、交易、策略)
-
基础服务层(Infrastructure Layer)
- 提供数据存储、日志记录、配置管理、定时调度、算法等基础能力
- 为核心业务层提供支撑服务
- 包含数据库、日志、配置、调度、算法等通用组件
核心系统详解
1. 行情系统(Quote System)
行情系统负责市场数据的接入、处理、分发和回放。
graph LR
subgraph "数据源"
CSVData[CSV 文件]
LiveFeed[实时行情接口]
MockData[Mock 测试数据]
RecordedData[录制数据]
end
subgraph "行情系统核心"
QuoteManager[行情管理器]
DataRecorder[数据录制器]
DataReplay[数据回放器]
end
subgraph "数据模式"
CallbackMode[回调模式]
PollingMode[轮询模式]
SharedMemMode[共享内存模式]
end
subgraph "消费者"
Trade[交易系统]
Strategy[策略引擎]
APIQuery[API 查询]
Monitor[监控系统]
end
MockData --> QuoteManager
RecordedData --> DataReplay
CSVData --> DataReplay
LiveFeed --> QuoteManager
QuoteManager --> DataRecorder
DataReplay --> QuoteManager
DataRecorder --> DataReplay
QuoteManager --> SharedMemMode
QuoteManager --> CallbackMode
QuoteManager --> PollingMode
CallbackMode --> Trade
PollingMode --> Trade
CallbackMode --> Strategy
PollingMode --> Strategy
CallbackMode --> APIQuery
PollingMode --> APIQuery
Strategy --> Monitor
核心特性
可插拔式数据源
- 所有数据源通过统一接口接入
- 数据结构抽象化,兼容各类三方平台 API
多种数据来源
- Mock 数据:用于本地测试
- 录制数据:实时行情可录制保存,用于后续回放
- CSV 导入:支持大批量历史数据导入
- 实时接口:对接交易所或行情网关的实时数据流
三种数据读取模式
| 模式 | 适用场景 | 特点 |
|---|---|---|
| 回调模式 | 事件驱动策略 | 数据到达时主动推送给策略 |
| 轮询模式 | 定时查询策略 | 策略按固定频率主动拉取数据 |
| 共享内存模式 | 极低延迟场景 | 零拷贝数据传输(测试中) |
数据录制与回放
- 录制功能:实时行情可录制到本地数据库或文件
- 回放功能:历史数据按时间轴回放,用于策略回测和验证
2. 交易系统(Trade System)
交易系统负责订单管理、交易执行和资金查询。
graph TB
subgraph "交易请求"
APIRequest[HTTP/C API 请求]
StrategyOrder[策略下单]
end
subgraph "交易系统核心"
OrderManager[订单管理器]
TradeEngine[交易引擎]
OrderRouter[订单路由]
end
subgraph "交易通道(柜台系统)"
Channel1[柜台系统 A]
Channel2[柜台系统 B]
Channel3[柜台系统 C]
CounterDB[(柜台数据库)]
end
subgraph "策略集成"
StrategySystem[策略系统]
AlgoEngine[算法引擎按需调用]
StrategyDB[(策略相关数据库)]
end
APIRequest --> OrderManager
StrategyOrder --> OrderManager
OrderManager --> TradeEngine
TradeEngine --> OrderRouter
OrderRouter --> Channel1
OrderRouter --> Channel2
OrderRouter --> Channel3
Channel1 --> CounterDB
Channel2 --> CounterDB
Channel3 --> CounterDB
StrategySystem -.集成.-> AlgoEngine
StrategySystem --> StrategyDB
StrategySystem --> OrderManager
TradeEngine -.查询.-> CounterDB
核心特性
可插拔式交易通道
- 对接不同的柜台系统(交易通道)
- 统一的订单结构和交易流程
订单管理
- 订单路由和分发
- 订单状态跟踪和查询
- 订单数据查询:直接从柜台系统(交易通道)查询订单、成交、持仓、资金等数据
算法引擎(基础架构层)
- 算法引擎位于基础架构层,按需调用
- TWAP 等算法通常集成在策略中使用
- 算法引擎提供通用的拆单、执行逻辑
- 策略可根据需要灵活调用
数据管理说明
- 柜台系统数据库:由交易通道(柜台系统)管理,存储实际订单、成交、持仓数据
- 策略相关数据库:策略系统管理,存储策略的挂单和订单信息
- 交易系统通过查询接口从柜台系统获取所需数据
风控系统(规划中)
- 当前系统未实现统一的风控模块
- 风控逻辑可在策略层自行开发
- 支持在策略中实现:
- 订单前置检查
- 资金和持仓限制
- 自定义风控规则
3. 策略系统(Strategy System)
策略系统是核心业务层的关键组成,支持多策略并行运行和个性化定制。
graph TB
subgraph "策略管理"
StrategyManager[策略管理器]
StrategyLoader[策略加载器]
StrategyConfig[策略配置]
end
subgraph "运行中的策略"
Strategy1[策略 A]
Strategy2[策略 B]
StrategyN[策略 ...]
end
subgraph "策略能力"
QuoteSubscribe[行情订阅]
OrderExecution[订单执行]
PositionMonitor[持仓监控]
end
subgraph "持久化"
PendingOrderDB[(挂单数据库)]
OrderDB[(订单数据库)]
end
StrategyConfig --> StrategyLoader
StrategyLoader --> StrategyManager
StrategyManager --> Strategy1
StrategyManager --> Strategy2
StrategyManager --> StrategyN
Strategy1 --> QuoteSubscribe
Strategy1 --> OrderExecution
Strategy2 --> PositionMonitor
StrategyManager --> PendingOrderDB
StrategyManager --> OrderDB
QuoteSubscribe -.订阅.-> QuoteSystem[行情系统]
OrderExecution -.下单.-> TradeSystem[交易系统]
PositionMonitor -.查询.-> TradeSystem
核心特性
可插拔式策略架构
- 策略作为独立模块加载
- 统一的策略接口规范
- 支持动态加载和卸载
多策略并行
- 支持多个策略同时运行
- 策略间资源隔离
- 独立的性能监控和日志
策略状态持久化
- 策略配置保存到数据库
- 挂单、订单信息持久化
- 策略状态可恢复
个性化定制
- 支持自定义策略参数
- 灵活的信号生成逻辑
- 可配置的执行规则
4. 回测系统(Backtest System)
回测系统提供历史数据回放能力,是策略验证的基础设施。
graph TB
subgraph "回测核心"
BacktestEngine[回测引擎]
DataSource[定制数据源]
end
subgraph "数据来源"
RecordedData[录制数据]
CSVData[CSV 文件]
end
subgraph "数据注入"
QuoteSystem[行情系统]
end
subgraph "其他模块(需定制开发)"
MockTrade[模拟交易模块]
Analysis[数据分析模块]
Report[报告生成模块]
Visualization[可视化模块]
end
RecordedData --> DataSource
CSVData --> DataSource
DataSource --> BacktestEngine
BacktestEngine -->|推送历史行情| QuoteSystem
QuoteSystem -.实盘策略运行.-> Strategy[策略系统]
QuoteSystem -.实盘运行.->Trade[交易系统]
Strategy -.交易信号.-> MockTrade
Strategy -.绩效数据.-> Analysis
Analysis -.统计结果.-> Report
Analysis -.图表数据.-> Visualization
style BacktestEngine fill:#ffe8e1
style MockTrade fill:#f0f0f0,stroke-dasharray: 5 5
style Analysis fill:#f0f0f0,stroke-dasharray: 5 5
style Report fill:#f0f0f0,stroke-dasharray: 5 5
style Visualization fill:#f0f0f0,stroke-dasharray: 5 5
当前实现
回测系统目前处于基础阶段,提供核心的数据回放能力:
已实现功能
- ✅ 定制数据源接入:支持灵活配置历史数据来源
- ✅ 数据推送到行情系统:将历史数据按时间顺序推入行情系统
- ✅ 多种数据格式支持:
- 录制的行情数据
- CSV 格式的历史数据
核心工作原理
回测引擎的主要职责是作为数据源桥接器:
- 从各种来源加载历史数据
- 按时间顺序将数据推送到行情系统
- 行情系统将数据分发给策略(与实盘流程一致)
- 策略运行的逻辑与实盘完全相同
关键设计优势
- 策略代码复用:回测时使用与实盘完全相同的策略代码
- 真实流程验证:数据流与实盘一致,确保回测有效性
- 灵活数据源:支持多种历史数据格式和来源
典型回测流程
- 配置数据源:选择历史数据来源(录制数据/CSV/数据库)
- 初始化回测引擎:设置时间范围、数据过滤条件
- 启动数据推送:回测引擎将历史数据推入行情系统
- 策略自动运行:交易、策略接收历史行情,执行交易逻辑
接口层设计
系统提供两种接口方式,满足不同场景的需求。
HTTP API 接口
graph LR
Client[客户端] -->|HTTP Request| NetworkService[网络服务]
NetworkService -->|路由| QuoteAPI[行情 API]
NetworkService -->|路由| TradeAPI[交易 API]
NetworkService -->|路由| StrategyAPI[策略 API]
QuoteAPI -->|调用| QuoteSystem[行情系统]
TradeAPI -->|调用| TradeSystem[交易系统]
StrategyAPI -->|调用| StrategySystem[策略系统]
QuoteSystem -->|JSON 响应| QuoteAPI
TradeSystem -->|JSON 响应| TradeAPI
StrategySystem -->|JSON 响应| StrategyAPI
QuoteAPI -->|HTTP Response| NetworkService
TradeAPI -->|HTTP Response| NetworkService
StrategyAPI -->|HTTP Response| NetworkService
NetworkService -->|HTTP Response| Client
特点
- 跨语言支持:任何支持 HTTP 的语言均可调用
- 易于集成:RESTful 风格,标准 JSON 格式
- 防火墙友好:使用标准 HTTP 协议
- 便于调试:可使用 curl、Postman 等工具测试
实现位置
- 网络服务:
src/network/ - API 处理器:
src/network/handler/http/quote_api_handler.cpp- 行情接口trade_api_handler.cpp- 交易接口strategy_api_handler.cpp- 策略接口
C 接口
graph LR
subgraph "客户端进程"
PythonApp[Python 应用]
GoApp[Go 应用]
RustApp[Rust 应用]
OtherApp[其他语言应用]
end
subgraph "核心系统"
QuoteCore[行情系统]
TradeCore[交易系统]
StrategyCore[策略系统]
end
CAPI[C接口]
PythonApp -->|ctypes/cffi| CAPI
GoApp -->|cgo| CAPI
RustApp -->|FFI| CAPI
OtherApp -->|native call| CAPI
CAPI -->|直接调用| QuoteCore
CAPI -->|直接调用| TradeCore
CAPI -->|直接调用| StrategyCore
特点
- 极致性能:直接函数调用,无网络开销
- 语言无关:C ABI 是各语言的通用标准
- 进程内调用:可嵌入到客户端进程中运行
- 低延迟:适合高频策略场景
使用场景
- 高频策略:对延迟要求极高的场景
- 嵌入式集成:需要在客户端进程内运行核心逻辑
- 跨语言调用:从 Python、Go、Rust 等语言调用 C++ 核心
关键设计优势:
- 策略运行在核心层,不受网络层影响
- C 接口提供零网络开销的调用方式
- HTTP 接口保证易用性和兼容性
- 两种接口可同时使用,互不干扰
基础服务层
基础服务层为核心业务层提供数据存储、日志记录、配置管理、定时调度等支撑能力。
graph TB
subgraph "基础服务层"
subgraph "数据服务"
DataManager[数据管理器]
Database[(嵌入式数据库)]
Migration[数据库迁移]
end
subgraph "日志服务"
Logger[日志管理器]
LogRotate[日志轮转]
LogLevel[日志分级]
end
subgraph "配置服务"
ConfigManager[配置管理器]
ConfigLoader[配置加载器]
ConfigValidator[配置验证]
end
subgraph "调度服务"
Scheduler[定时调度器]
end
subgraph "算法引擎"
AlgoEngine[算法引擎]
TWAP[TWAP 算法]
end
end
AlgoEngine --> TWAP
DataManager --> Database
DataManager --> Migration
Logger --> LogRotate
Logger --> LogLevel
ConfigManager --> ConfigLoader
ConfigManager --> ConfigValidator
1. 数据服务
数据管理
graph TB
subgraph "核心业务层"
QuoteSys[行情系统]
TradeSys[交易系统]
StrategySys[策略系统]
end
subgraph "数据管理器"
DataManager[数据管理器]
CacheManager[缓存管理]
QueryEngine[查询引擎]
FileManager[文件管理]
end
subgraph "持久化存储"
SQLite[(SQLite 数据库)]
LogFiles[日志文件]
DataFiles[数据文件 CSV/录制数据]
end
subgraph "数据库表"
OrderTable[订单表]
PendingOrderTable[挂单表]
end
QuoteSys --> DataManager
TradeSys --> DataManager
StrategySys --> DataManager
DataManager --> CacheManager
DataManager --> QueryEngine
DataManager --> FileManager
QueryEngine --> SQLite
FileManager --> DataFiles
FileManager --> LogFiles
SQLite --> OrderTable
SQLite --> PendingOrderTable
数据管理器功能
- 数据库访问:统一的数据库访问接口,支持订单、策略等数据管理
- 文件系统管理:负责读取和写入各类数据文件
- CSV 文件读取(历史行情数据导入)
- 录制数据文件管理(行情录制与回放)
- 日志文件管理
- 配置文件读取
- 缓存管理:热点数据缓存,提升访问性能
- 查询引擎:提供高效的数据查询能力
嵌入式数据库
- 数据库引擎:SQLite(轻量级、无需独立服务)
- 连接池:支持多连接并发访问
- 事务支持:确保数据一致性
数据库版本管理
系统内置数据库迁移(Migration)机制:
- 配置文件:
migrations/migration.config.ini - 迁移脚本:
migrations/scripts/ - 模板文件:
migrations/templates/ - 版本跟踪:自动记录当前数据库版本
- 升级/回滚:支持数据库结构升级和回滚
2. 日志服务
graph LR
subgraph "日志来源"
QuoteLog[行情日志]
TradeLog[交易日志]
StrategyLog[策略日志]
SystemLog[系统日志]
end
subgraph "日志处理"
Logger[日志管理器]
Formatter[格式化器]
Filter[过滤器]
end
subgraph "日志输出"
Console[控制台输出]
FileDaily[按日归档文件]
FileRotate[轮转日志]
end
QuoteLog --> Logger
TradeLog --> Logger
StrategyLog --> Logger
SystemLog --> Logger
Logger --> Formatter
Formatter --> Filter
Filter --> Console
Filter --> FileDaily
Filter --> FileRotate
核心特性
- 日志库:spdlog
- 分级日志:trace、debug、info、warn、error、critical
- 多输出:控制台、文件、轮转文件
- 异步写入:不阻塞业务逻辑
- 格式化:支持自定义日志格式
- 按模块分类:行情日志、交易日志、策略日志、系统日志
3. 配置服务
配置服务负责系统配置的加载、验证和管理。
核心特性
- 集中配置:统一的配置文件管理
- 配置验证:启动时验证配置合法性
- 热更新:部分配置支持运行时更新(规划中)
- 环境区分:支持开发、测试、生产环境配置
- 配置格式:JSON 格式,易于阅读和维护
主要配置项
- 数据库连接参数
- 网络服务端口和地址
- 日志级别和输出路径
- 行情源配置(接口地址、认证信息等)
- 交易接口配置
- 线程数量和 CPU 绑核设置
- 策略参数和定时任务
4. 调度服务
调度服务是系统自动化运行的核心,负责整个系统内部服务的自动启停和定时任务调度。
核心特性
- 系统级自动启停:自动控制行情系统、交易系统、策略系统等核心服务的启动和停止
- 定时任务:通过配置文件定义定时规则
系统自动启停机制
调度服务可以根据配置的时间规则,自动控制各个核心系统的生命周期:
graph LR
Scheduler[定时调度器] -->|启动| QuoteSystem[行情系统]
Scheduler -->|启动| TradeSystem[交易系统]
Scheduler -->|启动| StrategySystem[策略系统]
Scheduler -->|停止| QuoteSystem
Scheduler -->|停止| TradeSystem
Scheduler -->|停止| StrategySystem
ConfigManager[配置管理] -->|时间规则| Scheduler
5. 算法引擎
算法引擎位于基础服务层,提供通用的交易算法实现,供策略按需调用。
核心特性
- 按需调用:算法引擎不在交易核心中,而是作为独立服务供策略调用
- 策略集成:通常集成在策略中使用,灵活组合
- 通用算法:提供 TWAP 等常见交易算法实现
已实现算法
| 算法 | 说明 | 使用场景 | 实现状态 |
|---|---|---|---|
| TWAP | 时间加权平均价格算法 | 大单拆分,降低市场冲击 | ✅ 已实现 |
TWAP 算法详解
时间加权平均价格(Time-Weighted Average Price)算法:
- 目标:将大单拆分为多笔小单,在指定时间段内均匀执行
- 优势:降低对市场价格的冲击,避免引起价格异常波动
- 功能:
- 任务创建:指定股票、数量、时间段等参数
- 任务控制:支持暂停、恢复、取消
- 状态查询:实时查询执行进度和状态
- 自动执行:按时间片自动下单
策略可以灵活选择是否使用算法引擎:
- 直接下单:策略直接调用交易系统下单
- 算法下单:策略通过算法引擎间接下单,享受算法的拆单、优化等能力
性能优化
当前性能
根据实际测试,系统在简单策略场景下的性能指标:
- 延迟:稳定在微秒级(µs)
- 吞吐:支持高频数据处理
- 并发:多策略并行运行
优化方向
系统仍有较大的优化空间,特别是在高并发场景下:
graph TB
subgraph "当前架构"
Current[互斥锁 + 多线程]
end
subgraph "优化方向"
LockFree[无锁数据结构]
ThreadSplit[线程职责拆分]
ZeroCopy[零拷贝传输]
NUMA[NUMA 感知调度]
end
subgraph "目标性能"
SubMicro[亚微秒级延迟]
NanoSec[纳秒级处理]
HighThroughput[更高吞吐量]
end
Current --> LockFree
Current --> ThreadSplit
Current --> ZeroCopy
Current --> NUMA
LockFree --> SubMicro
ThreadSplit --> SubMicro
ZeroCopy --> NanoSec
NUMA --> HighThroughput
计划中的优化
1. 无锁化(Lock-Free)
- 使用无锁队列替代互斥锁
- 原子操作(atomic)优化关键路径
- 减少锁竞争和上下文切换
2. 线程拆分
- IO 线程:专门处理网络和文件 IO
- 处理线程:数据解析和业务逻辑
- 策略线程:策略计算和信号生成
- 交易线程:订单执行和状态管理
3. 共享内存优化
- 完善共享内存模式
- 零拷贝数据传输
- 进程间高效通信
4. 线程池管理
- CPU 核心绑定(CPU affinity)
- 关键线程独占核心
- 减少缓存抖动(Cache thrashing)
性能目标
通过上述优化,预期系统延迟可降至:
- 常规路径:亚微秒级(sub-microsecond)
- 关键路径:纳秒级(nanosecond)
线程与绑核管理
系统当前支持基本的线程管理和 CPU 绑核功能:
- 线程数配置:可通过配置文件设置
- CPU 绑核:关键线程可绑定到特定 CPU 核心
安全性考虑
- 风控系统:当前未实现统一风控,可在策略层自行开发(规划中)
- 权限控制:API 访问权限管理(规划中)
- 数据加密:敏感数据加密存储(规划中)
- 审计日志:完整的操作日志记录
监控与运维
- 日志监控:通过日志文件监控系统运行状态
- 性能监控:关键路径性能指标记录
- 异常告警:错误日志和异常捕获
- 健康检查:API 健康检查接口