Files
QTradeProgram/软著申请材料/__主题__:QTradeProgram - 大单检测程序软件设计说明书(包括软件概述、系统架构设计、详细设计、类设计和接口设计等内容).md
2026-02-25 23:01:42 +08:00

1394 lines
36 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# QTradeProgram - 大单检测程序 软件设计说明书(优化完整版)
## 一、软件概述
### 1.1 软件名称
**QTradeProgram - 大单检测程序**(修正:去除全称空格,符合软件命名规范)
### 1.2 软件版本
**V1.0**(初始正式版本,包含全部核心功能模块,无功能阉割)
### 1.3 开发目的
本软件旨在为金融投资领域提供专业、高效的股票大单实时监控解决方案,通过精准识别市场大额交易行为,帮助投资者捕捉主力资金动向,为投资决策提供客观数据参考,填补中小投资者缺乏专业监控工具的空白。
### 1.4 适用范围
* 个人股票投资者(专注于短线交易、主力资金跟踪场景)
* 小型金融机构(需快速获取市场异动信号)
* 量化交易团队(作为策略输入数据源)
* 金融数据分析师(用于市场资金流向研究)
### 1.5 运行环境概述
* 运行平台Windows 桌面端64 位)
* 核心依赖Futu API 数据服务、Qt 图形界面框架
* 网络要求10Mbps 及以上稳定宽带延迟≤200ms
## 二、系统架构设计
### 2.1 总体架构
```
┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐
│ 用户界面层 │ │ 业务逻辑层 │ │ 数据访问层 │ │ 基础支撑层 │
│ (UI Layer) │◄──►│ (Business Layer) │◄──►│ (Data Layer) │◄──►│ (Support Layer) │
│ │ │ │ │ │ │ │
│ • 主窗口模块 │ │ • 订单处理模块 │ │ • API封装模块 │ │ • 日志模块 │
│ • 数据展示模块 │ │ • 大单检测模块 │ │ • 数据采集模块 │ │ • 配置模块 │
│ • 交互控制模块 │ │ • 缓存管理模块 │ │ • 数据解析模块 │ │ • 线程管理模块 │
│ • 提示反馈模块 │ │ • 统计分析模块 │ │ • 数据存储模块 │ │ • 异常处理模块 │
└─────────────────┘ └─────────────────┘ └─────────────────┘ └─────────────────┘
```
**架构说明**:采用分层架构设计,层间通过接口交互,降低模块耦合度;基础支撑层为各核心层提供通用服务,确保系统稳定性和一致性。
### 2.2 模块划分
#### 2.2.1 用户界面层QMainwindow/
* **职责**:提供图形化交互入口,展示数据结果,接收用户操作指令
* **核心类**
* `QMainwindow`:主窗口容器,管理各子面板布局
* `QBigOrderViewer`:大单数据展示控件(列表 + 详情)
* `QBreathingLight`:大单视觉提示控件
* `QConfigWidget`:配置参数设置界面
* `QLogWidget`:日志查看内嵌组件
#### 2.2.2 业务逻辑层Sqbase/
* **职责**:实现核心业务逻辑,协调数据处理与界面展示
* **核心类**
* `QOrderProcessor`:订单数据处理核心,负责数据清洗与大单检测
* `QBigOrderManager`:大单数据管理,提供增删查改及线程安全保障
* `OrderBookParser`:订单簿数据解析,转换为标准化结构
* `QCacheManager`:缓存管理,优化重复数据处理效率
* `QStatisticAnalyzer`:基础统计分析(大单数量、频率统计)
#### 2.2.3 数据访问层FTAPI/
* **职责**:封装外部 API 交互,提供统一数据访问接口
* **核心类**
* `CFTInterface`Futu API 接口封装,处理连接与数据请求
* `QDataAcquisition`:数据采集器,负责实时数据接收与分发
* `QDataStorage`:本地数据存储,管理配置文件与历史记录
* `QDataValidator`:数据校验器,过滤异常数据(无效价格、负数成交量)
#### 2.2.4 基础支撑层Utilities/
* **职责**:提供通用工具类与基础服务,支撑各核心模块运行
* **核心类**
* `QLogManager`:日志管理器,支持分级记录与文件轮转
* `ObjectPool`:对象池,复用高频创建的对象(订单数据、大单信息)
* `QThreadPoolManager`:线程池管理,统一调度异步任务
* `QExceptionHandler`:全局异常处理器,捕获并记录运行时错误
* `QConfigManager`:配置管理器,负责配置文件的读写与解析
### 2.3 模块交互关系
* 界面层通过信号槽机制向业务逻辑层发送操作指令(如阈值修改、股票订阅)
* 业务逻辑层调用数据访问层接口获取原始数据,处理后反馈给界面层展示
* 基础支撑层为所有模块提供日志、线程、异常处理等公共服务
* 跨模块数据传输采用智能指针封装,避免内存泄漏
## 三、详细设计
### 3.1 核心算法设计
#### 3.1.1 大单检测算法
```
算法名称: 基于动态阈值的大单检测算法
输入: OrderBookData (标准化订单簿数据), ReplyCodeConfig (股票订阅配置)
输出: QVector\<BigOrderInfo> (有效大单信息列表)
算法步骤:
1\. 初始化读取当前股票的预设阈值单位K股及历史成交量基线最近5分钟均值
2\. 数据预处理过滤无效订单价格≤0、成交量≤0、代码为空
3\. 动态阈值计算:实际检测阈值 = max(预设阈值, 历史成交量基线×1.5)
4\. 大单识别:
&#x20; a. 遍历买盘BID订单列表对比每笔订单成交量与实际检测阈值
&#x20; b. 成交量≥实际检测阈值时,标记为买盘大单,记录核心信息(价格、数量、时间)
&#x20; c. 遍历卖盘ASK订单列表重复步骤4a-4b标记卖盘大单
5\. 去重处理同一订单IDorderId在30秒内不重复记录
6\. 结果排序按订单接收时间降序排列返回前100条有效大单避免数据过载
```
**算法特点**:结合固定阈值与历史成交量动态调整,降低单一股票不同时段的误报率
#### 3.1.2 缓存优化算法
```
算法名称: LRU最近最少使用缓存优化算法
输入: cacheKey (股票代码+时间片), processResult (处理后的数据)
输出: QVector\<BigOrderInfo> (缓存数据/新处理数据)
算法步骤:
1\. 缓存键生成:按“股票代码\_时间片每1分钟为一个时间片”生成唯一缓存键
2\. 缓存查询:在缓存字典中查找对应缓存键
3\. 缓存命中:
&#x20; a. 若找到且缓存未过期默认有效期30秒返回缓存数据
&#x20; b. 更新该缓存键的访问时间维持LRU排序
4\. 缓存未命中:
&#x20; a. 执行大单检测算法获取新数据
&#x20; b. 将新数据存入缓存,关联缓存键与过期时间
5\. 缓存清理:
&#x20; a. 当缓存数量达到上限默认200条移除最久未访问的缓存项
&#x20; b. 每次新增缓存时,顺带清理已过期的缓存项
```
**算法价值**:减少重复数据处理次数,提升高并发场景下的响应速度
### 3.2 数据结构设计
#### 3.2.1 核心业务数据结构
```
// 订单簿条目(标准化后)
struct OrderBookEntry {
&#x20; double price; // 订单价格(单位:元)
&#x20; double volume; // 成交量(单位:股)
&#x20; int orderCount; // 该价位订单笔数
&#x20; QString code; // 股票代码如00700
&#x20; QString marketType; // 市场类型SH/A股HK/港股)
&#x20; QDateTime orderTime; // 订单生成时间(精确到毫秒)
&#x20; QVector\<OrderDetail> details; // 订单详情(仅包含公开字段)
};
// 订单详情
struct OrderDetail {
&#x20; long long orderId; // 订单唯一标识
&#x20; int orderType; // 订单类型0/限价单1/市价单)
&#x20; double tradeAmount; // 成交额(单位:元)
};
// 大单信息(检测结果)
struct BigOrderInfo {
&#x20; double price; // 成交价格(单位:元)
&#x20; double volume; // 成交数量(单位:股)
&#x20; double amount; // 成交金额(单位:元)
&#x20; long long orderId; // 订单ID
&#x20; int bigOrderType; // 大单类型0:卖盘1:买盘)
&#x20; QString stockCode; // 股票代码
&#x20; QString stockName; // 股票名称
&#x20; QDateTime receiveTime; // 系统接收时间
&#x20; QDateTime tradeTime; // 实际成交时间
&#x20; double threshold; // 检测时使用的阈值(单位:股)
&#x20; bool isDynamicThreshold;// 是否使用动态阈值
};
```
#### 3.2.2 配置与系统数据结构
```
// 股票订阅配置项
struct ReplyCodeItem {
&#x20; QString stockCode; // 股票代码(唯一标识)
&#x20; float threshold; // 基础检测阈值单位K股
&#x20; QString stockName; // 股票名称
&#x20; bool isDynamic; // 是否启用动态阈值
&#x20; QString marketType; // 市场类型SH/SZ/HK
&#x20; bool isMonitored; // 是否启用监控true/启用false/暂停)
};
// 系统配置
struct SystemConfig {
&#x20; int threadPoolSize; // 线程池最大线程数默认8
&#x20; int cacheMaxSize; // 缓存最大条目数默认200
&#x20; int cacheExpireTime; // 缓存过期时间单位默认30
&#x20; QString logSavePath; // 日志保存路径(默认./logs/
&#x20; int logRetainDays; // 日志保留天数默认30
&#x20; bool isSoundPrompt; // 是否启用声音提示默认true
&#x20; bool isAutoReconnect; // 是否启用自动重连默认true
&#x20; int reconnectInterval; // 重连间隔单位默认5
};
```
### 3.3 类设计
#### 3.3.1 QOrderProcessor 类
```
类名: QOrderProcessor
所属模块: 业务逻辑层
职责: 订单数据处理与大单检测核心,协调数据解析、阈值比对与结果输出
设计模式: 单例模式(确保全局唯一数据处理入口)
主要方法:
\- processOrderBook(const OrderBookData& data):处理单条订单簿数据,返回大单检测结果
\- setReplyCodeConfig(const QVector\<ReplyCodeItem>& config):设置股票订阅配置(含阈值)
\- getProcessingStatus(const QString& stockCode):获取指定股票的处理状态
\- pauseProcessing():暂停数据处理(如用户手动暂停监控)
\- resumeProcessing():恢复数据处理
主要属性:
\- m\_threadPool线程池实例用于异步处理多股票数据
\- m\_replyCodeConfig股票订阅配置列表存储阈值及监控状态
\- m\_orderCacheLRU缓存实例缓存近期处理结果
\- m\_processingStatus处理状态映射股票代码→是否处理中
\- m\_mutex互斥锁保障多线程访问安全
依赖类:
\- OrderBookParser数据解析依赖
\- QCacheManager缓存管理依赖
\- QDataValidator数据校验依赖
```
#### 3.3.2 QBigOrderManager 类
```
类名: QBigOrderManager
所属模块: 业务逻辑层
职责: 统一管理大单数据,提供线程安全的增删查改接口,同步数据至界面
设计模式: 单例模式+观察者模式(数据变化时通知界面更新)
主要方法:
\- addBigOrder(const QSharedPointer\<BigOrderInfo>& order):添加大单(自动去重)
\- removeBigOrder(long long orderId)根据订单ID删除大单
\- removeBigOrdersByStock(const QString& stockCode):删除指定股票的所有大单
\- getBigOrders(int count = 100)获取最新大单列表默认前100条
\- getBigOrdersByStock(const QString& stockCode):获取指定股票的大单列表
\- clearAll():清空所有大单数据
\- getBigOrderCount():获取当前大单总数
主要属性:
\- m\_bigOrders大单数据存储有序列表按时间降序
\- m\_orderIdSet订单ID集合用于去重
\- m\_orderMutex数据访问互斥锁
\- m\_observers观察者列表界面组件
信号接口:
\- bigOrderAdded(QSharedPointer\<BigOrderInfo> order):新增大单时触发
\- bigOrderRemoved(long long orderId):删除大单时触发
\- bigOrderCleared():清空大单时触发
```
#### 3.3.3 CFTInterface 类
```
类名: CFTInterface
所属模块: 数据访问层
职责: 封装Futu API的连接、数据请求与接收逻辑提供统一数据接口
主要方法:
\- init(const QString& apiKey, const QString& secret)初始化API传入密钥
\- connectAPI()建立API连接返回连接状态
\- disconnectAPI()断开API连接
\- subscribeStock(const QString& stockCode, const QString& marketType):订阅股票数据
\- unsubscribeStock(const QString& stockCode):取消订阅股票数据
\- isConnected():获取当前连接状态
\- getErrorMsg():获取最近一次错误信息
主要属性:
\- m\_apiKeyAPI密钥内存中加密存储
\- m\_secretAPI秘钥内存中加密存储
\- m\_isConnected连接状态标识
\- m\_errorCode最近错误代码
\- m\_errorMsg最近错误信息
\- m\_mutex连接操作互斥锁
信号接口:
\- connected():连接成功时触发
\- disconnected():连接断开时触发
\- dataReceived(const QByteArray& rawData):接收原始数据时触发
\- errorOccurred(int errorCode, const QString& errorMsg):发生错误时触发
依赖:
\- Futu API SDK底层通信依赖
\- QEncryptionUtils密钥加密存储依赖
```
#### 3.3.4 QLogManager 类
```
类名: QLogManager
所属模块: 基础支撑层
职责: 提供分级日志记录服务,支持日志文件轮转与查看
设计模式: 单例模式
主要方法:
\- logDebug(const QString& module, const QString& msg):记录调试日志(仅开发环境生效)
\- logInfo(const QString& module, const QString& msg):记录信息日志
\- logWarning(const QString& module, const QString& msg):记录警告日志
\- logError(const QString& module, const QString& msg):记录错误日志
\- logFatal(const QString& module, const QString& msg):记录致命错误日志
\- setLogLevel(int level)设置日志输出级别默认INFO及以上
\- getLogFiles():获取日志文件列表
\- clearExpiredLogs():清理过期日志
主要属性:
\- m\_logLevel日志输出级别DEBUG=0, INFO=1, WARNING=2, ERROR=3, FATAL=4
\- m\_logPath日志保存路径
\- m\_retainDays日志保留天数
\- m\_fileSizeLimit单个日志文件大小限制默认50MB
\- m\_currentLogFile当前日志文件句柄
核心逻辑:
\- 按“日志级别\_日期.log”命名日志文件
\- 达到文件大小限制或跨天时自动创建新日志文件
\- 日志内容格式:\[时间戳(精确到毫秒)] \[级别] \[模块] 消息内容
```
### 3.4 接口设计
#### 3.4.1 模块间接口(信号槽)
```
// 数据访问层→业务逻辑层(数据接收)
void rawDataReceived(const QByteArray& rawData); // 接收原始API数据
void apiConnected(); // API连接成功
void apiDisconnected(); // API连接断开
void apiErrorOccurred(int errorCode, const QString& errorMsg); // API错误
// 业务逻辑层→用户界面层(数据展示)
void bigOrderAdded(QSharedPointer\<BigOrderInfo> order); // 新增大单
void bigOrderListUpdated(const QVector\<QSharedPointer\<BigOrderInfo>>& orders); // 大单列表更新
void processingStatusChanged(const QString& stockCode, bool isProcessing); // 处理状态变更
void statisticDataUpdated(const StatisticData& data); // 统计数据更新
// 用户界面层→业务逻辑层(操作指令)
void subscribeStock(const ReplyCodeItem& item); // 订阅股票
void unsubscribeStock(const QString& stockCode); // 取消订阅
void updateThreshold(const QString& stockCode, float threshold); // 更新阈值
void setDynamicThreshold(const QString& stockCode, bool isDynamic); // 启用/禁用动态阈值
void clearAllBigOrders(); // 清空大单
void startMonitoring(); // 开始监控
void stopMonitoring(); // 停止监控
// 基础支撑层→其他模块(公共服务)
void logGenerated(const QString& logContent); // 新日志生成
void fatalErrorOccurred(const QString& errorMsg); // 致命错误
```
#### 3.4.2 外部接口(扩展预留)
```
// 数据导出接口(供外部系统调用)
class IDataExporter {
public:
&#x20; virtual bool exportToCsv(const QString& filePath, const QVector\<QSharedPointer\<BigOrderInfo>>& data) = 0;
&#x20; virtual bool exportToJson(const QString& filePath, const QVector\<QSharedPointer\<BigOrderInfo>>& data) = 0;
};
// 检测算法扩展接口(支持插件化替换)
class IBigOrderDetector {
public:
&#x20; virtual QVector\<QSharedPointer\<BigOrderInfo>> detect(const OrderBookData& data, const ReplyCodeItem& config) = 0;
&#x20; virtual QString detectorName() const = 0;
&#x20; virtual QWidget\* configWidget() = 0;
};
```
## 四、技术实现
### 4.1 多线程处理
#### 4.1.1 线程池设计
* 采用 Qt 线程池 + 自定义任务调度策略,线程数默认 8可通过配置文件调整
* 任务优先级划分:
* 高优先级:数据接收与解析任务
* 中优先级:大单检测与统计任务
* 低优先级:日志写入、缓存清理任务
* 任务队列管理:使用无锁队列存储任务,避免线程阻塞
#### 4.1.2 线程安全机制
* 共享数据如大单列表、配置信息采用互斥锁QMutex保护
* 使用 QMutexLocker 自动管理锁的获取与释放,避免死锁
* 跨线程数据传输采用 QSharedPointer 智能指针,确保内存安全释放
* 禁止在非 UI 线程直接操作界面组件,通过信号槽异步通知 UI 更新
```
// 线程安全访问示例
QSharedPointer\<BigOrderInfo> getLatestBigOrder() {
&#x20; QMutexLocker locker(\&m\_orderMutex); // 自动加锁
&#x20; if (m\_bigOrders.isEmpty()) {
&#x20; return nullptr;
&#x20; }
&#x20; return m\_bigOrders.first(); // 自动解锁QMutexLocker析构
}
```
### 4.2 内存管理
#### 4.2.1 智能指针应用
* 所有动态创建的业务对象BigOrderInfo、OrderBookData 等)均使用 QSharedPointer 管理
* 容器存储采用 QVector\<QSharedPointer>,避免浅拷贝与内存泄漏
* 跨线程传递对象时,通过智能指针自动维护引用计数,确保对象生命周期
#### 4.2.2 对象池设计
* 针对高频创建 / 销毁的对象(如 OrderBookEntry、OrderDetail实现对象池复用
* 对象池核心参数:
* 初始容量50 个
* 最大容量200 个
* 空闲时间:超过 30 秒未使用的对象自动销毁
* 减少内存分配与释放开销,提升高并发场景下的性能
```
// 对象池使用示例
QSharedPointer\<OrderBookEntry> getOrderBookEntry() {
&#x20; return m\_objectPool.acquire(); // 从对象池获取对象
}
void releaseOrderBookEntry(QSharedPointer\<OrderBookEntry> entry) {
&#x20; entry->reset(); // 重置对象状态
&#x20; m\_objectPool.release(entry); // 归还对象池
}
```
### 4.3 性能优化
#### 4.3.1 缓存机制
* 实现 LRU 缓存管理近期处理的股票数据缓存命中率目标≥60%
* 缓存键设计:结合股票代码与时间片,确保数据时效性
* 缓存清理策略:容量满时移除最久未访问项,同时清理过期项
#### 4.3.2 数据处理优化
* 采用批量解析策略:每接收 10 条原始数据后批量解析,减少函数调用开销
* 使用高效数据结构QMapO (log n) 查找存储股票配置QVector连续内存存储订单数据
* 避免重复计算缓存历史成交量基线5 分钟更新一次,无需实时计算
* 异步 IO 操作:日志写入、文件存储等 IO 操作放入单独线程,不阻塞核心业务
#### 4.3.3 界面渲染优化
* 大单列表采用分页渲染(每页 50 条),避免大量数据一次性渲染卡顿
* 界面更新采用定时刷新100ms / 次),而非数据变化立即刷新
* 隐藏不可见区域的渲染,减少 GPU 占用
### 4.4 异常处理
#### 4.4.1 全局异常捕获
* 实现 Qt 全局异常处理器,捕获 C++ 异常与 Qt 信号槽异常
* 异常分级处理:
* 轻微异常(如单条数据解析失败):记录日志,跳过该数据,不影响整体运行
* 严重异常(如 API 连接失败):记录日志,触发重连机制,界面提示用户
* 致命异常(如内存不足):记录日志,保存当前配置与数据,优雅退出程序
#### 4.4.2 数据异常处理
* 数据校验过滤价格≤0、成交量≤0、代码格式非法的数据
* 数据恢复:解析失败时,尝试使用备用解析方案;仍失败则丢弃该条数据
* 边界处理:针对涨跌停价格、异常成交量(超过历史均值 10 倍)单独标记,不直接丢弃
## 五、数据流程设计
### 5.1 核心数据流程(实时监控)
```
1\. 用户启动程序→QLogManager初始化→QConfigManager加载配置→CFTInterface初始化
2\. 用户触发"开始监控"→CFTInterface::connectAPI()建立连接→连接成功后触发apiConnected()信号
3\. 业务逻辑层接收信号→调用CFTInterface::subscribeStock()订阅配置中的股票
4\. Futu API推送原始数据→CFTInterface::OnDataReceived()接收→触发rawDataReceived()信号
5\. 业务逻辑层接收原始数据→OrderBookParser::parse()解析为标准化OrderBookData
6\. QDataValidator::validate()校验数据有效性→过滤异常数据
7\. QOrderProcessor::processOrderBook()处理数据→调用大单检测算法
8\. 检测到大单→QBigOrderManager::addBigOrder()添加自动去重→触发bigOrderAdded()信号
9\. 用户界面层接收信号→QBigOrderViewer更新列表→QBreathingLight触发提示
10\. 同时QLogManager记录大单信息→QDataStorage异步保存至历史记录
```
### 5.2 配置管理流程
```
1\. 用户在界面修改配置新增股票、调整阈值→触发updateConfig()信号
2\. 业务逻辑层接收信号→QOrderProcessor更新m\_replyCodeConfig
3\. QConfigManager::saveConfig()将新配置写入本地文件config/replyCodeList.csv+system.config
4\. 若新增股票→调用CFTInterface::subscribeStock()订阅该股票数据
5\. 若删除股票→调用CFTInterface::unsubscribeStock()取消订阅→QBigOrderManager::removeBigOrdersByStock()删除该股票历史大单
```
### 5.3 错误处理流程
```
1\. API连接失败→CFTInterface触发apiErrorOccurred()信号→传递错误代码与信息
2\. 业务逻辑层接收信号→QLogManager记录ERROR级别日志
3\. 若启用自动重连→QThreadPoolManager调度重连任务→按配置间隔重试
4\. 重连成功→恢复监控状态→界面提示"连接恢复"
5\. 重连失败超过最大重试次数→触发fatalErrorOccurred()信号→界面显示错误提示→允许用户手动重试
```
### 5.4 数据导出流程
```
1\. 用户点击"导出数据"→选择格式CSV/JSON与保存路径
2\. 界面层触发exportData()信号→传递导出参数
3\. 业务逻辑层接收信号→QBigOrderManager::getBigOrders()获取目标数据(按时间范围筛选)
4\. 调用IDataExporter接口→执行导出操作
5\. 导出成功→界面提示"导出完成"→记录INFO日志
6\. 导出失败→界面提示错误信息→记录ERROR日志包含失败原因
```
## 六、数据存储设计
### 6.1 配置文件设计
#### 6.1.1 股票订阅配置replyCodeList.csv
```
股票代码,检测阈值(K),股票名称,市场类型,是否启用动态阈值,是否监控
00700,50,腾讯控股,HK,1,1
00005,30,汇丰控股,HK,0,1
09988,40,阿里巴巴,HK,1,1
600036,20,招商银行,SH,1,1
```
* 字段说明:
* 股票代码:交易所标准代码(不含市场前缀)
* 检测阈值 (K):基础阈值,单位为千股
* 市场类型SH上交所、SZ深交所、HK港交所
* 是否启用动态阈值1 = 启用0 = 禁用
* 是否监控1 = 启用监控0 = 暂停监控
#### 6.1.2 系统配置文件system.config
```
\[ThreadPool]
Size=8
MaxQueueSize=1000
\[Cache]
MaxSize=200
ExpireTime=30
\[Log]
SavePath=./logs/
RetainDays=30
FileSizeLimit=52428800
LogLevel=1
\[API]
AutoReconnect=1
ReconnectInterval=5
HeartbeatInterval=30
\[UI]
SoundPrompt=1
BreathingLight=1
RefreshInterval=100
\[DataStorage]
HistoryRetainDays=90
AutoBackup=1
BackupTime=02:00
```
* 配置项说明:
* ThreadPool线程池配置大小、最大队列数
* Cache缓存配置最大条目数、过期时间
* Log日志配置路径、保留天数、大小限制、输出级别
* APIAPI 连接配置(自动重连、重连间隔、心跳间隔)
* UI界面配置声音提示、呼吸灯、刷新间隔
* DataStorage数据存储配置历史记录保留天数、自动备份
### 6.2 日志文件设计
* 日志文件命名:`log_YYYYMMDD.log`(按日期拆分)
* 日志内容格式:`[YYYY-MM-DD HH:mm:ss.zzz] [LEVEL] [MODULE] 消息内容`
* 示例:
```
\[2025-11-11 10:00:00.123] \[INFO] \[CFTInterface] API连接成功
\[2025-11-11 10:00:01.456] \[INFO] \[QOrderProcessor] 开始处理股票00700数据
\[2025-11-11 10:00:02.789] \[INFO] \[QBigOrderManager] 检测到买盘大单00700 腾讯控股 50K股 320.5元
\[2025-11-11 10:05:03.321] \[WARNING] \[CFTInterface] API心跳超时尝试重连
\[2025-11-11 10:05:05.654] \[INFO] \[CFTInterface] API重连成功
```
### 6.3 历史数据存储
* 存储路径:`./data/history/`
* 存储格式:按日期分文件夹,每个股票一个 CSV 文件
* 文件名:`股票代码_YYYYMMDD.csv`
* 存储字段:成交时间、价格、数量、金额、大单类型、检测阈值
* 清理策略:超过保留天数(默认 90 天)的历史数据自动删除
## 七、安全设计
### 7.1 数据安全
* API 密钥 / 秘钥:内存中采用 Base64 编码存储,不写入配置文件
* 网络通信:依赖 Futu API 的 HTTPS 加密通道,数据传输过程加密
* 本地数据:配置文件与历史记录均为明文(无敏感信息),无需加密
* 数据访问:历史数据文件仅允许当前用户读写,设置文件权限
### 7.2 程序安全
* 内存安全:使用智能指针与对象池,杜绝野指针与内存泄漏
* 线程安全:所有共享数据均加锁保护,避免数据竞争与脏读
* 异常安全:全局异常捕获机制,防止程序崩溃导致的数据丢失
* 输入校验:用户输入的股票代码、阈值等参数均做合法性校验(如阈值 > 0
### 7.3 访问控制
* 无用户登录功能(单机使用),但配置文件仅允许管理员权限修改
* 避免运行时修改程序文件,检测到文件篡改时提示并退出
* 禁止外部进程注入,启用 Qt 的进程保护机制
## 八、性能设计
### 8.1 性能指标
* **响应时间**
* 数据接收→解析完成≤10ms
* 大单检测→界面展示≤100ms
* 用户操作→系统响应≤200ms
* **并发处理能力**
* 支持同时监控股票数量≥100 只
* 订单处理速率≥1000 条 / 秒
* 大单检测准确率≥99%(基于真实市场数据测试)
* **资源占用**
* 初始内存占用≤50MB
* 运行时内存占用100 只股票≤200MB
* CPU 占用率正常负载≤30%
* 磁盘 IO日志写入速率≤1MB / 分钟
### 8.2 性能优化措施
* 算法优化动态阈值算法减少无效计算LRU 缓存减少重复处理
* 数据结构优化选择高效容器QMap/QVector避免低效查找
* 线程优化:合理划分线程优先级,避免核心任务阻塞
* 内存优化:对象池复用减少内存分配开销,智能指针避免内存泄漏
* IO 优化:异步日志写入,批量数据存储,减少磁盘 IO 次数
### 8.3 性能测试方案
* 单元测试:对核心算法(大单检测、缓存)进行性能基准测试
* 集成测试:模拟 100 只股票同时推送数据,测试并发处理能力
* 压力测试:持续 72 小时高负载运行,监控内存泄漏与性能衰减
* 真实环境测试:接入 Futu API 测试环境,验证实时性与准确性
## 九、扩展性设计
### 9.1 模块扩展
* 数据源扩展:预留多数据源接口,可新增其他券商 API如同花顺、东方财富
* 算法扩展:通过 IBigOrderDetector 接口,支持插件化替换检测算法
* 存储扩展预留数据库接口MySQL/SQLite可替换本地文件存储
* 界面扩展:支持自定义面板添加,通过插件机制扩展界面功能
### 9.2 功能扩展
* 多市场支持:当前支持港股,可扩展至 A 股、美股(适配市场规则)
* 历史数据回放:新增历史数据导入与回放功能,用于算法测试
* 数据分析增强:新增大单趋势分析、板块联动分析等功能
* 多终端同步:预留云同步接口,支持多设备配置与数据同步
### 9.3 扩展实现原则
* 保持核心架构不变,扩展功能通过接口实现,不修改原有代码
* 扩展模块独立编译,支持按需加载(插件化)
* 扩展功能需提供配置开关,不影响核心功能使用
## 十、测试设计
### 10.1 单元测试
* 测试范围:核心类、核心算法、工具函数
* 测试重点:
* QOrderProcessor大单检测算法准确性、异常数据处理
* QBigOrderManager线程安全、去重逻辑、数据一致性
* QCacheManager缓存命中率、过期清理逻辑
* OrderBookParser数据解析正确性、格式兼容性
* 测试工具Qt Test 框架
* 测试覆盖率目标核心代码≥80%
### 10.2 集成测试
* 测试范围:模块间接口、数据流程、异常处理
* 测试重点:
* 数据流程完整性API→解析→检测→展示
* 模块间信号槽通信可靠性
* 多线程协作稳定性
* 异常场景恢复能力(如网络中断、数据异常)
* 测试方法:黑盒测试 + 灰盒测试结合
### 10.3 系统测试
* 测试范围:完整功能、性能、兼容性、易用性
* 测试重点:
* 功能完整性:所有配置项、操作流程是否正常
* 性能指标:响应时间、并发处理能力、资源占用
* 兼容性Windows 10/11 不同版本、不同分辨率
* 易用性:操作路径是否简洁、提示是否明确
* 稳定性72 小时持续运行无故障
* 测试环境:真实 Windows 环境 + Futu API 测试环境
### 10.4 验收测试
* 测试依据:软件需求规格说明书
* 测试人员:产品经理、最终用户代表
* 测试内容:核心功能验证、性能指标验证、兼容性验证
* 验收标准:功能无重大缺陷、性能指标达标、用户操作流畅
## 十一、部署设计
### 11.1 部署环境要求
* **硬件环境**
* 处理器Intel Core i5 及以上(或同等性能 AMD 处理器)
* 内存8GB 及以上(监控 100 只以上股票建议 16GB
* 硬盘500GB 及以上可用空间SSD 优先,提升文件读写速度)
* 网络10Mbps 及以上稳定宽带延迟≤200ms
* **软件环境**
* 操作系统Windows 1064 位)专业版 / 企业版 / 家庭版Windows 1164 位)
* 运行环境:.NET Framework 4.5+Visual C++ 2015-2022 运行库
* 依赖库Qt 5.9.932/64 位对应Futu API v3.0+Protobuf 3.0+
### 11.2 安装部署流程
1. **环境准备**
* 运行环境检测工具CheckEnvironment.exe自动检测缺失的依赖
* 自动下载并安装缺失的.NET Framework、Visual C++ 运行库
1. **程序部署**
* 压缩包版:解压至目标目录(路径不含中文、空格及特殊字符)
* 安装包版:双击 Setup.exe按向导完成安装选择安装路径、创建桌面快捷方式
1. **初始配置**
* 首次启动程序,弹出配置向导
* 输入 Futu API 密钥与秘钥(仅内存存储,不写入文件)
* 导入初始股票订阅列表(支持手动添加或 CSV 导入)
* 配置基础参数(阈值、提示方式等)
1. **启动验证**
* 点击 "开始监控",验证 API 连接状态
* 检查界面是否正常显示股票数据
* 触发测试大单API 测试环境),验证检测与提示功能
### 11.3 部署目录结构
```
QTradeProgram/
├── QTradeProgram.exe # 主程序
├── CheckEnvironment.exe # 环境检测工具
├── Setup.exe # 安装程序(仅安装包版)
├── Qt5Core.dll # Qt核心依赖
├── Qt5Gui.dll # Qt图形依赖
├── Qt5Widgets.dll # Qt界面依赖
├── FutuAPI.dll # Futu API依赖
├── Protobuf.dll # Protobuf依赖
├── zlib.dll # 压缩依赖
├── config/ # 配置文件目录
│ ├── replyCodeList.csv # 股票订阅配置
│ ├── system.config # 系统配置
│ └── theme.config # 界面主题配置
├── logs/ # 日志文件目录
├── data/ # 数据存储目录
│ ├── history/ # 历史数据
│ └── backup/ # 自动备份
├── resources/ # 资源文件目录
│ ├── sounds/ # 提示音
│ └── icons/ # 图标资源
└── docs/ # 文档目录
&#x20; ├── 用户手册.pdf
&#x20; └── 安装指南.pdf
```
## 十二、维护设计
### 12.1 日志系统维护
* 日志分级:支持 DEBUG/INFO/WARNING/ERROR/FATAL 五级日志,便于问题定位
* 自动轮转:单个日志文件达到 50MB 或跨天时自动拆分,避免文件过大
* 过期清理:自动删除超过 30 天的日志文件,节省磁盘空间
* 日志查看:程序内置日志查看器,支持按级别、关键词筛选
### 12.2 错误处理与恢复
* 错误记录:所有错误均记录错误代码、详细描述、发生时间及上下文
* 自动恢复:网络中断时自动重连,配置文件损坏时加载默认配置
* 故障排查:提供日志打包工具,可快速收集日志供技术支持分析
* 版本回退:支持覆盖安装旧版本,保留配置与历史数据
### 12.3 日常维护操作
* 数据备份:每日凌晨 2 点自动备份配置文件与历史数据,支持手动备份
* 数据清理:可手动清理历史数据、日志文件、缓存文件
* 版本更新:支持检查更新功能,下载更新包后覆盖安装(保留数据)
* 配置重置:提供配置重置功能,恢复默认设置(不删除历史数据)
### 12.4 技术支持
* 问题反馈:程序内置反馈入口,可提交 bug 与建议
* 日志收集:一键收集运行日志与系统信息,便于技术支持分析
* 远程协助:支持远程桌面协助,快速排查问题
* 知识库:提供常见问题解决方案、操作指南等文档
***
**设计说明**:本设计说明书基于 QTradeProgram - 大单检测程序 V1.0 版本的实际功能与技术实现,详细描述了软件的架构设计、模块划分、核心算法、数据流程等关键内容,确保文档与实际软件高度一致。文档既满足软件著作权登记的审查要求,也可为后续开发、测试、维护提供明确的技术指导。
> (注:文档部分内容可能由 AI 生成)