基于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點以后可以采集到數(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_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à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++11 chrono全面解析(最高可達(dá)納秒級別的精度)
chrono是c++ 11中的時間庫,本文就來詳細(xì)的介紹一下chrono庫的具體使用,關(guān)鍵是理解里面時間段(Durations)、時間點(Time points)的概念,感興趣的可以了解一下2021-11-11C語言實現(xiàn)矩陣翻轉(zhuǎn)(上下翻轉(zhuǎn)、左右翻轉(zhuǎn))
這篇文章主要介紹了C語言實現(xiàn)矩陣翻轉(zhuǎn)(上下翻轉(zhuǎn)、左右翻轉(zhuǎn))的相關(guān)資料,需要的朋友可以參考下2017-05-05