DESIGN.md

# AI Quant 项目设计文档

## 1. 项目概述

### 1.1 项目背景

随着量化交易的快速发展,越来越多的投资者开始使用量化策略进行股票交易。然而,传统的量化交易平台往往过于复杂,需要专业的编程技能和金融知识,限制了普通投资者的使用。

AI Quant 项目旨在开发一个简单易用、功能强大的 A 股量化交易框架,帮助投资者快速构建和测试量化策略,并提供模拟交易和实盘交易功能。

### 1.2 项目目标

- 开发一个基于 VNpy 4.3.0 的 A 股量化交易框架
- 保留 A 股核心功能并优化架构
- 构建工业化可用的 A 股量化交易程序
- 实现自我测试、模拟测试、数据本地缓存和离线运行
- 全面优化架构、代码、文档,确保工业级稳定性

### 1.3 项目特色

- **三层架构设计**:核心接口层、服务引擎层、应用策略层
- **招商证券对接**:单独封装招商证券专属配置模板,简化配置参数
- **单票量化策略**:单独抽离,标准化入参/出参,仅负责单票分析
- **大模型推理**:独立插件式设计,预留 Ollama/FinGPT 接口
- **双模式运行**:支持控制台模式和图形界面模式
- **依赖管理优化**:添加依赖检查功能,自动检测并提示缺失的依赖包
- **模拟数据生成**:使用几何布朗运动模型生成更真实的股票价格序列
- **交易信号优化**:调整了交易信号的判断逻辑,降低了买入信号的门槛

## 2. 需求分析

### 2.1 功能需求

#### 2.1.1 核心功能

1. **招商证券对接**:提供招商证券接口配置和交易功能
2. **单票量化策略**:实现单只股票的量化分析和交易信号生成
3. **大模型推理**:提供大模型推理服务,用于股票分析和策略生成
4. **数据管理**:提供数据缓存和管理功能,支持离线运行
5. **模拟测试**:提供模拟交易功能,用于策略测试和验证
6. **实盘交易**:提供实盘交易功能,支持自动化交易

#### 2.1.2 辅助功能

1. **控制台模式**:提供控制台界面,支持命令行操作
2. **图形界面模式**:提供图形界面,支持可视化操作
3. **日志管理**:提供日志管理功能,记录程序运行过程
4. **配置管理**:提供配置管理功能,支持参数化配置
5. **依赖检查**:提供依赖检查功能,自动检测并提示缺失的依赖包

### 2.2 非功能需求

1. **可靠性**:确保程序运行稳定,避免崩溃和数据丢失
2. **性能**:确保程序运行高效,处理大量数据时不卡顿
3. **可维护性**:确保代码结构清晰,注释详细,便于维护和扩展
4. **可扩展性**:提供插件式架构,支持功能扩展和定制
5. **安全性**:确保程序安全运行,防止恶意攻击和数据泄露

## 3. 系统架构

### 3.1 三层架构设计

AI Quant 项目采用三层架构设计,各模块间通过统一接口通信,无跨模块强依赖。

#### 3.1.1 核心接口层 (core/)

核心接口层负责与外部系统对接,包括:

- **招商证券接口**:core/api/zs_sec.py,提供招商证券接口配置和交易功能
- **市场数据接口**:core/api/market.py,提供市场数据获取功能
- **交易接口**:core/api/trade.py,提供交易功能
- **工具模块**:core/utils/,提供通用工具函数

#### 3.1.2 服务引擎层 (service/)

服务引擎层负责业务逻辑处理,包括:

- **回测引擎**:service/backtest/,提供回测功能
- **风险控制引擎**:service/risk/,提供风险控制功能
- **数据管理引擎**:service/data/,提供数据缓存和管理功能
- **大模型推理引擎**:service/llm/,提供大模型推理功能

#### 3.1.3 应用策略层 (app/)

应用策略层负责策略实现和用户交互,包括:

- **单票量化策略**:app/strategy/single_stock.py,实现单只股票的量化分析和交易信号生成
- **控制台模式**:app/console/console.py,提供控制台界面
- **图形界面模式**:app/main/mainwindow.py,提供图形界面
- **策略配置**:app/config/,提供策略参数配置

