需求
使用Qt软件开发K线股P相关软件,先开发一个通过CTP量化交易的sdk获取相关推送数据的工具(当前深度行情数据)。
注意
采集数据测试
1.晚上9点以后可以采集到数据
2.工作日 上午9:00 — 10:15,10:30 — 11:30,下午13:30 — 15:00
Demo
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阻塞该线程,调用注册和注销在管理类外直接调用。
以上就是基于Qt开发获取CTP量化交易接口测试数据工具的详细内容,更多关于Qt获取CTP量化交易数据的资料请关注其它相关文章!