Files
QTradeProgram/软著申请材料/软件设计说明书.md

687 lines
30 KiB
Markdown
Raw Permalink Normal View History

2026-02-25 23:01:42 +08:00
# 大单检测软件系统 软件设计说明书
## 一、软件概述
### 1.1 软件名称
**大单检测软件系统**
### 1.2 软件版本
**V1.0**(初始正式版本,包含全部核心功能模块)
### 1.3 开发目的
本软件旨在为金融投资领域提供专业、高效的股票大单实时监控解决方案,通过精准识别市场大额交易行为,帮助投资者捕捉主力资金动向,为投资决策提供客观数据参考,填补中小投资者缺乏专业监控工具的空白。
### 1.4 适用范围
- 个人股票投资者(专注于短线交易、主力资金跟踪场景)
- 小型金融机构(需快速获取市场异动信号)
- 量化交易团队(作为策略输入数据源)
- 金融数据分析师(用于市场资金流向研究)
### 1.5 运行环境概述
- **运行平台**: Windows桌面端64位
- **核心依赖**: Futu API数据服务、Qt图形界面框架
- **网络要求**: 10Mbps及以上稳定宽带延迟≤200ms
- **数据源**: 沪深A股市场实时订单数据
## 二、系统架构设计
### 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. 大单识别:
a. 遍历买盘BID订单列表对比每笔订单成交量与实际检测阈值
b. 成交量≥实际检测阈值时,标记为买盘大单,记录核心信息(价格、数量、时间)
c. 遍历卖盘ASK订单列表重复步骤4a-4b标记卖盘大单
5. 去重处理同一订单IDorderId在30秒内不重复记录
6. 结果排序按订单接收时间降序排列返回前100条有效大单避免数据过载
```
**算法特点**: 结合固定阈值与历史成交量动态调整,降低单一股票不同时段的误报率
#### 3.1.2 缓存优化算法
```
算法名称: LRU最近最少使用缓存优化算法
输入: cacheKey (股票代码+时间片), processResult (处理后的数据)
输出: QVector<BigOrderInfo> (缓存数据/新处理数据)
算法步骤:
1. 缓存键生成:按"股票代码_时间片每1分钟为一个时间片"生成唯一缓存键
2. 缓存查询:在缓存字典中查找对应缓存键
3. 缓存命中:
a. 若找到且缓存未过期默认有效期30秒返回缓存数据
b. 更新该缓存键的访问时间维持LRU排序
4. 缓存未命中:
a. 执行大单检测算法获取新数据
b. 将新数据存入缓存,关联缓存键与过期时间
5. 缓存清理:
a. 当缓存数量达到上限默认200条移除最久未访问的缓存项
b. 每次新增缓存时,顺带清理已过期的缓存项
```
**算法价值**: 减少重复数据处理次数,提升高并发场景下的响应速度
### 3.2 数据结构设计
#### 3.2.1 核心业务数据结构
```cpp
// 订单簿条目(标准化后)
struct OrderBookEntry {
double price; // 订单价格(单位:元)
double volume; // 成交量(单位:股)
int orderCount; // 该价位订单笔数
QString code; // 股票代码如00700
QString marketType; // 市场类型SH/A股HK/港股)
QDateTime orderTime; // 订单生成时间(精确到毫秒)
QVector<OrderDetail> details; // 订单详情(仅包含公开字段)
};
// 订单详情
struct OrderDetail {
long long orderId; // 订单唯一标识
int orderType; // 订单类型0/限价单1/市价单)
double tradeAmount; // 成交额(单位:元)
};
// 大单信息(检测结果)
struct BigOrderInfo {
double price; // 成交价格(单位:元)
double volume; // 成交数量(单位:股)
double amount; // 成交金额(单位:元)
long long orderId; // 订单ID
int bigOrderType; // 大单类型0:卖盘1:买盘)
QString stockCode; // 股票代码
QString stockName; // 股票名称
QDateTime receiveTime; // 系统接收时间
QDateTime tradeTime; // 实际成交时间
double threshold; // 检测时使用的阈值(单位:股)
bool isDynamicThreshold;// 是否使用动态阈值
};
```
#### 3.2.2 配置与系统数据结构
```cpp
// 股票订阅配置项
struct ReplyCodeItem {
QString stockCode; // 股票代码(唯一标识)
float threshold; // 基础检测阈值单位K股
QString stockName; // 股票名称
bool isDynamic; // 是否启用动态阈值
QString marketType; // 市场类型SH/SZ/HK
bool isMonitored; // 是否启用监控true/启用false/暂停)
};
// 系统配置
struct SystemConfig {
int threadPoolSize; // 线程池最大线程数默认8
int cacheMaxSize; // 缓存最大条目数默认200
int cacheExpireTime; // 缓存过期时间单位默认30
QString logSavePath; // 日志保存路径(默认./logs/
int logRetainDays; // 日志保留天数默认30
bool isSoundPrompt; // 是否启用声音提示默认true
bool isAutoReconnect; // 是否启用自动重连默认true
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 模块间接口(信号槽)
```cpp
// 数据访问层→业务逻辑层(数据接收)
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 外部接口(扩展预留)
```cpp
// 数据导出接口(供外部系统调用)
class IDataExporter {
public:
virtual bool exportToCsv(const QString& filePath, const QVector<QSharedPointer<BigOrderInfo>>& data) = 0;
virtual bool exportToJson(const QString& filePath, const QVector<QSharedPointer<BigOrderInfo>>& data) = 0;
};
// 检测算法扩展接口(支持插件化替换)
class IBigOrderDetector {
public:
virtual QVector<QSharedPointer<BigOrderInfo>> detect(const OrderBookData& data, const ReplyCodeItem& config) = 0;
virtual QString detectorName() const = 0;
virtual QWidget* configWidget() = 0;
};
```
## 四、技术实现
### 4.1 多线程处理
#### 4.1.1 线程池设计
- 采用Qt线程池+自定义任务调度策略线程数默认8可通过配置文件调整
- 任务优先级划分:
- 高优先级:数据接收与解析任务
- 中优先级:大单检测与统计任务
- 低优先级:日志写入、缓存清理任务
- 任务队列管理:使用无锁队列存储任务,避免线程阻塞
#### 4.1.2 线程安全机制
- 共享数据如大单列表、配置信息采用互斥锁QMutex保护
- 使用QMutexLocker自动管理锁的获取与释放避免死锁
- 跨线程数据传输采用QSharedPointer智能指针确保内存安全释放
- 禁止在非UI线程直接操作界面组件通过信号槽异步通知UI更新
```cpp
// 线程安全访问示例
QSharedPointer<BigOrderInfo> getLatestBigOrder() {
QMutexLocker locker(&m_orderMutex); // 自动加锁
if (m_bigOrders.isEmpty()) {
return nullptr;
}
return m_bigOrders.first(); // 自动解锁QMutexLocker析构
}
```
### 4.2 内存管理
#### 4.2.1 智能指针应用
- 所有动态创建的业务对象BigOrderInfo、OrderBookData等均使用QSharedPointer管理
- 容器存储采用QVector<QSharedPointer>,避免浅拷贝与内存泄漏
- 跨线程传递对象时,通过智能指针自动维护引用计数,确保对象生命周期
#### 4.2.2 对象池设计
- 针对高频创建/销毁的对象如OrderBookEntry、OrderDetail实现对象池复用
- 对象池核心参数:
- 初始容量50个
- 最大容量200个
- 空闲时间超过30秒未使用的对象自动销毁
- 减少内存分配与释放开销,提升高并发场景下的性能
```cpp
// 对象池使用示例
QSharedPointer<OrderBookEntry> getOrderBookEntry() {
return m_objectPool.acquire(); // 从对象池获取对象
}
void releaseOrderBookEntry(QSharedPointer<OrderBookEntry> entry) {
entry->reset(); // 重置对象状态
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 验收测试
- 测试依据:软件需求规格说明书
- 测试人员:产品经理、最终用户代表
- 测试内容:核心功能验证、性能指标验证、兼容性验证
- 验收标准:功能无重大缺陷、性能指标达标、用户操作流畅
---
**设计说明**: 本设计说明书基于QTradeProgram-大单检测程序V1.0版本的实际功能与技术实现,详细描述了软件的架构设计、模块划分、核心算法、数据流程等关键内容,确保文档与实际软件高度一致。文档既满足软件著作权登记的审查要求,也可为后续开发、测试、维护提供明确的技术指导。
**最后更新**: 2025年11月12日
**软件版本**: V1.0