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

Fire 系统基础架构

概述

Fire 是一个基于 FastAPI 和 React 的金融交易系统,采用前后端分离架构。本文档描述系统的工程架构设计,不涉及具体业务实现。

核心特性

📌 注意:业务相关架构(交易、策略、风险等)请参考 量化交易架构文档

系统架构图

graph TB
    subgraph "客户端层"
        Browser[浏览器<br/>React SPA]
    end

    subgraph "前端开发服务器"
        Vite[Vite Dev Server<br/>端口: 3000<br/>HMR + Proxy]
    end

    subgraph "应用层"
        API[FastAPI Server<br/>端口: 8000<br/>REST API + WebSocket]
    end

    subgraph "服务层"
        Auth[认证服务<br/>JWT]
        Logger[日志服务<br/>Python logging]
        Trading[交易服务<br/>策略/风险/通道管理]
    end

    subgraph "数据层"
        Redis[(Redis<br/>端口: 6379<br/>缓存/会话/持久化)]
        FS[(文件系统<br/>日志文件)]
    end

    subgraph "外部服务"
        Broker[券商API<br/>LongPort]
    end

    Browser --> Vite
    Vite -->|HTTP Proxy<br/>/api/*| API
    Vite -->|WS Proxy<br/>/ws| API
    API --> Auth
    API --> Logger
    API --> Trading
    API --> Redis
    Logger --> FS
    Trading --> Redis
    Trading --> Broker

技术栈

后端技术栈

组件 技术选型 版本 用途
运行时 Python 3.13+ 后端运行环境
Web框架 FastAPI ≥0.110.0 异步Web框架
ASGI服务器 Uvicorn ≥0.27.0 ASGI服务器
数据验证 Pydantic ≥2.6.0 数据模型和验证
配置管理 pydantic-settings ≥2.0.0 配置管理
缓存/数据存储 Redis ≥5.0.0 会话存储、数据缓存、持久化
认证 PyJWT ≥2.8.0 JWT令牌生成与验证
密码哈希 passlib[bcrypt] ≥1.7.4 密码加密
HTTP客户端 httpx ≥0.25.2 异步HTTP请求
券商接口 longport ≥3.0.0 长桥证券API
数据分析 pandas ≥2.3.0 数据处理和分析
技术指标 pandas-ta 0.4.71b0 技术指标计算
日志 Python logging 内置 日志记录

前端技术栈

组件 技术选型 版本 用途
运行时 Node.js 18+ 前端构建环境
框架 React ^18.2.0 UI框架
语言 TypeScript ^5.2.2 类型安全
构建工具 Vite ^5.0.8 快速构建和HMR
UI组件库 @douyinfe/semi-ui ^2.86.0 企业级组件库
状态管理 Context API + Zustand ^4.4.0 全局状态管理
路由 React Router ^6.8.0 客户端路由
图表 ECharts + Recharts ^5.4.3 / ^2.8.0 数据可视化
Flow 编辑器 @xyflow/react ^12.x ⭐ 可视化节点编辑器
代码编辑器 @monaco-editor/react ^4.6.0 ⭐ JSON 配置编辑器
网络请求 Axios ^1.6.2 HTTP客户端
WebSocket socket.io-client ^4.5.4 实时通信

开发工具链

工具 版本 用途 配置文件
pytest ≥7.4.0 Python测试框架 pytest.ini
pytest-asyncio ≥0.21.0 异步测试支持 pytest.ini
Black ≥23.0.0 Python代码格式化 pyproject.toml
isort ≥5.12.0 Python导入排序 pyproject.toml
flake8 ≥6.0.0 Python代码检查 setup.cfg
mypy ≥1.8.0 Python类型检查 -
ESLint ^8.55.0 TypeScript代码检查 package.json
Shell脚本 - 自动化任务 scripts/

工程目录结构

顶层目录结构

fire/
├── backend/                        # 后端服务根目录
│   ├── main.py                     # FastAPI应用入口
│   ├── requirements.txt            # Python依赖声明
│   ├── venv/                       # Python虚拟环境(不提交)
│   ├── pyproject.toml              # Python项目配置
│   │
│   ├── api/                        # API接口层
│   │   └── v1/                     # API v1版本
│   │       ├── __init__.py         # 路由注册
│   │       ├── endpoints/          # 端点实现
│   │       │   ├── auth.py         # 认证接口
│   │       │   ├── users.py        # 用户管理
│   │       │   ├── custom_templates.py  # ⭐ 自定义模板管理
│   │       │   ├── strategies.py   # ⭐ 策略元数据查询
│   │       │   ├── websocket.py    # WebSocket端点
│   │       │   └── ...             # 其他业务端点
│   │       └── dependencies.py     # 依赖注入
│   │
│   ├── core/                       # 核心业务层(详见下文)
│   │   ├── models/                 # 数据模型定义
│   │   ├── services/               # 业务服务
│   │   ├── repositories/           # 数据访问层
│   │   ├── middleware/             # 中间件
│   │   ├── trading/                # ⭐ 交易核心模块(详见下文)
│   │   └── data_source/            # 数据源模块
│   │
│   ├── infrastructure/             # 基础设施层
│   │   ├── cache/                  # 缓存服务(预留)
│   │   ├── config/                 # 配置管理
│   │   ├── database/               # 数据库连接(Redis)
│   │   ├── external/               # 外部服务(预留)
│   │   └── market_data/            # 市场数据管理
│   │
│   ├── tests/                      # 测试目录
│   │   ├── unit/                   # 单元测试
│   │   ├── integration/            # 集成测试
│   │   ├── e2e/                    # 端到端测试
│   │   └── conftest.py             # 测试配置
│   │
│   ├── utils/                      # 工具函数
│   ├── data/                       # 数据文件
│   ├── logs/                       # 日志文件
│   └── scripts/                    # 脚本文件
│
├── frontend/                       # 前端应用根目录
│   ├── package.json                # Node.js依赖声明
│   ├── tsconfig.json               # TypeScript配置
│   ├── vite.config.ts              # Vite构建配置
│   ├── index.html                  # HTML入口
│   ├── node_modules/               # Node依赖(不提交)
│   │
│   ├── src/                        # 源代码目录
│   │   ├── main.tsx                # React应用入口
│   │   ├── App.tsx                 # 根组件
│   │   │
│   │   ├── components/             # 通用组件
│   │   │   ├── layout/             # 布局组件
│   │   │   ├── common/             # 公共组件
│   │   │   ├── charts/             # 图表组件
│   │   │   └── FlowEditor/         # ⭐ Flow 编辑器组件
│   │   │       ├── FlowEditor.tsx  # 主编辑器组件
│   │   │       ├── StrategyNode.tsx # 策略节点组件
│   │   │       ├── OutputNode.tsx  # 输出节点组件
│   │   │       ├── StrategyLibrary.tsx # 策略库面板
│   │   │       ├── ParameterSidebar.tsx # 参数编辑面板
│   │   │       ├── FlowToolbar.tsx # 工具栏组件
│   │   │       ├── JsonConfigEditor.tsx # JSON 编辑器
│   │   │       ├── SaveConfigModal.tsx # 保存对话框
│   │   │       ├── UnsavedChangesModal.tsx # 未保存提示
│   │   │       └── types.ts        # Flow 类型定义
│   │   │
│   │   ├── pages/                  # 页面组件
│   │   │   ├── auth/               # 认证页面
│   │   │   ├── dashboard/          # 仪表板
│   │   │   ├── trading/            # 交易页面
│   │   │   │   └── common/         # ⭐ 交易通用组件
│   │   │   │       ├── ChannelConfigCard.tsx # ⭐ 通道配置卡片 (集成 FlowEditor)
│   │   │   │       ├── ChannelFlowEditor.tsx # 通道编辑器
│   │   │   │       ├── ChannelControlPanel.tsx # 通道控制面板
│   │   │   │       ├── ConfigImportExport.tsx # 配置导入导出
│   │   │   │       ├── PresetSelectorWithTemplates.tsx # 预设选择器(增强版)
│   │   │   │       └── PresetSelector.tsx # 基础预设选择器
│   │   │   ├── settings/           # 设置页面
│   │   │   └── ...                 # 其他业务页面
│   │   │
│   │   ├── services/               # API服务层
│   │   │   ├── api.ts              # ⭐ API客户端基类(含自定义模板、策略元数据)
│   │   │   ├── auth.service.ts     # 认证服务
│   │   │   └── ...                 # 其他服务
│   │   │
│   │   ├── hooks/                  # React Hooks
│   │   │   ├── useAuth.ts          # 认证Hook
│   │   │   ├── useWebSocket.ts     # WebSocket Hook
│   │   │   ├── useFlowEditor.ts    # ⭐ Flow 编辑器状态管理
│   │   │   ├── useChannelConfig.ts # ⭐ 多通道配置管理
│   │   │   ├── useStrategyMetadata.ts # ⭐ 策略元数据管理
│   │   │   ├── useSaveConfig.ts    # ⭐ 配置保存逻辑
│   │   │   └── useCustomTemplates.ts # ⭐ 自定义模板 CRUD
│   │   │
│   │   ├── contexts/               # React Context
│   │   │   └── AuthContext.tsx     # 认证上下文
│   │   │
│   │   ├── utils/                  # 工具函数
│   │   │   ├── api-client.ts       # HTTP客户端
│   │   │   ├── format.ts           # 格式化工具
│   │   │   ├── validation.ts       # 验证工具
│   │   │   ├── flowSerializer.ts   # ⭐ Flow 图序列化/反序列化
│   │   │   ├── configValidator.ts  # ⭐ 客户端配置验证
│   │   │   └── flowLayoutHelper.ts # ⭐ Flow 自动布局算法
│   │   │
│   │   ├── types/                  # TypeScript类型定义
│   │   │   ├── api.d.ts            # API类型
│   │   │   ├── models.d.ts         # 数据模型
│   │   │   └── global.d.ts         # 全局类型
│   │   │
│   │   └── styles/                 # 样式文件
│   │       ├── global.css          # 全局样式
│   │       └── variables.css       # CSS变量
│   │
│   ├── public/                     # 静态资源
│   └── dist/                       # 构建输出(不提交)
│
├── scripts/                        # 自动化脚本
│   ├── startup.sh                  # 启动脚本
│   ├── install.sh                  # 安装脚本
│   ├── test.sh                     # 测试脚本
│   ├── lint-fix.sh                 # 代码检查修复
│   ├── build.sh                    # 构建脚本
│   └── deploy.sh                   # 部署脚本
│
├── docs/                           # 文档目录
│   ├── architecture/               # 架构文档
│   ├── api/                        # API文档
│   ├── development/                # 开发指南
│   └── deployment/                 # 部署文档
│
├── data/                           # 数据目录
│   ├── redis/                      # Redis持久化
│   └── backups/                    # 数据备份
│
├── logs/                           # 日志目录
│   ├── app/                        # 应用日志
│   ├── access/                     # 访问日志
│   └── error/                      # 错误日志
│
├── .github/                        # GitHub配置
│   └── workflows/                  # CI/CD工作流
│
├── .env.example                    # 环境变量示例
├── .gitignore                      # Git忽略配置
├── README.md                       # 项目说明
└── CLAUDE.md                       # AI助手指南

核心模块详解:core/

Fire 系统的核心业务逻辑都在 backend/core/ 目录中,其中最重要的是 core/trading/ 交易核心模块。

core/trading/ - 交易核心模块 ⭐

这是整个系统最核心的模块,包含所有交易相关的业务逻辑:

core/trading/
├── engines/                # 交易引擎
│   ├── trading_engine.py           # 订单执行引擎
│   ├── trading_session_engine.py   # 会话管理引擎
│   ├── strategy_engine.py          # 策略执行引擎
│   ├── channel_manager.py          # 多通道管理器
│   ├── trading_channel.py          # 单通道实现
│   ├── historical_data_manager.py  # 历史数据管理
│   ├── simulation_engine.py        # 模拟引擎
│   └── time_series_controller.py   # 时序控制器
├── strategies/             # 交易策略
│   ├── base_strategy.py            # 策略基类
│   ├── registry.py                 # 策略注册器
│   ├── metadata.py                 # 策略元数据
│   ├── strategy_factory.py         # 策略工厂
│   ├── momentum/                   # 动量策略组
│   │   ├── momentum_breakout.py
│   │   └── rsi_momentum.py
│   ├── trend/                      # 趋势策略组
│   │   ├── ma_cross.py
│   │   └── trend_channel.py
│   ├── mean_reversion/             # 均值回归策略组
│   │   └── bollinger_bands.py
│   ├── volatility/                 # 波动率策略组
│   │   └── low_volatility.py
│   ├── volume/                     # 成交量策略组
│   │   └── volume_spike.py
│   ├── indicators/                 # 技术指标
│   │   ├── pandas_ta_wrapper.py    # pandas-ta 包装器
│   │   └── cache.py                # 指标缓存
│   └── macd_strategy.py            # MACD 策略(兼容保留)
├── models/                 # 交易数据模型
│   ├── channel.py                  # 通道模型
│   ├── virtual_position.py         # 虚拟持仓模型
│   ├── voting.py                   # 投票模型
│   ├── strategy_state.py           # 策略状态模型
│   ├── strategy_data_requirement.py # 策略数据需求
│   ├── market_data_batch.py        # 市场数据批次
│   └── data_loading_context.py     # 数据加载上下文
├── services/               # 交易服务
│   ├── voting_service.py           # 投票服务
│   ├── alert_system.py             # 告警系统
│   ├── channel_state_manager.py    # 通道状态管理
│   ├── channel_lifecycle.py        # 通道生命周期管理
│   ├── circuit_breaker.py          # 熔断器
│   ├── config_manager.py           # 配置管理
│   ├── order_coordinator.py        # 订单协调器
│   ├── position_netting.py         # 持仓净额计算
│   ├── risk_manager.py             # 风险管理
│   ├── risk_guard.py               # 风险守卫
│   ├── virtual_position_tracker.py # 虚拟持仓追踪
│   └── parallel_strategy_executor.py # 并行策略执行器
├── risk/                   # 风险控制
│   └── risk_engine.py              # 风险引擎
├── config/                 # 配置
│   ├── channel_config.py           # 通道配置
│   ├── config_validator.py         # 配置验证器
│   └── simple_channel_config_generator.py # 简单通道配置生成器
├── utils/                  # 交易工具函数
│   ├── fee_calculator.py           # 手续费计算器
│   └── timestamp_registry.py       # 时间戳注册表
├── validators/             # 数据验证器
│   └── config_validator.py         # 配置验证器
└── exceptions.py           # 异常定义

架构原则

core/data_source/ - 数据源模块

core/data_source/
├── adapters/               # 数据源适配器
│   └── data_adapter.py             # 数据适配器基类
└── factories/              # 工厂类
    └── client_factory.py           # 客户端工厂(单例模式)

core/models/ - 数据模型

core/models/
├── broker.py               # 券商模型
├── trading.py              # 交易模型(基础)
├── custom_template.py      # ⭐ 自定义模板模型
└── multi_channel/          # 多通道模型

核心模型说明

core/repositories/ - 数据访问层

core/repositories/
├── asset_repository.py
├── broker_repository.py
├── custom_template_repository.py    # ⭐ 自定义模板存储库
├── settings_repository.py
├── stock_repository.py
├── trading_repository.py
└── user_repository.py

职责边界

新增组件说明

core/services/ - 业务服务

core/services/
├── account_service.py
├── config_validator.py             # ⭐ 配置验证服务
├── import_service.py
├── market_data_service.py
├── stock_service.py
├── trading_service.py
├── websocket_service_factory.py
└── multi_channel/                  # 多通道服务

新增服务说明

命名规范

文件命名

目录命名

迁移历史

2025-11-16: 清理旧目录

分层架构设计

依赖关系

api/ → core/services/ → core/trading/
                      → core/repositories/
                      → infrastructure/

后端分层

graph TD
    subgraph "API Layer"
        REST[REST Endpoints]
        WS[WebSocket Endpoints]
        MW[Middleware]
    end

    subgraph "Service Layer"
        BS[Business Services]
        DS[Domain Services]
    end

    subgraph "Repository Layer"
        REPO[Repositories]
        DAO[Data Access]
    end

    subgraph "Infrastructure Layer"
        DB[Database]
        CACHE[Cache]
        EXT[External Services]
    end

    REST --> BS
    WS --> DS
    MW --> BS
    BS --> REPO
    DS --> REPO
    REPO --> DB
    REPO --> CACHE
    BS --> EXT
层级 职责 主要组件 依赖方向
API层 请求处理、路由、序列化 endpoints, middleware → Service
Service层 业务逻辑、事务管理 services, validators → Repository
Repository层 数据访问抽象 repositories, mappers → Infrastructure
Infrastructure层 技术实现、外部集成 database, cache, clients 无依赖

前端分层

graph TD
    subgraph "View Layer"
        Pages[Pages]
        Components[Components]
    end

    subgraph "State Layer"
        Context[Context]
        Hooks[Hooks]
    end

    subgraph "Service Layer"
        API[API Services]
        WS2[WebSocket Services]
    end

    subgraph "Utils Layer"
        Client[HTTP Client]
        Helper[Helpers]
    end

    Pages --> Context
    Components --> Hooks
    Context --> API
    Hooks --> API
    API --> Client
    WS2 --> Client
层级 职责 主要组件 依赖方向
View层 UI渲染、用户交互 pages, components → State
State层 状态管理、业务逻辑 contexts, hooks → Service
Service层 API封装、数据转换 services → Utils
Utils层 通用工具、基础设施 api-client, helpers 无依赖

核心模块交互

请求处理流程

sequenceDiagram
    participant Client as 客户端
    participant API as API网关
    participant Auth as 认证中间件
    participant Service as 业务服务
    participant Repo as 数据仓库
    participant Cache as 缓存
    participant DB as 数据库

    Client->>API: HTTP Request
    API->>Auth: 验证JWT Token
    Auth->>Auth: 校验权限
    Auth->>Service: 调用业务逻辑
    Service->>Repo: 数据操作
    Repo->>Cache: 查询缓存
    alt 缓存未命中
        Repo->>DB: 查询数据库
        DB-->>Repo: 返回数据
        Repo->>Cache: 更新缓存
    end
    Cache-->>Repo: 返回数据
    Repo-->>Service: 返回结果
    Service-->>API: 业务响应
    API-->>Client: HTTP Response

WebSocket实时通信

sequenceDiagram
    participant Client as 客户端
    participant WS as WebSocket服务
    participant Redis as Redis PubSub
    participant Service as 业务服务

    Client->>WS: 建立连接
    WS->>Redis: 订阅频道
    Service->>Redis: 发布消息
    Redis->>WS: 推送消息
    WS->>Client: 推送数据
    Client->>WS: 发送命令
    WS->>Service: 处理命令
    Service-->>WS: 返回结果
    WS-->>Client: 响应结果

安全架构

认证与授权

graph LR
    subgraph "认证流程"
        Login[用户登录] --> Validate[验证凭据]
        Validate --> JWT[生成JWT]
        JWT --> Store[存储Token]
    end

    subgraph "请求验证"
        Request[API请求] --> Extract[提取Token]
        Extract --> Verify[验证Token]
        Verify --> Check[检查权限]
        Check --> Process[处理请求]
    end

    Store --> Request
安全措施 实现方式 目的
身份认证 JWT Token (7天有效期) 验证用户身份
权限控制 RBAC基于角色 控制资源访问
数据加密 HTTPS/TLS 传输安全
密码存储 bcrypt哈希 防止明文泄露
请求限流 Rate Limiting 防止暴力攻击
CORS控制 白名单机制 跨域安全
SQL注入防护 参数化查询 防止注入攻击
XSS防护 输入验证+输出编码 防止脚本攻击

前后端认证架构

认证流程

sequenceDiagram
    participant User as 用户
    participant Frontend as 前端
    participant ApiClient as API客户端
    participant Backend as 后端API
    participant Redis as Redis缓存

    %% 登录流程
    User->>Frontend: 输入用户名/密码
    Frontend->>ApiClient: login(credentials)
    Note over ApiClient: skipAuth: true
    ApiClient->>Backend: POST /api/v1/login
    Backend->>Backend: 验证凭据
    Backend->>Redis: 存储会话
    Backend-->>ApiClient: {access_token, user}
    ApiClient->>ApiClient: 存储token到localStorage
    ApiClient-->>Frontend: 登录成功
    Frontend->>User: 跳转主页

    %% 后续请求
    User->>Frontend: 访问受保护页面
    Frontend->>ApiClient: getData()
    ApiClient->>ApiClient: 读取localStorage token
    ApiClient->>Backend: GET /api/v1/data<br/>Authorization: Bearer {token}
    Backend->>Backend: 验证JWT
    Backend->>Redis: 检查会话
    Backend-->>ApiClient: 返回数据
    ApiClient-->>Frontend: 显示数据

    %% 认证失败
    Frontend->>ApiClient: getData()
    ApiClient->>Backend: 无效token
    Backend-->>ApiClient: 401 Unauthorized
    ApiClient->>ApiClient: 清除localStorage
    ApiClient->>Frontend: 跳转登录页

Token管理策略

策略 前端实现 后端实现 说明
存储位置 localStorage 内存+Redis 前端持久化,后端缓存
自动添加 ApiClient拦截器 - 所有请求自动添加Authorization header
刷新机制 401时重新登录 JWT 7天过期 简化实现,无刷新token
失效处理 401/403自动跳转登录 返回标准错误响应 统一错误处理
并发控制 - 单点登录 新登录踢出旧会话

API客户端架构

// 前端统一API客户端
class ApiClient {
    // 自动Token管理
    private buildHeaders(): HeadersInit {
        const token = localStorage.getItem('token');
        return {
            'Content-Type': 'application/json',
            'Authorization': token ? `Bearer ${token}` : ''
        };
    }

    // 统一错误处理
    private async handleResponse<T>(response: Response): Promise<T> {
        if (response.status === 401 || response.status === 403) {
            localStorage.removeItem('token');
            window.location.href = '/login';
            throw new Error('认证失败');
        }
        // ... 其他错误处理
    }
}

性能优化

缓存策略

缓存层级 实现技术 缓存内容 TTL
客户端缓存 localStorage 用户Token、用户配置 永久(手动清除)
应用缓存 Redis 会话、用户数据、交易数据 根据数据类型配置
连接池 Redis连接池 Redis连接复用 长连接

优化技术

系统采用以下优化技术:

前端优化

后端优化

网络优化

部署架构

本地开发部署

系统目前仅支持本地开发部署,不涉及生产部署配置。

核心组件

启动方式

# 方式1: 使用启动脚本 (推荐)
./scripts/startup.sh              # 启动所有服务
./scripts/startup.sh --backend-only   # 仅启动后端
./scripts/startup.sh --frontend-only  # 仅启动前端
./scripts/startup.sh --stop          # 停止所有服务

# 方式2: 手动启动后端
cd backend && source venv/bin/activate
uvicorn main:app --reload --port 8000

# 方式3: 手动启动前端
cd frontend && npm run dev

访问地址

数据存储

开发特性

日志架构

日志实现

Fire 使用 Python 内置的 logging 模块进行日志记录,日志输出到本地文件系统。

日志级别

日志存储

日志配置

相关文档

架构文档

开发文档