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
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

主窗体需要实现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;
};

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74

在目录下面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);
}

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21

运行界面如图:
简单的实现了几个接口,如果需要可以自己去实现。

在这里插入图片描述

  • 3
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值