Files
QTradeProgram/程序分析文档.md
2026-02-25 23:01:42 +08:00

7.4 KiB
Raw Permalink Blame History

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);

大单检测算法

检测逻辑流程

  1. 数据接收: 通过Futu API实时接收订单簿数据
  2. 数据解析: OrderBookParser解析原始数据为OrderBookData结构
  3. 阈值比较: 对每个订单条目,比较成交量与预设阈值
  4. 大单识别: 使用findMaxVolumeItem()算法识别大单
  5. 结果发射: 通过信号机制传递大单信息

核心算法函数

// 在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信号槽机制
  • 清晰的数据结构定义
  • 完善的错误处理接口

总结

该程序是一个典型的事件驱动型金融监控应用,具有以下特点:

  1. 实时性: 基于Futu API的实时数据推送
  2. 准确性: 精确的大单检测算法
  3. 易用性: 直观的Qt图形界面
  4. 稳定性: 完善的错误处理和日志系统
  5. 扩展性: 模块化设计便于功能扩展

程序架构合理,调用关系清晰,适合作为股票大单监控的基础平台进行进一步开发。