### 3.2 模块依赖关系

各模块间通过统一接口通信,无跨模块强依赖。核心接口层为服务引擎层提供基础接口,服务引擎层为应用策略层提供业务逻辑支持。

## 4. 详细设计

### 4.1 核心接口层设计

#### 4.1.1 招商证券接口

**文件路径**:core/api/zs_sec.py

**功能描述**:提供招商证券接口配置和交易功能。

**核心类**:

1. **ZSSecConfig**:招商证券接口配置类,包含服务器地址、端口、账号、密码、经纪商代码等配置参数。
2. **ZSSecApi**:招商证券交易接口类,提供连接、登录、断开连接、发送订单、撤销订单、获取账户信息和持仓信息等功能。

**核心方法**:

```python
def connect(self) -> bool:
    """
    连接服务器

    Returns:
        连接是否成功的布尔值
    """

def login(self) -> bool:
    """
    登录账户

    Returns:
        登录是否成功的布尔值
    """

def disconnect(self) -> bool:
    """
    断开连接

    Returns:
        断开连接是否成功的布尔值
    """

def send_order(
    self,
    symbol: str,
    exchange: Exchange,
    price: float,
    volume: int,
    direction: Direction,
    offset: Offset,
    order_type: OrderType = OrderType.LIMIT
) -> Optional[str]:
    """
    发送订单

    Args:
        symbol: 股票代码
        exchange: 交易所
        price: 价格
        volume: 数量
        direction: 方向
        offset: 开平类型
        order_type: 订单类型

    Returns:
        订单 ID(如果成功),否则 None
    """

def cancel_order(self, order_id: str) -> bool:
    """
    撤销订单

    Args:
        order_id: 订单 ID

    Returns:
        撤销是否成功的布尔值
    """

def get_account(self) -> Optional[Dict[str, Any]]:
    """
    获取账户信息

    Returns:
        账户信息字典(如果成功),否则 None
    """

def get_positions(self) -> Optional[Dict[str, Any]]:
    """
    获取持仓信息

    Returns:
        持仓信息字典(如果成功),否则 None
    """
```

#### 4.1.2 市场数据接口

**文件路径**:core/api/market.py

**功能描述**:提供市场数据获取功能。

**核心类**:

1. **MarketDataApi**:市场数据接口类,提供行情数据获取功能。

**核心方法**:

```python
def get_kline_data(
    self,
    symbol: str,
    frequency: str = "d",
    start_date: str = None,
    end_date: str = None
) -> pd.DataFrame:
    """
    获取 K 线数据

    Args:
        symbol: 股票代码
        frequency: 频率
        start_date: 起始日期
        end_date: 结束日期

    Returns:
        K 线数据 DataFrame
    """

def get_tick_data(
    self,
    symbol: str,
    start_date: str = None,
    end_date: str = None
) -> pd.DataFrame:
    """
    获取 tick 数据

    Args:
        symbol: 股票代码
        start_date: 起始日期
        end_date: 结束日期

    Returns:
        tick 数据 DataFrame
    """
```

#### 4.1.3 交易接口

**文件路径**:core/api/trade.py

**功能描述**:提供交易功能。

**核心类**:

1. **TradeApi**:交易接口类,提供交易功能。

**核心方法**:

```python
def send_order(
    self,
    symbol: str,
    exchange: Exchange,
    price: float,
    volume: int,
    direction: Direction,
    offset: Offset,
    order_type: OrderType = OrderType.LIMIT
) -> Optional[str]:
    """
    发送订单

    Args:
        symbol: 股票代码
        exchange: 交易所
        price: 价格
        volume: 数量
        direction: 方向
        offset: 开平类型
        order_type: 订单类型

    Returns:
        订单 ID(如果成功),否则 None
    """

def cancel_order(self, order_id: str) -> bool:
    """
    撤销订单

    Args:
        order_id: 订单 ID

    Returns:
        撤销是否成功的布尔值
    """
```

### 4.2 服务引擎层设计

#### 4.2.1 回测引擎

**文件路径**:service/backtest/

**功能描述**:提供回测功能。

**核心类**:

1. **BacktestEngine**:回测引擎类,提供回测功能。

**核心方法**:

