# QTradeProgram - 大单检测程序 软件设计说明书 ## 一、软件概述 ### 1.1 软件名称 **QTradeProgram - 大单检测程序** ### 1.2 软件版本 **V1.0** ### 1.3 开发目的 本软件旨在为金融投资领域提供专业的股票大单实时监控解决方案,帮助投资者及时发现市场中的大额交易行为,为投资决策提供参考依据。 ### 1.4 适用范围 - 股票投资者 - 金融机构 - 量化交易团队 - 金融数据分析师 ## 二、系统架构设计 ### 2.1 总体架构 ``` ┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐ │ 用户界面层 │ │ 业务逻辑层 │ │ 数据访问层 │ │ (UI Layer) │◄──►│ (Business Layer) │◄──►│ (Data Layer) │ │ │ │ │ │ │ │ • QMainwindow │ │ • 订单处理 │ │ • Futu API │ │ • 大单查看器 │ │ • 大单检测 │ │ • 配置文件 │ │ • 呼吸灯提示 │ │ • 日志管理 │ │ • 数据缓存 │ └─────────────────┘ └─────────────────┘ └─────────────────┘ ``` ### 2.2 模块划分 #### 2.2.1 用户界面模块 (QMainwindow/) - **职责**: 提供图形用户界面,处理用户交互 - **核心类**: - `QMainwindow`: 主窗口类 - `QBigOrderViewer`: 大单查看器 - `QBreathingLight`: 呼吸灯提示控件 #### 2.2.2 业务逻辑模块 (Sqbase/) - **职责**: 实现核心业务逻辑,包括大单检测、数据处理等 - **核心类**: - `QOrderProcessor`: 订单处理器 - `QBigOrderManager`: 大单管理器 - `OrderBookParser`: 订单簿解析器 #### 2.2.3 数据访问模块 (FTAPI/) - **职责**: 封装外部API,提供数据访问接口 - **核心类**: - `CFTInterface`: Futu API接口封装 - `QDataAcquisition`: 数据采集器 #### 2.2.4 工具模块 (Utilities/) - **职责**: 提供通用工具和辅助功能 - **核心类**: - `QLogManager`: 日志管理器 - `ObjectPool`: 对象池 ## 三、详细设计 ### 3.1 核心算法设计 #### 3.1.1 大单检测算法 ```cpp 算法名称: 基于阈值的大单检测算法 输入: OrderBookData (订单簿数据), threshold (阈值) 输出: QVector (大单信息列表) 算法步骤: 1. 遍历买盘订单数据 2. 对每个订单条目,比较成交量与预设阈值 3. 如果成交量 ≥ 阈值,标记为大单并记录信息 4. 遍历卖盘订单数据,重复步骤2-3 5. 返回所有检测到的大单信息 ``` #### 3.1.2 性能优化算法 ```cpp 算法名称: 缓存优化算法 输入: cacheKey (缓存键), orderData (订单数据) 输出: QVector (大单信息列表) 算法步骤: 1. 根据股票代码和时间生成缓存键 2. 在缓存中查找是否存在该键对应的结果 3. 如果找到,直接返回缓存结果 4. 如果未找到,执行大单检测算法 5. 将检测结果存入缓存 6. 维护缓存大小,淘汰最久未使用的数据 ``` ### 3.2 数据结构设计 #### 3.2.1 核心数据结构 ```cpp // 订单簿条目 struct OrderBookEntry { double price; // 价格 double volume; // 成交量 int orderCount; // 订单数量 QString code; // 股票代码 QVector details; // 订单详情 }; // 大单信息 struct BigOrderInfo { double price; // 价格 double volume; // 成交量 long long orderId; // 订单ID int nBigOrderType; // 大单类型 (0:卖盘/1:买盘) bool isBigOrder; // 是否为大单 QString name; // 股票名称 QString code; // 股票代码 QString svrRecvTime; // 交易所接收时间 }; ``` #### 3.2.2 配置数据结构 ```cpp // 订阅项 struct ReplyCodeItem { QString code; // 股票代码 float quantity; // 检测阈值 QString name; // 股票名称 }; ``` ### 3.3 类设计 #### 3.3.1 QOrderProcessor 类 ```cpp 类名: QOrderProcessor 职责: 订单数据处理和大单检测 主要方法: - processOrderBook(): 处理订单簿数据 - findExtremeOrders(): 检测大单 - findMaxVolumeItem(): 查找最大成交量订单 - setreplyCodeQuantity(): 设置阈值配置 主要属性: - m_threadPool: 线程池 - m_replyCodeQuantity: 阈值配置映射 - m_orderCache: 订单缓存 ``` #### 3.3.2 QBigOrderManager 类 ```cpp 类名: QBigOrderManager 职责: 大单数据管理 设计模式: 单例模式 主要方法: - addBigOrder(): 添加大单 - removeBigOrder(): 删除大单 - getBigOrders(): 获取大单列表 - clearAll(): 清空所有大单 主要属性: - m_bigOrders: 大单列表 - m_orderMutex: 线程安全锁 ``` ### 3.4 接口设计 #### 3.4.1 信号槽接口 ```cpp // 大单检测信号 void maxOrderReady(BigOrderInfo bigOrderInfo); // 处理状态信号 void processingStarted(const QString& code); void processingFinished(const QString& code); void errorOccurred(const QString& code, const QString& error); // 大单管理信号 void bigOrderAdded(QSharedPointer order); void bigOrderRemoved(const QString& code); ``` #### 3.4.2 配置接口 ```cpp // 阈值设置接口 void setreplyCodeQuantity(QMap CodeQuantity); // 处理开关接口 void setProcessingEnabled(bool enabled); void setJsonSaveEnabled(bool enabled); ``` ## 四、技术实现 ### 4.1 多线程处理 #### 4.1.1 线程池设计 ```cpp // 使用Qt线程池处理订单数据 QThreadPool m_threadPool; // 异步处理订单数据 QtConcurrent::run(&m_threadPool, [this, stRsp]() { // 订单处理逻辑 }); ``` #### 4.1.2 线程安全机制 ```cpp // 使用互斥锁保护共享数据 mutable QMutex m_dataMutex; mutable QMutex m_cacheMutex; // 使用QMutexLocker自动管理锁 QMutexLocker locker(&m_cacheMutex); ``` ### 4.2 内存管理 #### 4.2.1 智能指针使用 ```cpp // 使用QSharedPointer管理对象生命周期 QList> m_bigOrders; QList> m_replyCodes; ``` #### 4.2.2 对象池设计 ```cpp // 使用对象池减少内存分配开销 ObjectPool m_dataPool; ObjectPool m_orderPool; ``` ### 4.3 性能优化 #### 4.3.1 缓存机制 ```cpp // 手动实现LRU缓存 mutable QMap> m_orderCache; mutable QList m_cacheKeys; size_t m_cacheMaxSize = 200; ``` #### 4.3.2 算法优化 ```cpp // 使用高效的数据结构和算法 QMap m_replyCodeQuantity; // O(log n)查找 QVector bids; // 连续内存访问 ``` ## 五、数据流程设计 ### 5.1 正常数据流程 ``` Futu API推送数据 → CFTInterface::OnReply() → QOrderProcessor::processOrderBook() → OrderBookParser解析 → findExtremeOrders()检测大单 → emit maxOrderReady() → QBigOrderManager::addBigOrder() → 更新UI显示 → 呼吸灯提示 ``` ### 5.2 配置管理流程 ``` 用户界面操作 → 更新m_replyCodeQuantity → QOrderProcessor::setreplyCodeQuantity() → 保存到配置文件 → 实时生效 ``` ### 5.3 错误处理流程 ``` API连接异常 → 触发错误信号 → 日志记录 → 用户界面提示 数据解析错误 → 异常捕获 → 错误日志 → 跳过当前数据处理 ``` ## 六、数据库设计 ### 6.1 配置文件设计 ```ini # 订阅列表文件格式 (CSV) 股票代码,检测阈值(K),股票名称 00700,50,腾讯控股 00005,30,汇丰控股 ``` ### 6.2 日志文件设计 ```text [时间戳] [级别] [模块] [消息] 2025-11-11 10:00:00 INFO QOrderProcessor 开始处理股票00700 2025-11-11 10:00:01 WARNING QDataAcquisition API连接超时 ``` ## 七、安全设计 ### 7.1 数据安全 - 所有敏感数据在内存中进行处理 - 配置文件使用明文存储,不包含敏感信息 - 网络通信使用Futu API的安全通道 ### 7.2 程序安全 - 使用异常处理机制防止程序崩溃 - 内存访问使用智能指针防止内存泄漏 - 多线程操作使用互斥锁保证数据一致性 ## 八、性能设计 ### 8.1 响应时间 - 大单检测响应时间: < 100ms - 界面更新响应时间: < 50ms - 数据解析时间: < 10ms ### 8.2 并发处理 - 支持同时监控100+只股票 - 线程池最大线程数: 8 - 缓存容量: 200条记录 ### 8.3 内存使用 - 初始内存占用: < 50MB - 峰值内存占用: < 200MB - 内存泄漏控制: 使用智能指针和对象池 ## 九、扩展性设计 ### 9.1 模块扩展 - 支持添加新的数据源 - 支持新的检测算法 - 支持新的输出格式 ### 9.2 功能扩展 - 支持多种大单检测策略 - 支持历史数据回放 - 支持数据导出功能 ## 十、测试设计 ### 10.1 单元测试 - 大单检测算法测试 - 数据解析测试 - 缓存机制测试 ### 10.2 集成测试 - 模块间接口测试 - 数据流程测试 - 性能压力测试 ### 10.3 系统测试 - 完整功能测试 - 稳定性测试 - 兼容性测试 ## 十一、部署设计 ### 11.1 系统要求 - **操作系统**: Windows 10/11 - **运行环境**: .NET Framework 4.5+ - **依赖库**: Qt 5.9, Futu API, Protobuf ### 11.2 安装部署 1. 安装必要的运行环境 2. 复制程序文件到目标目录 3. 配置股票订阅列表 4. 启动应用程序 ## 十二、维护设计 ### 12.1 日志系统 - 分级日志记录 (INFO, WARNING, ERROR, FATAL) - 日志文件自动轮转 - 日志查看器集成在界面中 ### 12.2 错误处理 - 完善的异常捕获机制 - 友好的错误提示信息 - 自动恢复机制 --- **设计说明**: 本设计说明书详细描述了QTradeProgram大单检测程序的软件架构、模块设计、技术实现和性能优化等方面,为软件的开发、测试和维护提供了全面的技术指导。