245 lines
7.4 KiB
Markdown
245 lines
7.4 KiB
Markdown
# 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. **扩展性**: 模块化设计便于功能扩展
|
||
|
||
程序架构合理,调用关系清晰,适合作为股票大单监控的基础平台进行进一步开发。
|