您现在的位置是:首页 > 名人名句

项目实战:Qt获取CTP量化交易接口测试数据工具 v1.0.0(获取深度行情数据、订阅取消订阅)

作者:利杜鹃时间:2024-04-24 12:47:32分类:名人名句

简介  文章浏览阅读3.8k次,点赞40次,收藏28次。使用Qt软件开发K线股P相关软件,先开发一个通过CTP量化交易的sdk获取相关推送数据的工具(当前深度行情数据)。

点击全文阅读

若该文为原创文章,转载请注明出处
本文章博客地址:https://hpzwl.blog.csdn.net/article/details/137937666

红胖子(红模仿)的博文大全:开发技术集合(包含Qt实用技术、树莓派、三维、OpenCV、OpenGL、ffmpeg、OSG、单片机、软硬结合等等)持续更新中…(点击传送门)

Qt开发专栏:项目实战(点击传送门)


需求

  使用Qt软件开发K线股P相关软件,先开发一个通过CTP量化交易的sdk获取相关推送数据的工具(当前深度行情数据)。


注意

  采集数据测试

1.晚上9点以后可以采集到数据2.工作日 上午9:00 — 10:15,10:30 — 11:30,下午13:30 — 15:00

Demo

  请添加图片描述
  请添加图片描述

  在这里插入图片描述

  在这里插入图片描述

windows运行包下载地址

 CSDNf粉丝0积分下载:https://download.csdn.net/download/qq21497936/89165596
 QQ群:博客首页扫码进入QQ技术群,点击**“文件”搜索“testCTPSdk”**,群内与博文同步更新)


VS移植过程QtCreator

  将vs的开发demo,调用sdk,迁移至QtCreator的IDE进行模块化的开发,便于设计软件构架、模块化封装和多工程测试。
  在这里插入图片描述
  在这里插入图片描述


功能描述v1.0.0

注册登录服务器后台开始按钮注册订阅结束按钮取消订阅导出抓取得文本数据

模块化部署

  在这里插入图片描述


关键源码

TestSdkWidget异步多线程初始化

void TestSdkWidget::initControl(){    // 初始化sdk管理类    {        // 线程初始化        _pStockSdkManager = StockSdkManager::getInstance();        _pStockSdkManagerThread = new QThread();        _pStockSdkManager->moveToThread(_pStockSdkManagerThread);        connect(_pStockSdkManagerThread, SIGNAL(started()),                _pStockSdkManager, SLOT(slot_start()));        // 关联        connect(_pStockSdkManager, SIGNAL(signal_stateLog(QString)),                this, SLOT(slot_stateLog(QString)));        // 开始        _pStockSdkManagerThread->start();    }    // 按钮使能    ui->pushButton_start->setEnabled(true);    ui->pushButton_stop->setEnabled(false);}

StockSdkManager.h

#ifndef STOCKSDKMANAGER_H#define STOCKSDKMANAGER_H#include <QObject>#include <QMutex>#include "MdSpi.h"class StockSdkManager : public QObject{    Q_OBJECTprivate:    explicit StockSdkManager(QObject *parent = 0);public:    static StockSdkManager * getInstance();         // 单例获取指针signals:    void signal_stateLog(QString logStr);           // 日志抛出public slots:    void slot_start();                              // 线程开启    void slot_stop();                               // 线程关闭public slots:    void slot_startGetInfo();                       // 注册抓取数据(注册合约ID)    void slot_stopGetInfo();                        // 注销注册停止获取private:    static StockSdkManager *_pInstance;    static QMutex _mutex;private:    bool _running;private:    CThostFtdcMdApi* _pMdapi;                       // 合约api    MdSpi *_pMdSpi;                                 // 合约处理(重载类)};#endif // STOCKSDKMANAGER_H

MdSpi.h:合约处理类(重载函数获取处理数据)

#ifndef MDSPI_H#define MDSPI_H#include <QObject>#include "ThostFtdcMdApi.h"#include "ThostFtdcUserApiStruct.h"class MdSpi : public CThostFtdcMdSpi{public:    MdSpi();    ~MdSpi();public:    CThostFtdcMdApi *getMdapi() const;public:    void setMdapi(CThostFtdcMdApi *pMdapi);public:    virtual void OnFrontConnected();    virtual void OnFrontDisconnected(int nReason);    virtual void OnRspUserLogin(CThostFtdcRspUserLoginField* pRspUserLogin, CThostFtdcRspInfoField* pRspInfo, int nRequestID, bool bIsLast);    virtual void OnRtnDepthMarketData(CThostFtdcDepthMarketDataField* pDepthMarketData);private:    CThostFtdcMdApi* _pMdapi;private:    CThostFtdcDepthMarketDataField _preTick;};#endif // MDSPI_H

工程模板v1.0.0

  在这里插入图片描述


入坑

入坑一:无法停止获取

问题

  点击停止获取

原因

  调用sdk的join函数进入库内部线程循环,此时调用join处阻塞。

处理

  管理类子线程调用join,那么join阻塞该线程,调用注册和注销在管理类外直接调用。
  在这里插入图片描述

  在这里插入图片描述


若该文为原创文章,转载请注明出处
本文章博客地址:https://hpzwl.blog.csdn.net/article/details/137937666

点击全文阅读

郑重声明:

本站所有活动均为互联网所得,如有侵权请联系本站删除处理

我来说两句