# 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 details; // 订单详情 }; ``` ### OrderBookData (订单簿数据) ```cpp struct OrderBookData { QString name; // 股票名称 QString code; // 股票代码 QString askTime; // 卖盘时间 QString bidTime; // 买盘时间 QVector bids; // 买盘数据 QVector 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 findExtremeOrders(const OrderBookData& data) const; OrderBookEntry findMaxVolumeItemEx(const QVector& items, double volumeRatio) const; QVector findMaxVolumeItem(const OrderBookData& data) const; ``` ## 配置管理 ### 订阅列表管理 - **文件格式**: CSV文件 (config/replyCodeList.csv) - **数据结构**: 股票代码,检测阈值 - **阈值单位**: 千股 (界面显示为K,内部存储为实际数量) ### 阈值设置 - 每个股票可单独设置检测阈值 - 阈值在界面以"K"为单位显示,内部乘以1000处理 - 实时更新到QOrderProcessor进行处理 ## 线程与并发处理 ### 多线程架构 - **QOrderProcessor**: 使用QThreadPool进行订单处理 - **异步信号**: 所有跨组件通信使用QueuedConnection确保线程安全 - **数据保护**: 使用QMutex保护共享数据访问 ### 线程安全措施 ```cpp // 大单管理器使用互斥锁 mutable QMutex m_orderMutex; QList> 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. **扩展性**: 模块化设计便于功能扩展 程序架构合理,调用关系清晰,适合作为股票大单监控的基础平台进行进一步开发。