```python
def run_backtest(
    self,
    strategy: str,
    symbol: str,
    start_date: str,
    end_date: str,
    initial_capital: float = 1000000.0
) -> Dict[str, Any]:
    """
    运行回测

    Args:
        strategy: 策略名称
        symbol: 股票代码
        start_date: 起始日期
        end_date: 结束日期
        initial_capital: 初始资金

    Returns:
        回测结果字典
    """
```

#### 4.2.2 风险控制引擎

**文件路径**:service/risk/

**功能描述**:提供风险控制功能。

**核心类**:

1. **RiskControlEngine**:风险控制引擎类,提供风险控制功能。

**核心方法**:

```python
def check_risk(self, order: Dict[str, Any]) -> bool:
    """
    检查风险

    Args:
        order: 订单信息

    Returns:
        风险检查是否通过的布尔值
    """
```

#### 4.2.3 数据管理引擎

**文件路径**:service/data/

**功能描述**:提供数据缓存和管理功能。

**核心类**:

1. **DataCache**:数据缓存管理器类,提供数据缓存和管理功能。

**核心方法**:

```python
def save(self,
         symbol: str,
         data: pd.DataFrame,
         frequency: str = "d",
         start_date: str = None,
         end_date: str = None) -> str:
    """
    保存数据到缓存

    Args:
        symbol: 股票代码
        data: 数据
        frequency: 频率
        start_date: 起始日期
        end_date: 结束日期

    Returns:
        缓存文件路径
    """

def load(self,
         symbol: str,
         frequency: str = "d",
         start_date: str = None,
         end_date: str = None) -> pd.DataFrame:
    """
    从缓存加载数据

    Args:
        symbol: 股票代码
        frequency: 频率
        start_date: 起始日期
        end_date: 结束日期

    Returns:
        加载的数据
    """

def exists(self,
           symbol: str,
           frequency: str = "d",
           start_date: str = None,
           end_date: str = None) -> bool:
    """
    检查缓存是否存在

    Args:
        symbol: 股票代码
        frequency: 频率
        start_date: 起始日期
        end_date: 结束日期

    Returns:
        缓存是否存在
    """

def delete(self,
           symbol: str,
           frequency: str = "d",
           start_date: str = None,
           end_date: str = None) -> bool:
    """
    删除缓存

    Args:
        symbol: 股票代码
        frequency: 频率
        start_date: 起始日期
        end_date: 结束日期

    Returns:
        删除是否成功
    """
```

2. **MockDataGenerator**:模拟数据生成器类,提供模拟数据生成功能。

**核心方法**:

```python
def generate_random_kline_data(
    symbol: str,
    start_date: str = "2023-01-01",
    end_date: str = "2023-12-31",
    frequency: str = "d",
    volatility: float = 0.01,
    trend: float = 0.0015
) -> pd.DataFrame:
    """
    生成随机 K 线数据

    Args:
        symbol: 股票代码
        start_date: 起始日期
        end_date: 结束日期
        frequency: 频率(d: 日线,h: 小时线,m: 分钟线)
        volatility: 波动率
        trend: 趋势强度

    Returns:
        生成的 K 线数据 DataFrame
    """
```

#### 4.2.4 大模型推理引擎

**文件路径**:service/llm/

**功能描述**:提供大模型推理功能。

**核心类**:

1. **LLMInferenceService**:大模型推理服务类,提供大模型推理功能。

**核心方法**:

```python
def infer(self, prompt: str, temperature: float = 0.7, max_tokens: int = 512) -> Optional[str]:
    """
    执行大模型推理

    Args:
        prompt: 推理提示
        temperature: 推理温度
        max_tokens: 最大生成 tokens 数

    Returns:
        推理结果字符串(如果成功),否则 None
    """

def analyze_stock_data(self, symbol: str, data: Dict[str, Any]) -> Optional[str]:
    """
    分析股票数据(专业方法)

    Args:
        symbol: 股票代码
        data: 股票数据

    Returns:
        分析结果字符串(如果成功),否则 None
    """

def generate_strategy(self, conditions: Dict[str, Any]) -> Optional[str]:
    """
    生成交易策略(专业方法)

    Args:
        conditions: 策略条件

    Returns:
        策略代码字符串(如果成功),否则 None
    """
```

