基于Qt開發(fā)獲取CTP量化交易接口測試數(shù)據(jù)工具
需求
使用Qt軟件開發(fā)K線股P相關軟件,先開發(fā)一個通過CTP量化交易的sdk獲取相關推送數(shù)據(jù)的工具(當前深度行情數(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進行模塊化的開發(fā),便于設計軟件構架、模塊化封裝和多工程測試。
功能描述v1.0.0 注冊登錄服務器后臺開始按鈕注冊訂閱結束按鈕取消訂閱導出抓取得文本數(shù)據(jù)
模塊化部署
關鍵源碼
TestSdkWidget異步多線程初始化
void TestSdkWidget::initControl() { // 初始化sdk管理類 { // 線程初始化 _pStockSdkManager = StockSdkManager::getInstance(); _pStockSdkManagerThread = new QThread(); _pStockSdkManager->moveToThread(_pStockSdkManagerThread); connect(_pStockSdkManagerThread, SIGNAL(started()), _pStockSdkManager, SLOT(slot_start())); // 關聯(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(); // 線程關閉 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ù)進入庫內(nèi)部線程循環(huán),此時調(diào)用join處阻塞。
處理
管理類子線程調(diào)用join,那么join阻塞該線程,調(diào)用注冊和注銷在管理類外直接調(diào)用。
以上就是基于Qt開發(fā)獲取CTP量化交易接口測試數(shù)據(jù)工具的詳細內(nèi)容,更多關于Qt獲取CTP量化交易數(shù)據(jù)的資料請關注腳本之家其它相關文章!