CTP接口開發 QT(C++)界面開發

CTP下載地址:http://www.sfit.com.cn/5_1_DocumentDown.htm
源碼下載:https://github.com/wuhaizhi/CTPProject
測試賬號註冊地址http://www.simnow.com.cn/

Windwos環境下用QT開發 CTP下單軟件

新建工程

在這裏插入圖片描述

選擇編譯方式,windwos下要選用MSVC的編輯方式

在這裏插入圖片描述

添加接口的庫文件

在這裏插入圖片描述

在這裏插入圖片描述

我的庫文件放在了根目錄下面的 TradeApi\win32下面

在這裏插入圖片描述

添中庫文件完成後 .pro 中會自動生成如下代碼

win32:CONFIG(release, debug|release): LIBS += -L$$PWD/TradeApi/win32/ -lthostmduserapi_se
else:win32:CONFIG(debug, debug|release): LIBS += -L$$PWD/TradeApi/win32/ -lthostmduserapi_sed
else:unix: LIBS += -L$$PWD/TradeApi/win32/ -lthostmduserapi_se

INCLUDEPATH += $$PWD/TradeApi/win32
DEPENDPATH += $$PWD/TradeApi/win32

win32:CONFIG(release, debug|release): LIBS += -L$$PWD/TradeApi/win32/ -lthosttraderapi_se
else:win32:CONFIG(debug, debug|release): LIBS += -L$$PWD/TradeApi/win32/ -lthosttraderapi_sed
else:unix: LIBS += -L$$PWD/TradeApi/win32/ -lthosttraderapi_se

INCLUDEPATH += $$PWD/TradeApi/win32
DEPENDPATH += $$PWD/TradeApi/win32

主窗體需要實現CTP的API接口類

class MainWindow : public QMainWindow, public CThostFtdcTraderSpi, public CThostFtdcMdSpi
{
    Q_OBJECT

private:
    CThostFtdcTraderApi* m_ptraderapi;
    TThostFtdcBrokerIDType	m_BrokerID;
    TThostFtdcUserIDType	m_UserID;
    TThostFtdcInvestorIDType m_InvestorID;
    TThostFtdcPasswordType	m_Password;
    TThostFtdcAuthCodeType	m_AuthCode;
    TThostFtdcAppIDType	m_AppID;

    void InitCTP();

    int UserLogin();
    int Authenticate();


    // 重寫CThostFtdcTraderSpi方法
    void OnFrontConnected();
    void OnFrontDisconnected(int nReason);
    void OnRspAuthenticate(CThostFtdcRspAuthenticateField *pRspAuthenticateField, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast);
    void OnRspUserLogin(CThostFtdcRspUserLoginField * pRspUserLogin, CThostFtdcRspInfoField * pRspInfo, int nRequestID, bool bIsLast);
    void OnRspSettlementInfoConfirm(CThostFtdcSettlementInfoConfirmField * pSettlementInfoConfirm, CThostFtdcRspInfoField * pRspInfo, int nRequestID, bool bIsLast);
    void OnRspQryInstrument(CThostFtdcInstrumentField * pInstrument, CThostFtdcRspInfoField * pRspInfo, int nRequestID, bool bIsLast);
    void OnRspOrderInsert(CThostFtdcInputOrderField * pInputOrder, CThostFtdcRspInfoField * pRspInfo, int nRequestID, bool bIsLast);
    void OnRtnOrder(CThostFtdcOrderField * pOrder);
    void OnRtnTrade(CThostFtdcTradeField * pTrade);
    void OnRspError(CThostFtdcRspInfoField * pRspInfo, int nRequestID, bool bIsLast);
    void OnRspQrySettlementInfo(CThostFtdcSettlementInfoField* pSettlementInfo, CThostFtdcRspInfoField* pRspInfo, int nRequestID, bool bIsLast);
    void OnRspQryInvestorPosition(CThostFtdcInvestorPositionField *pInvestorPosition, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast);
    void OnErrRtnOrderAction(CThostFtdcOrderActionField *pOrderAction, CThostFtdcRspInfoField *pRspInfo);
    void OnRspOrderAction(CThostFtdcInputOrderActionField *pInputOrderAction, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast);
    void OnErrRtnOrderInsert(CThostFtdcInputOrderField *pInputOrder, CThostFtdcRspInfoField *pRspInfo);
    void OnRspQryOrder(CThostFtdcOrderField *pOrder, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast);
    void OnRspQryTradingAccount(CThostFtdcTradingAccountField *pTradingAccount, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast);



    int ReqQryTradingAccount();
    int qryInstrument(QString sInstrumentID);
    int qryInvestorPositon();
    int QryOrder();
    int CancelOrder(CThostFtdcOrderField AOrder);
    void ReqSettlementInfoConfirm();


    void AppendLog(QString msg);

public:
    explicit MainWindow(QWidget *parent = nullptr);
    ~MainWindow();

private slots:
    void on_btn_login_clicked();

    void on_btn_qry_Order_clicked();

    void on_pushButton_clicked();

    void on_pushButton_2_clicked();

    void on_pushButton_3_clicked();

    void on_AppendMsg(QString msg);

signals:
    void send_AppendMsg(QString msg);

private:
    Ui::MainWindow *ui;
};

在目錄下面flow文件夾一定要有。
在這裏插入圖片描述

開發中中遇到的問題:
1、CTP回調函數中直接操作UI控件會出現錯誤或控件刷新不及時如下圖。

可以通過信號與槽的方式處理(請看代碼中的實現)

在這裏插入圖片描述

例如:向textedit中添加,日誌信息

private slots:
  void on_AppendMsg(QString msg);

signals:
    void send_AppendMsg(QString msg);

connect(this, SIGNAL(send_AppendMsg(QString)), this, SLOT(on_AppendMsg(QString)));



void MainWindow::OnFrontConnected(){
    qDebug("OnFrontConnected");
    emit send_AppendMsg("OnFrontConnected");
}

void MainWindow::on_AppendMsg(QString msg){
QDateTime current_date_time = QDateTime::currentDateTime();
QString current_date = current_date_time.toString("yyyy.MM.dd hh:mm:ss.zzz");
ui->edt_log->append(current_date + "-> " + msg);
}

運行界面如圖:
簡單的實現了幾個接口,如果需要可以自己去實現。

在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章