### 4.3 应用策略层设计

#### 4.3.1 单票量化策略

**文件路径**:app/strategy/single_stock.py

**功能描述**:实现单只股票的量化分析和交易信号生成。

**核心类**:

1. **SingleStockAnalyzer**:单票量化分析器类,提供单只股票的量化分析功能。

**核心方法**:

```python
def analyze(self, symbol: str, kline_data: pd.DataFrame) -> "StockAnalysisResult":
    """
    分析股票数据

    Args:
        symbol: 股票代码
        kline_data: K 线数据

    Returns:
        股票分析结果
    """
```

2. **StockAnalysisResult**:股票分析结果类,包含股票代码、综合评分、标的等级、交易信号和关键指标等信息。

#### 4.3.2 控制台模式

**文件路径**:app/console/console.py

**功能描述**:提供控制台界面,支持命令行操作。

**核心类**:

1. **ConsoleMode**:控制台模式类,提供控制台界面。

**核心方法**:

```python
def run(self):
    """
    运行控制台模式
    """
```

#### 4.3.3 图形界面模式

**文件路径**:app/main/mainwindow.py

**功能描述**:提供图形界面,支持可视化操作。

**核心类**:

1. **MainWindow**:图形界面主窗口类,提供图形界面。

## 5. 测试计划

### 5.1 测试目标

- 验证项目核心功能是否正常运行
- 验证项目架构是否稳定
- 验证项目代码是否符合规范
- 验证项目性能是否满足要求

### 5.2 测试内容

#### 5.2.1 单元测试

- 测试核心接口层的接口是否正常工作
- 测试服务引擎层的业务逻辑是否正确
- 测试应用策略层的策略是否有效

#### 5.2.2 集成测试

- 测试各模块间的交互是否正常
- 测试系统整体功能是否满足需求

#### 5.2.3 性能测试

- 测试系统处理大量数据时的性能
- 测试系统响应时间是否满足要求

#### 5.2.4 安全测试

- 测试系统是否存在安全漏洞
- 测试系统是否符合安全标准

### 5.3 测试方法

- **手动测试**:通过控制台模式和图形界面模式进行测试
- **自动化测试**:使用 pytest 进行自动化测试
- **性能测试**:使用 locust 进行性能测试

### 5.4 测试工具

- **pytest**:用于单元测试和集成测试
- **locust**:用于性能测试
- **flake8**:用于代码质量检查

### 5.5 测试报告

测试报告将包含以下内容:

- 测试目的
- 测试环境
- 测试内容
- 测试结果
- 测试结论
- 建议

## 6. 部署计划

### 6.1 部署环境

- **操作系统**:Linux(推荐 CentOS 7 或 Ubuntu 18.04)
- **Python 版本**:Python 3.8+
- **依赖包**:参考 requirements.txt

### 6.2 部署步骤

1. 克隆项目代码
2. 安装依赖包
3. 配置招商证券接口参数
4. 启动程序

### 6.3 部署方式

- **控制台模式**:使用命令行启动
- **图形界面模式**:使用桌面环境启动

## 7. 维护计划

### 7.1 维护目标

- 确保项目持续稳定运行
- 及时修复 bug 和安全漏洞
- 定期更新项目功能
- 提供技术支持

### 7.2 维护内容

- 代码维护:修复 bug 和安全漏洞
- 功能更新:添加新功能和优化现有功能
- 文档更新:更新项目文档
- 技术支持:提供技术支持和培训

### 7.3 维护流程

- 问题报告:用户提交问题报告
- 问题分析:分析问题原因
- 问题修复:修复问题
- 测试验证:测试修复后的功能
- 发布更新:发布更新版本

## 8. 总结

AI Quant 项目是一个基于 VNpy 4.3.0 的 A 股量化交易框架,采用三层架构设计,保留了 A 股核心功能并优化了架构。项目提供了招商证券对接、单票量化策略、大模型推理、数据管理、模拟测试和实盘交易等功能,支持控制台模式和图形界面模式。

项目架构清晰,代码质量高,所有模块都添加了详细的中文注释,确保了工业级的稳定性。项目还提供了完整的测试计划和部署计划,便于项目的维护和扩展。