基础架构设计
基于 FastAPI 和 React 的量化交易系统架构设计。
技术栈
后端
- FastAPI - Web 框架
- Redis - 缓存和会话
- Pydantic - 数据验证
- Uvicorn - ASGI 服务器
- LongPort OpenAPI - 券商 API
前端
- React 18 - UI 框架
- Vite - 构建工具
- Semi Design - UI 组件库
- TypeScript - 类型安全
开发工具
- Python 3.13
- Node.js 18+
- Shell 脚本
设计原则
- 关注点分离 - 业务逻辑、数据访问、API 接口分离
- 模块化 - 单一职责,便于维护和测试
- 代码复用 - 避免重复代码
- 依赖倒置 - 依赖抽象而非具体实现
- 性能优化 - 缓存和连接复用
- 工厂模式 - 统一资源创建和管理
- 多券商支持 - 支持多个券商数据源
- 配置驱动 - 通过配置动态选择数据源
- 可测试性 - 完整的 API 测试工具
- 扩展性 - 支持功能扩展和券商接入
目录结构
fire/
├── backend/ # 后端服务
│ ├── main.py # FastAPI 主入口
│ ├── requirements.txt # 后端依赖
│ ├── core/ # 核心业务逻辑层
│ │ ├── models/ # 数据模型
│ │ │ ├── user.py # 用户模型
│ │ │ ├── asset.py # 资产模型
│ │ │ ├── stock.py # 股票模型
│ │ │ ├── trading.py # 交易模型
│ │ │ ├── risk_config.py # 风险配置模型
│ │ │ └── strategy_config.py # 策略配置模型
│ │ ├── services/ # 业务服务层
│ │ │ ├── trading_service.py # 交易服务
│ │ │ ├── websocket_service.py # WebSocket 日志服务
│ │ │ └── websocket_service_factory.py # WebSocket 服务工厂
│ │ ├── repositories/ # 数据访问层
│ │ │ ├── user_repository.py
│ │ │ ├── asset_repository.py
│ │ │ ├── stock_repository.py
│ │ │ ├── trading_repository.py
│ │ │ └── settings_repository.py
│ │ ├── trading/ # 交易核心模块
│ │ │ ├── engines/ # 交易引擎
│ │ │ │ ├── trading_session_engine.py # 交易会话引擎
│ │ │ │ ├── strategy_engine.py # 策略引擎
│ │ │ │ ├── trading_engine.py # 交易引擎
│ │ │ │ ├── simulation_engine.py # 模拟交易引擎
│ │ │ │ └── time_series_controller.py # 时序控制器
│ │ │ ├── strategies/ # 交易策略
│ │ │ │ ├── base_strategy.py # 策略基类
│ │ │ │ ├── macd_strategy.py # MACD 策略
│ │ │ │ ├── rsi_strategy.py # RSI 策略
│ │ │ │ └── bollinger_strategy.py # 布林带策略
│ │ │ ├── risk/ # 风险管理
│ │ │ │ └── risk_engine.py
│ │ │ └── backtest/ # 回测引擎
│ │ │ └── backtest_engine.py
│ │ └── data_source/ # 统一数据源架构
│ │ ├── adapters/ # 业务适配器层
│ │ │ ├── data_source_adapter.py
│ │ │ ├── asset_adapter.py
│ │ │ ├── data_adapter.py
│ │ │ └── quote_adapter.py
│ │ └── factories/ # 工厂层
│ │ ├── config_factory.py
│ │ └── client_factory.py
│ ├── infrastructure/ # 基础设施层
│ │ ├── database/ # 数据库相关
│ │ │ ├── redis_client.py
│ │ │ └── trade_redis_client.py
│ │ └── config/ # 配置管理
│ │ └── settings.py
│ ├── api/ # API 接口层
│ │ └── v1/ # API 版本 1
│ │ └── endpoints/ # 端点
│ │ ├── auth.py
│ │ ├── users.py
│ │ ├── broker.py
│ │ ├── settings.py
│ │ ├── stock.py
│ │ ├── stock_import.py
│ │ ├── assets.py
│ │ ├── websocket.py
│ │ └── api_test.py
│ ├── core/middleware/ # 中间件
│ │ ├── auth_middleware.py
│ │ └── permission_middleware.py
│ └── tests/ # 后端测试
│ ├── unit/ # 单元测试
│ ├── integration/ # 集成测试
│ └── e2e/ # 端到端测试
├── frontend/ # 前端
│ ├── src/
│ │ ├── components/ # 通用组件
│ │ ├── pages/ # 页面组件
│ │ │ ├── trading/ # 交易相关页面
│ │ │ ├── assets/ # 资产管理页面
│ │ │ ├── data/ # 数据管理页面
│ │ │ └── settings/ # 设置页面
│ │ ├── services/ # API 服务
│ │ ├── types/ # TypeScript 类型定义
│ │ └── utils/ # 工具函数
│ ├── package.json # 前端依赖
│ └── vite.config.ts # Vite 配置
├── scripts/ # 脚本
│ ├── startup.sh # 启动脚本
│ ├── install.sh # 安装脚本
│ ├── test.sh # 测试脚本
│ ├── lint-fix.sh # 代码格式修复
│ └── generate_docs.sh # 文档生成
├── docs/ # 文档
│ ├── .github-pages/ # Jekyll 构建文件
│ ├── architecture/ # 架构文档
│ ├── api/ # API 文档
│ ├── domain/ # 领域文档
│ └── helper/ # 辅助文档(API 参考等)
├── data/ # 数据目录
│ └── redis/ # Redis 数据
└── logs/ # 日志目录
分层架构
Core 层(核心业务)
- models - 数据模型和业务实体
- services - 业务逻辑
- repositories - 数据访问抽象
- trading - 交易核心(引擎、策略、风险、回测)
- data_source - 统一数据源
Infrastructure 层(基础设施)
- database - 数据库连接
- config - 配置管理
API 层(接口)
- endpoints - REST API 端点
- middleware - 认证和权限
Frontend 层(前端)
- components - 通用组件
- pages - 页面组件
- services - API 服务
- types - TypeScript 类型
依赖关系
Frontend → API → Core → Infrastructure
- Frontend 调用 API,通过 WebSocket 接收实时数据
- API 调用 Core 层 services 和 repositories
- Core 通过 repositories 访问 Infrastructure
- Infrastructure 提供数据库、配置等基础服务
数据源架构
采用统一数据源架构,通过分层设计实现券商无关的数据访问。
核心特性:
- 统一访问接口 - 所有券商通过统一抽象层访问
- 缓存复用 - 用户配置和客户端实例缓存
- 业务保护 - 复杂分页逻辑等业务规则保留
- 扩展能力 - 新券商只需添加 ClientManager
- WebSocket 日志 - 全局日志服务,实时进度推送
性能优化
缓存策略
- 客户端连接缓存 - 复用券商连接,减少初始化
- Redis 连接缓存 - 连接池管理,提高访问效率
- 配置数据缓存 - 避免重复查询
性能提升
操作 | 优化前 | 优化后 | 提升 |
---|---|---|---|
配置获取 | 50-100ms | 1-5ms | 95% |
客户端创建 | 100-200ms | 1-10ms | 95% |
Redis 查询 | 20-50ms | 1-5ms | 90% |
API 响应 | 1-2s | 100-300ms | 80% |
扩展性设计
水平扩展
- 无状态 API 设计
- 支持多实例部署
- 数据库读写分离
多券商支持
- 数据源抽象 - 统一接口
- 工厂模式 - 动态创建客户端
- 配置驱动 - 通过配置选择数据源
- SDK 适配 - 统一适配层
功能扩展
- 插件化策略系统
- 可配置风险规则
- 多市场数据源
- 数据源动态切换
安全设计
数据安全
- 敏感数据加密存储
- API 权限控制
- HTTPS 加密传输
- 多券商配置隔离
交易安全
- 多重风险控制
- 交易日志记录
- 异常自动处理
- 数据源访问验证
配置安全
- 用户配置加密
- 数据源配置访问控制
- 敏感信息脱敏
股票代码格式
标准格式
{SYMBOL}.{MARKET}
市场后缀:
.US
- 美股(YINN.US, AAPL.US).HK
- 港股(700.HK, 9988.HK).CN
- A股(000001.CN, 600036.CN)
使用规则
前端:
- 默认值:
YINN.US
- 表单验证要求市场后缀
后端:
- 所有 API 接受带后缀代码
- 数据存储使用完整格式
数据一致性:
- 导入时自动添加后缀
- Redis 使用完整格式
API 测试模块
模块设计
三页面设计:
- 拉取页面 - 测试主动请求 API(10 个接口)
- 订阅推送页面 - 测试订阅推送 API(6 个接口)
- 交易测试页面 - 测试交易 API(10 个接口)
核心特性
- 抽象接口设计 - 基于抽象接口,不依赖具体 SDK
- 安全测试原则 - 数据获取 API 支持测试,交易提交 API 不支持
- 动态表单生成 - 根据 API 参数自动生成表单
- 实时结果展示 - 人类可读描述 + 原始 JSON 数据