7.4 KiB
7.4 KiB
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 (订单簿条目)
struct OrderBookEntry {
double price; // 价格
double volume; // 成交量
int orderCount; // 订单数量
QString code; // 股票代码
QVector<OrderDetail> details; // 订单详情
};
OrderBookData (订单簿数据)
struct OrderBookData {
QString name; // 股票名称
QString code; // 股票代码
QString askTime; // 卖盘时间
QString bidTime; // 买盘时间
QVector<OrderBookEntry> bids; // 买盘数据
QVector<OrderBookEntry> asks; // 卖盘数据
};
BigOrderInfo (大单信息)
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() 更新阈值
→ 保存到配置文件
关键信号槽连接
// 大单检测信号
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);
大单检测算法
检测逻辑流程
- 数据接收: 通过Futu API实时接收订单簿数据
- 数据解析: OrderBookParser解析原始数据为OrderBookData结构
- 阈值比较: 对每个订单条目,比较成交量与预设阈值
- 大单识别: 使用findMaxVolumeItem()算法识别大单
- 结果发射: 通过信号机制传递大单信息
核心算法函数
// 在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保护共享数据访问
线程安全措施
// 大单管理器使用互斥锁
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信号槽机制
- 清晰的数据结构定义
- 完善的错误处理接口
总结
该程序是一个典型的事件驱动型金融监控应用,具有以下特点:
- 实时性: 基于Futu API的实时数据推送
- 准确性: 精确的大单检测算法
- 易用性: 直观的Qt图形界面
- 稳定性: 完善的错误处理和日志系统
- 扩展性: 模块化设计便于功能扩展
程序架构合理,调用关系清晰,适合作为股票大单监控的基础平台进行进一步开发。