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

news2024/11/26 2:50:24

若该文为原创文章,转载请注明出处
本文章博客地址: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_OBJECT
private:
    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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1607025.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Python教学入门:函数

在 Python 中&#xff0c;def 关键字用于定义函数。函数是一段可重用的代码块&#xff0c;用于执行特定的任务或操作。通过定义函数&#xff0c;可以将一段代码封装起来&#xff0c;使其可以在程序中被多次调用&#xff0c;提高代码的复用性和可维护性。 下面是 def 函数定义的…

安装docker的PHP环境NLMP环境在国产deepin操作系统上

1: 先安装docker 安装完后执行,权限设置 sudo usermod -aG docker $USER或者sudo usermod -aG docker kentrl#添加当前用户到Docker用户组中 sudo newgrp docker#更新用户组数据,必须执行否则无效 sudo systemctl restart docker 先看目录结构: 2:按照目录结构挂载磁盘,…

MLP/CNN/RNN/Transformer主流深度学习模型的区别

1. 多层感知机(MLP) 核心特征: 结构:MLP 是一种基本的前馈神经网络,包含一个输入层、一个或多个隐藏层以及一个输出层。每层由全连接的神经元组成。用途:适用于简单的分类和回归任务。限制:不适用于处理序列数据或图像数据,因为它不具备处理输入之间时间或空间关系的能…

IDEA @Autowired不显示红线

IDEA 中&#xff0c;Autowired 显示红线一般情况是注入 Mapper 或者 Dao 时出现的&#xff0c;如下图&#xff1a; 这个报错是因为 Mapper 或者 Dao 上没有加 Repository 或者 Mapper&#xff0c;Autowired 注入时就判断为这不是一个 Bean。 不建议通过加上面两个注解的方式解…

python自动化之网易自动点歌

这个代码是是使用的pyautogui库和pyperclip库完成的&#xff0c;这个库是开源的地址如下&#xff1a;https://github.com/asweigart/pyautogui这里详细的用法想学习的可以到这看看 下面是代码&#xff1a; import pyautogui import subprocess import pyperclip import time i…

ubuntu设置扩充swap交换空间

Swap是指Linux系统中的交换分区,类似于Windows的虚拟内存,当内存不足的时候,把一部分硬盘空间虚拟成内存来使用,从而解决内存不足的问题。交换分区,它的功能就是在内存不够的情况下,操作系统先把内存中暂时不用的数据,存到硬盘的交换空间,腾出内存来让别的程序运行! …

【uniapp】微信小程序2024手机号快速验证及无感登录教程(内附代码)

组件&#xff1a;手机号快速验证组件 适用对象&#xff1a;企业/个体 费用&#xff1a;0.03元/次 目录 前言思路前端后端代码无感登录onload事件无感登录方法登录判断后端mini_login2 最后 前言 最近注册了公司&#xff0c;可以注册具有支付能力的小程序了&#xff0c;各种材料…

用了 18 个月时间,做 AI 应用从 0 到 200 万用户,从亏损到盈利(4000 字全面复盘)

前言 距离上次《离职一年&#xff0c;收入10倍增长》总结到现在已经过去了 22 个月。在这段时间里我经历了从高峰跌到谷底又慢慢回弹。组建团队后经历了 10 个月的连续亏损&#xff0c;目前已经连续 12 个月盈利&#xff0c;专注于 AI 应用小程序方向&#xff0c;已累计 200 多…

Hadoop大数据处理技术-Linux相关命令

​7.Linux常用命令 1&#xff09;Windows中的dir&#xff1a;列出当前目录下所有的文件和目录 2&#xff09;cd&#xff1a;改变当前目录 cd命令并不能直接实现这种跳跃转换目录的功能 它只能让你在当前目录和其子目录之间来回切换 就像在一张平面地图上移动一样 如果想跨目录…

【Excel】使用VBA宏简单自定义Excel软件界面

改行做经济师学习Excel&#xff0c;偶有心得&#xff0c;摘录于此&#xff0c;备忘。 言简意赅&#xff0c;仅供自用。 1 实现效果 在Excel的左上角可添加按钮&#xff0c;该按钮的功能可由我们自己通过编写代码定义&#xff0c;能实现特定功能&#xff0c;并且在所有打开的…

