行情接口
◇ 1.说明
行情API提供了两个接口,分别为CThostFtdcMdApi和CThostFtdcMdSpi。这两个接口对FTD协议进行了封装,方便客户端应用程序的开发。客户端应用程序可以通过CThostFtdcMdApi发出操作请求,通过继承CThostFtdcMdSpi并重载回调函数来处理后台服务的响应。
特别注意
:CTP系统在早盘系统启动时,会重演夜盘流水,此时有可能重复推送整个夜盘的行情。如果用户此时连入CTP就有可能收到这些重复行情,因此建议用户在处理行情时过滤掉重复行情,以免影响程序逻辑。
◇ 2.代码示例
// mduserhandle.h
#include "ThostFtdcMdApi.h"
#include <stdio.h>
#include <Windows.h>
class CMduserHandler : public CThostFtdcMdSpi
{
private:
CThostFtdcMdApi *m_mdApi;
public:
void connect()
{
//创建并初始化API
m_mdApi = CThostFtdcMdApi::CreateFtdcMdApi("", true, true);
m_mdApi->RegisterSpi(this);
m_mdApi->RegisterFront("tcp://218.28.130.102:41413");
m_mdApi->Init();
}
//登陆
void login()
{
CThostFtdcReqUserLoginField t = {0};
while (m_mdApi->ReqUserLogin(&t, 1)!=0) Sleep(1000);
}
// 订阅行情
void subscribe()
{
char **ppInstrument=new char * [50];
ppInstrument[0] = "IF1809";
while (m_mdApi->SubscribeMarketData(ppInstrument, 1)!=0) Sleep(1000);
}
//接收行情
void OnRtnDepthMarketData(CThostFtdcDepthMarketDataField *pDepthMarketData)
{
printf("OnRtnDepthMarketData\n");
}
};
// main.cpp
#include "mduserhandle.h"
int main(int argc, char* argv[])
{
CMduserHandler *mduser = new CMduserHandler;
mduser->connect();
mduser->login();
mduser->subscribe();
Sleep(INFINITE);
}