基于Qt開發(fā)獲取CTP量化交易接口測試數(shù)據(jù)工具
需求
使用Qt軟件開發(fā)K線股P相關(guān)軟件,先開發(fā)一個通過CTP量化交易的sdk獲取相關(guān)推送數(shù)據(jù)的工具(當(dāng)前深度行情數(shù)據(jù))。
注意
采集數(shù)據(jù)測試
1.晚上9點(diǎn)以后可以采集到數(shù)據(jù)
2.工作日 上午9:00 — 10:15,10:30 — 11:30,下午13:30 — 15:00
Demo




VS移植過程QtCreator
將vs的開發(fā)demo,調(diào)用sdk,遷移至QtCreator的IDE進(jìn)行模塊化的開發(fā),便于設(shè)計軟件構(gòu)架、模塊化封裝和多工程測試。


功能描述v1.0.0 注冊登錄服務(wù)器后臺開始按鈕注冊訂閱結(jié)束按鈕取消訂閱導(dǎo)出抓取得文本數(shù)據(jù)
模塊化部署

關(guān)鍵源碼
TestSdkWidget異步多線程初始化
void TestSdkWidget::initControl()
{
// 初始化sdk管理類
{
// 線程初始化
_pStockSdkManager = StockSdkManager::getInstance();
_pStockSdkManagerThread = new QThread();
_pStockSdkManager->moveToThread(_pStockSdkManagerThread);
connect(_pStockSdkManagerThread, SIGNAL(started()),
_pStockSdkManager, SLOT(slot_start()));
// 關(guān)聯(lián)
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(); // 線程關(guān)閉
public slots:
void slot_startGetInfo(); // 注冊抓取數(shù)據(jù)(注冊合約ID)
void slot_stopGetInfo(); // 注銷注冊停止獲取
private:
static StockSdkManager *_pInstance;
static QMutex _mutex;
private:
bool _running;
private:
CThostFtdcMdApi* _pMdapi; // 合約api
MdSpi *_pMdSpi; // 合約處理(重載類)
};
#endif // STOCKSDKMANAGER_HMdSpi.h:合約處理類(重載函數(shù)獲取處理數(shù)據(jù))
#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

入坑
入坑一:無法停止獲取 問題
點(diǎn)擊停止獲取
原因
調(diào)用sdk的join函數(shù)進(jìn)入庫內(nèi)部線程循環(huán),此時調(diào)用join處阻塞。
處理
管理類子線程調(diào)用join,那么join阻塞該線程,調(diào)用注冊和注銷在管理類外直接調(diào)用。


以上就是基于Qt開發(fā)獲取CTP量化交易接口測試數(shù)據(jù)工具的詳細(xì)內(nèi)容,更多關(guān)于Qt獲取CTP量化交易數(shù)據(jù)的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
C++筆記-設(shè)置cout輸出數(shù)據(jù)的寬度和填充方式
這篇文章主要介紹了C++筆記-設(shè)置cout輸出數(shù)據(jù)的寬度和填充方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-11-11
C++?Qt開發(fā)之關(guān)聯(lián)容器類使用方法詳解
當(dāng)我們談?wù)摼幊讨械臄?shù)據(jù)結(jié)構(gòu)時,順序容器是不可忽視的一個重要概念,Qt?中提供了豐富的容器類,用于方便地管理和操作數(shù)據(jù),本章我們將主要學(xué)習(xí)關(guān)聯(lián)容器,主要包括?QMap?,QSet和?QHash,感興趣的朋友跟著小編一起來學(xué)習(xí)吧2023-12-12
利用Matlab實(shí)現(xiàn)圖像亮度分布統(tǒng)計圖
這篇文章主要介紹了如何利用Matlab實(shí)現(xiàn)圖像亮度分布統(tǒng)計圖的繪制,文中的示例代碼講解詳細(xì),對我們學(xué)習(xí)Matlab有一定的幫助,感興趣的可以了解一下2022-05-05

