Files
QTradeProgram/程序分析文档.md

245 lines
7.4 KiB
Markdown
Raw Permalink Normal View History

2026-02-25 23:01:42 +08:00
# QTradeProgram 大单检测程序分析文档
## 项目概述
**项目名称**: QTradeProgram - 大单检测程序
**开发环境**: VS2015 + Qt5.9 + Futu API
**主要功能**: 实时监控股票订单数据,当某个订单中的股票数量超过设定的阈值时,在主界面显示大单信息
## 项目结构分析
### 目录结构
```
QTradeProgram/
├── QMainwindow/ # 主窗口UI和应用程序逻辑
├── Sqbase/ # 核心业务逻辑模块
├── FTAPI/ # Futu API接口封装
├── include/ # 头文件和协议定义
├── config/ # 配置文件目录
└── lib/ # 库文件目录
```
### 核心模块说明
#### 1. 主程序模块 (QMainwindow/)
- **main.cpp**: 程序入口点初始化QApplication和主窗口
- **QMainwindow.h/cpp**: 主窗口类负责UI管理、订阅列表管理、组件连接
- **QDataAcquisition.h/cpp**: 数据采集类封装Futu API接口
- **QBreathingLight.h/cpp**: 呼吸灯控件,用于大单提示
#### 2. 业务逻辑模块 (Sqbase/)
- **qorderprocessor.h/cpp**: 订单处理核心类,负责大单检测算法
- **qbigordermanager.h/cpp**: 大单管理器,单例模式管理所有大单数据
- **qbigorderviewer.h/cpp**: 大单查看器,显示大单信息的表格界面
- **qlogmanager.h/cpp**: 日志管理系统
- **OrderBookParser.h/cpp**: 订单簿数据解析器
#### 3. 数据接口模块 (FTAPI/)
- **FTInterface.h/cpp**: Futu API接口封装
- **FTAPI.h/cpp**: API实现类
- **FTSPI.h**: API回调接口
#### 4. 数据结构定义
- **BZStruct.h**: 定义所有核心数据结构,包括订单簿条目、大单信息等
## 核心数据结构
### OrderBookEntry (订单簿条目)
```cpp
struct OrderBookEntry {
double price; // 价格
double volume; // 成交量
int orderCount; // 订单数量
QString code; // 股票代码
QVector<OrderDetail> details; // 订单详情
};
```
### OrderBookData (订单簿数据)
```cpp
struct OrderBookData {
QString name; // 股票名称
QString code; // 股票代码
QString askTime; // 卖盘时间
QString bidTime; // 买盘时间
QVector<OrderBookEntry> bids; // 买盘数据
QVector<OrderBookEntry> asks; // 卖盘数据
};
```
### BigOrderInfo (大单信息)
```cpp
struct BigOrderInfo {
double price; // 价格
double volume; // 成交量
long long orderId; // 订单ID
int nBigOrderType; // 大单类型 (0:空/1:多)
int level; // 价格挡位
bool isBigOrder; // 是否为大单
QString name; // 股票名称
QString code; // 股票代码
QString svrRecvTime; // 交易所接收时间
};
```
## 调用关系分析
### 程序启动流程
```
main()
→ QApplication::exec()
→ QMainwindow 构造函数
→ QDataAcquisition 初始化
→ QBigOrderViewer 创建
→ 信号槽连接建立
→ 订阅列表加载
```
### 核心调用关系链
#### 1. 数据采集与处理链
```
Futu API 推送订单数据
→ CFTInterface::OnReply()
→ QOrderProcessor::processOrderBook()
→ OrderBookParser 解析数据
→ findExtremeOrders() 检测大单
→ findMaxVolumeItem() 查找最大成交量
→ emit maxOrderReady(BigOrderInfo)
```
#### 2. 大单管理链
```
QOrderProcessor::maxOrderReady 信号
→ QMainwindow 槽函数
→ QBigOrderManager::addBigOrder()
→ 存储大单数据
→ emit bigOrderAdded() 信号
→ QBigOrderViewer::onBigOrderAdded()
→ QBreathingLight::triggerSignal() 视觉提示
```
#### 3. UI交互链
```
用户操作 (添加/删除订阅)
→ QMainwindow 处理函数
→ 更新 m_replyCodes 列表
→ 更新 m_replyCodeQuantity 映射
→ QOrderProcessor::setreplyCodeQuantity() 更新阈值
→ 保存到配置文件
```
### 关键信号槽连接
```cpp
// 大单检测信号
connect(processor, &QOrderProcessor::maxOrderReady,
this, [this](BigOrderInfo bigOrderInfo) {
QBigOrderManager::instance()->addBigOrder(bigOrderInfo);
});
// 大单显示信号
connect(manager, &QBigOrderManager::bigOrderAdded,
viewer, &QBigOrderViewer::onBigOrderAdded);
// 视觉提示信号
connect(manager, &QBigOrderManager::markBigOrderSignal,
m_lightWidget, &QBreathingLight::triggerSignal);
```
## 大单检测算法
### 检测逻辑流程
1. **数据接收**: 通过Futu API实时接收订单簿数据
2. **数据解析**: OrderBookParser解析原始数据为OrderBookData结构
3. **阈值比较**: 对每个订单条目,比较成交量与预设阈值
4. **大单识别**: 使用findMaxVolumeItem()算法识别大单
5. **结果发射**: 通过信号机制传递大单信息
### 核心算法函数
```cpp
// 在QOrderProcessor中
QVector<BigOrderInfo> findExtremeOrders(const OrderBookData& data) const;
OrderBookEntry findMaxVolumeItemEx(const QVector<OrderBookEntry>& items,
double volumeRatio) const;
QVector<BigOrderInfo> findMaxVolumeItem(const OrderBookData& data) const;
```
## 配置管理
### 订阅列表管理
- **文件格式**: CSV文件 (config/replyCodeList.csv)
- **数据结构**: 股票代码,检测阈值
- **阈值单位**: 千股 (界面显示为K内部存储为实际数量)
### 阈值设置
- 每个股票可单独设置检测阈值
- 阈值在界面以"K"为单位显示内部乘以1000处理
- 实时更新到QOrderProcessor进行处理
## 线程与并发处理
### 多线程架构
- **QOrderProcessor**: 使用QThreadPool进行订单处理
- **异步信号**: 所有跨组件通信使用QueuedConnection确保线程安全
- **数据保护**: 使用QMutex保护共享数据访问
### 线程安全措施
```cpp
// 大单管理器使用互斥锁
mutable QMutex m_orderMutex;
QList<QSharedPointer<BigOrderInfo>> m_bigOrders;
// 订单处理器使用线程池
QThreadPool m_threadPool;
mutable QMutex m_dataMutex;
```
## 错误处理与日志
### 日志系统
- 使用QLogManager进行分级日志记录
- 支持INFO、WARNING、ERROR、FATAL等级别
- 日志查看器集成在主界面中
### 错误处理策略
- API连接状态实时监控
- 数据解析异常处理
- 文件操作错误处理
- 内存分配安全检查
## 性能优化特性
### 内存优化
- 数据结构内存对齐 (BZStruct.h)
- 使用QSharedPointer智能指针管理对象生命周期
- 定期清理历史数据
### 处理效率
- 线程池处理订单数据
- 批量数据处理能力
- 高效的信号槽通信机制
## 扩展性与维护性
### 模块化设计
- 各功能模块职责清晰,耦合度低
- 易于扩展新的数据源或检测算法
- 配置驱动,无需代码修改即可调整参数
### 接口设计
- 标准的Qt信号槽机制
- 清晰的数据结构定义
- 完善的错误处理接口
## 总结
该程序是一个典型的事件驱动型金融监控应用,具有以下特点:
1. **实时性**: 基于Futu API的实时数据推送
2. **准确性**: 精确的大单检测算法
3. **易用性**: 直观的Qt图形界面
4. **稳定性**: 完善的错误处理和日志系统
5. **扩展性**: 模块化设计便于功能扩展
程序架构合理,调用关系清晰,适合作为股票大单监控的基础平台进行进一步开发。