CTP C++接口试用

来源:互联网 发布:淘宝店铺简介在哪里看 编辑:程序博客网 时间:2024/06/04 20:13

文件结构

MdSpi.h

#pragma once#include "ThostFtdcMdApi.h"class CMdSpi : public CThostFtdcMdSpi{public:///错误应答virtual void OnRspError(CThostFtdcRspInfoField *pRspInfo,int nRequestID, bool bIsLast);///当客户端与交易后台通信连接断开时,该方法被调用。当发生这个情况后,API会自动重新连接,客户端可不做处理。///@param nReason 错误原因///        0x1001 网络读失败///        0x1002 网络写失败///        0x2001 接收心跳超时///        0x2002 发送心跳失败///        0x2003 收到错误报文virtual void OnFrontDisconnected(int nReason);///心跳超时警告。当长时间未收到报文时,该方法被调用。///@param nTimeLapse 距离上次接收报文的时间virtual void OnHeartBeatWarning(int nTimeLapse);///当客户端与交易后台建立起通信连接时(还未登录前),该方法被调用。virtual void OnFrontConnected();///登录请求响应virtual void OnRspUserLogin(CThostFtdcRspUserLoginField *pRspUserLogin,CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast);///订阅行情应答virtual void OnRspSubMarketData(CThostFtdcSpecificInstrumentField *pSpecificInstrument, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast);///取消订阅行情应答virtual void OnRspUnSubMarketData(CThostFtdcSpecificInstrumentField *pSpecificInstrument, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast);///深度行情通知virtual void OnRtnDepthMarketData(CThostFtdcDepthMarketDataField *pDepthMarketData);///请求查询行情响应virtual void OnRspQryDepthMarketData(CThostFtdcDepthMarketDataField *pDepthMarketData, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast) {};private:void ReqUserLogin();void SubscribeMarketData();// bool IsErrorRspInfo(CThostFtdcRspInfoField *pRspInfo);};

MdSpi.cpp

#include "MdSpi.h"#include <iostream>using namespace std;#pragma warning(disable : 4996)// USER_API参数extern CThostFtdcMdApi* pUserApi;// 配置参数extern char FRONT_ADDR[];extern TThostFtdcBrokerIDTypeBROKER_ID;extern TThostFtdcInvestorIDType INVESTOR_ID;extern TThostFtdcPasswordTypePASSWORD;extern char* ppInstrumentID[];extern int iInstrumentID;// 请求编号extern int iRequestID;void CMdSpi::OnRspError(CThostFtdcRspInfoField *pRspInfo,int nRequestID, bool bIsLast){cerr << "--->>> "<< "OnRspError" << endl;IsErrorRspInfo(pRspInfo);}void CMdSpi::OnFrontDisconnected(int nReason){cerr << "--->>> " << "OnFrontDisconnected" << endl;cerr << "--->>> Reason = " << nReason << endl;}void CMdSpi::OnHeartBeatWarning(int nTimeLapse){cerr << "--->>> " << "OnHeartBeatWarning" << endl;cerr << "--->>> nTimerLapse = " << nTimeLapse << endl;}void CMdSpi::OnFrontConnected(){cerr << "--->>> " << "OnFrontConnected" << endl;///用户登录请求ReqUserLogin();}void CMdSpi::ReqUserLogin(){CThostFtdcReqUserLoginField req;memset(&req, 0, sizeof(req));strcpy(req.BrokerID, BROKER_ID);strcpy(req.UserID, INVESTOR_ID);strcpy(req.Password, PASSWORD);int iResult = pUserApi->ReqUserLogin(&req, ++iRequestID);cerr << "--->>> 发送用户登录请求: " << ((iResult == 0) ? "成功" : "失败") << endl;}void CMdSpi::OnRspUserLogin(CThostFtdcRspUserLoginField *pRspUserLogin,CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast){cerr << "--->>> " << "OnRspUserLogin" << endl;if (bIsLast && !IsErrorRspInfo(pRspInfo)){///获取当前交易日cerr << "--->>> 获取当前交易日 = " << pUserApi->GetTradingDay() << endl;// 请求订阅行情SubscribeMarketData();}}void CMdSpi::SubscribeMarketData(){int iResult = pUserApi->SubscribeMarketData(ppInstrumentID, iInstrumentID);cerr << "--->>> 发送行情订阅请求: " << ((iResult == 0) ? "成功" : "失败") << endl;}void CMdSpi::OnRspSubMarketData(CThostFtdcSpecificInstrumentField *pSpecificInstrument, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast){cerr << "OnRspSubMarketData" << endl;}void CMdSpi::OnRspUnSubMarketData(CThostFtdcSpecificInstrumentField *pSpecificInstrument, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast){cerr << "OnRspUnSubMarketData" << endl;}void CMdSpi::OnRtnDepthMarketData(CThostFtdcDepthMarketDataField *pDepthMarketData){cerr << "OnRtnDepthMarketData" << endl;}void OnRspQryDepthMarketData(CThostFtdcDepthMarketDataField *pDepthMarketData, CThostFtdcRspInfoField *pRspInfo, int nRequestID, bool bIsLast){cerr << "OnRspQryDepthMarketData" << endl;}bool CMdSpi::IsErrorRspInfo(CThostFtdcRspInfoField *pRspInfo){// 如果ErrorID != 0, 说明收到了错误的响应bool bResult = ((pRspInfo) && (pRspInfo->ErrorID != 0));if (bResult)cerr << "--->>> ErrorID=" << pRspInfo->ErrorID << ", ErrorMsg=" << pRspInfo->ErrorMsg << endl;return bResult;}
test.cpp

// testTraderApi.cpp : 定义控制台应用程序的入口点。//#include "ThostFtdcMdApi.h"#include "MdSpi.h"// UserApi对象CThostFtdcMdApi* pUserApi;// 配置参数char FRONT_ADDR[] = "tcp://asp-sim2-md1.financial-trading-platform.com:26213";// 前置地址TThostFtdcBrokerIDTypeBROKER_ID = "***";// 经纪公司代码TThostFtdcInvestorIDType INVESTOR_ID = "0***";// 投资者代码TThostFtdcPasswordType  PASSWORD = "*****";// 用户密码char *ppInstrumentID[] = {"***", "***"};// 行情订阅列表int iInstrumentID = 2;// 行情订阅数量// 请求编号int iRequestID = 0;void main(void){// 初始化UserApipUserApi = CThostFtdcMdApi::CreateFtdcMdApi();// 创建UserApiCThostFtdcMdSpi* pUserSpi = new CMdSpi();pUserApi->RegisterSpi(pUserSpi);// 注册事件类pUserApi->RegisterFront(FRONT_ADDR);// connectpUserApi->Init();pUserApi->Join();//pUserApi->Release();}

3 0
原创粉丝点击