基于Qt開發(fā)獲取CTP量化交易接口測試數(shù)據(jù)工具
需求
使用Qt軟件開發(fā)K線股P相關(guān)軟件,先開發(fā)一個(gè)通過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è)計(jì)軟件構(gòu)架、模塊化封裝和多工程測試。
功能描述v1.0.0 注冊(cè)登錄服務(wù)器后臺(tái)開始按鈕注冊(cè)訂閱結(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(); // 注冊(cè)抓取數(shù)據(jù)(注冊(cè)合約ID) void slot_stopGetInfo(); // 注銷注冊(cè)停止獲取 private: static StockSdkManager *_pInstance; static QMutex _mutex; private: bool _running; private: CThostFtdcMdApi* _pMdapi; // 合約api MdSpi *_pMdSpi; // 合約處理(重載類) }; #endif // STOCKSDKMANAGER_H
MdSpi.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),此時(shí)調(diào)用join處阻塞。
處理
管理類子線程調(diào)用join,那么join阻塞該線程,調(diào)用注冊(cè)和注銷在管理類外直接調(diào)用。
以上就是基于Qt開發(fā)獲取CTP量化交易接口測試數(shù)據(jù)工具的詳細(xì)內(nèi)容,更多關(guān)于Qt獲取CTP量化交易數(shù)據(jù)的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
QT使用QML實(shí)現(xiàn)地圖繪制虛線的示例代碼
QML提供了MapPolyline用于在地圖上繪制線段,這篇文章主要為大家詳細(xì)介紹了QT如何使用QML實(shí)現(xiàn)在地圖上繪制虛線,需要的小伙伴可以參考一下2023-07-07c++如何實(shí)現(xiàn)跳表(skiplist)
這篇文章主要介紹了c++如何實(shí)現(xiàn)跳表,幫助大家更好的理解和學(xué)習(xí),感興趣的朋友可以了解下2020-08-08c++11 chrono全面解析(最高可達(dá)納秒級(jí)別的精度)
chrono是c++ 11中的時(shí)間庫,本文就來詳細(xì)的介紹一下chrono庫的具體使用,關(guān)鍵是理解里面時(shí)間段(Durations)、時(shí)間點(diǎn)(Time points)的概念,感興趣的可以了解一下2021-11-11如何判斷一個(gè)整數(shù)的二進(jìn)制中有多少個(gè)1
本篇文章是對(duì)如何判斷一個(gè)整數(shù)的二進(jìn)制中有多少個(gè)1的方法進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下2013-05-05C語言實(shí)現(xiàn)矩陣翻轉(zhuǎn)(上下翻轉(zhuǎn)、左右翻轉(zhuǎn))
這篇文章主要介紹了C語言實(shí)現(xiàn)矩陣翻轉(zhuǎn)(上下翻轉(zhuǎn)、左右翻轉(zhuǎn))的相關(guān)資料,需要的朋友可以參考下2017-05-05