Web端Webrtc,SIP,RTSP/RTMP,硬件端,MCU/SFU融合视频会议系统方案分析

Web端视频融合&#xff0c;会议互通已经是视频会议应用的大趋势&#xff0c;一是目前企业有大量的老视频会议硬件设&#xff0c;二新业务又需要Web端支持视频会议监控直播需求&#xff0c;迫切需要一个融合对接的方案&#xff0c;即能把老的设备用起来&#xff0c;又能对接新的…

界面组件Telerik UI for WPF 2024 Q1新版亮点 - 全新DateRangePicker组件

Telerik UI for WPF拥有超过100个控件来创建美观、高性能的桌面应用程序&#xff0c;同时还能快速构建企业级办公WPF应用程序。UI for WPF支持MVVM、触摸等&#xff0c;创建的应用程序可靠且结构良好&#xff0c;非常容易维护&#xff0c;其直观的API将无缝地集成Visual Studio…

通过ABAP 程序自动创建ADSO模型-第一弹

学习新东西从来都是一件快乐的事情&#xff01;&#xff01; 前言 今天我讲一个很好玩的东西&#xff0c;那就是通过ABAP程序去自动生成BW的ADSO模型。我相信做过BW建模的小伙伴们都知道&#xff0c;BW模型建模是最基础且核心的部分&#xff0c;一旦设计出错&#xff0c;将会影…

电脑上删除的文件怎么恢复?这三个策略能帮到你!

“我很好奇&#xff0c;如果我在电脑上删除了一个比较重要的文件&#xff0c;还有机会恢复它吗&#xff1f;应该怎么做才能恢复这个文件呢&#xff1f;” 在使用电脑时&#xff0c;我们会将很多重要的数据或文件都保存在电脑上。如果电脑文件删除后我们才意识到文件是误删了&am…

面试官最怕你懂的Kafka面试题,一招致胜!

&#x1f469;&#x1f3fd;‍&#x1f4bb;个人主页&#xff1a;阿木木AEcru &#x1f525; 系列专栏&#xff1a;《Docker容器化部署系列》 《Java每日面筋》 &#x1f4b9;每一次技术突破&#xff0c;都是对自我能力的挑战和超越。 目录 一、前言Kafka的优点Kafka的使用场景…

赞:java使用easy-excel导入模板下载提供用户进行导入

就是我们在点击导入的时候&#xff0c;一般都是有一个模板的&#xff0c;我们需要下载这个模板&#xff0c;然后再按照这个excel模板填充数据之后&#xff0c;再导入。 那么导出模板下载&#xff0c;说白了和前面一篇 赞&#xff1a;java使用easy-excel导出数据的通用模板思路…

Linux——日志的编写与线程池

目录 前言 一、日志的编写 二、线程池 1.线程池基本原理 2.线程池作用 3.线程池的实现 前言 学了很多线程相关的知识点&#xff0c;线程控制、线程互斥、线程同步&#xff0c;今天我们将他们做一个总结&#xff0c;运用所学知识写一个较为完整的线程池&#xff0c;同时…

算法打卡day38

今日任务&#xff1a; 1&#xff09;完全背包理论基础(卡码网52. 携带研究材料) 2&#xff09;518.零钱兑换II 3&#xff09;377. 组合总和 Ⅳ 4&#xff09;复习day13 完全背包理论基础(卡码网52. 携带研究材料) 题目链接&#xff1a;52. 携带研究材料&#xff08;第七期模拟…

go语言是如何实现协程的

写在文章开头 go语言的精华就在于协程的设计&#xff0c;只有理解协程的设计思想和工作机制&#xff0c;才能确保我们能够完全的利用协程编写强大的并发程序。 Hi&#xff0c;我是 sharkChili &#xff0c;是个不断在硬核技术上作死的 java coder &#xff0c;是 CSDN的博客专…

51-M.2 B Key-5G模块 (U)SIM卡电路设计

视频链接 M.2 B Key-5G模块 &&#xff08;U&#xff09;SIM卡电路设计01_哔哩哔哩_bilibili M.2 B Key-5G模块 &&#xff08;U&#xff09;SIM卡电路设计 1、5G模块 &&#xff08;U&#xff09;SIM卡相关概念 1.1、5G模块&#xff08;RM500Q-GL&#xff09; R…