客户管理行情客户端系统.docx

上传人:b****4 文档编号:6314010 上传时间:2023-05-09 格式:DOCX 页数:21 大小:22.03KB
下载 相关 举报
客户管理行情客户端系统.docx_第1页
第1页 / 共21页
客户管理行情客户端系统.docx_第2页
第2页 / 共21页
客户管理行情客户端系统.docx_第3页
第3页 / 共21页
客户管理行情客户端系统.docx_第4页
第4页 / 共21页
客户管理行情客户端系统.docx_第5页
第5页 / 共21页
客户管理行情客户端系统.docx_第6页
第6页 / 共21页
客户管理行情客户端系统.docx_第7页
第7页 / 共21页
客户管理行情客户端系统.docx_第8页
第8页 / 共21页
客户管理行情客户端系统.docx_第9页
第9页 / 共21页
客户管理行情客户端系统.docx_第10页
第10页 / 共21页
客户管理行情客户端系统.docx_第11页
第11页 / 共21页
客户管理行情客户端系统.docx_第12页
第12页 / 共21页
客户管理行情客户端系统.docx_第13页
第13页 / 共21页
客户管理行情客户端系统.docx_第14页
第14页 / 共21页
客户管理行情客户端系统.docx_第15页
第15页 / 共21页
客户管理行情客户端系统.docx_第16页
第16页 / 共21页
客户管理行情客户端系统.docx_第17页
第17页 / 共21页
客户管理行情客户端系统.docx_第18页
第18页 / 共21页
客户管理行情客户端系统.docx_第19页
第19页 / 共21页
客户管理行情客户端系统.docx_第20页
第20页 / 共21页
亲,该文档总共21页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

客户管理行情客户端系统.docx

《客户管理行情客户端系统.docx》由会员分享,可在线阅读,更多相关《客户管理行情客户端系统.docx(21页珍藏版)》请在冰点文库上搜索。

客户管理行情客户端系统.docx

客户管理行情客户端系统

(客户管理)行情客户端系统

行情客户端应用程序接口

2006年10月19日

文件版本号

修正日期

备注

V1.01

2007-03-28

首次发布

V1.02

2009-08-07

修改示例程序,添加Join等待

第1章介绍1

第2章体系结构1

2.1通讯模式1

2.2数据流2

第3章运行模式1

3.1工作线程1

3.2本地文件1

第4章开发接口1

4.1CFfexFtdcMduserSpi接口1

4.1.1OnFrontConnected方法1

4.1.2OnFrontDisconnected方法1

4.1.3OnHeartBeatWarning方法2

4.1.4OnRspUserLogin方法2

4.1.5OnRspUserLogout方法3

4.1.6OnRtnDepthMarketData方法4

4.1.7OnRspError方法6

4.2CFfexFtdcMduserApi接口7

4.2.1CreateFtdcMduserApi方法7

4.2.2Release方法7

4.2.3Init方法8

4.2.4Join方法8

4.2.5GetTradingDay方法8

4.2.6RegisterSpi方法8

4.2.7RegisterFront方法9

4.2.8SubscribeMarketDataTopic方法9

4.2.9ReqUserLogin方法9

4.2.10ReqUserLogout方法10

第5章开发示例12

第1章介绍

行情客户端系统API是壹个基于C++的类库,通过使用和扩展类库提供的接口来实现行情数据的接收。

该类库包含以下5个文件:

文件名

版本

文件大小

文件描述

CFfexFtdcMduserApi.h

V1.02

11,441字节

行情接口头文件

CFfexFtdcUserApiStruct.h

V1.02

40,238字节

定义了UserAPI所需的壹系列数据类型的头文件

CffexFtdcUserApiDataType.h

V1.02

142,601字节

定义了壹系列业务关联的数据结构的头文件

CFfexmduserapi.dll

V1.02

983,121字节

动态链接库二进制文件

Cffexmduserapi.lib

V1.02

3,530字节

导入库文件

支持MSVC6.0,MSVC.NET2003编译器。

需要打开多线程编译选项/MT。

第2章体系结构

行情API使用建立于TCP协议之上FTD协议和交易所的行情发布服务器进行通讯。

行情发布服务器负责行情信息的产生和发布,但不参和交易过程。

参和交易需要使用另外的“交易员API”。

2.1通讯模式

FTD协议中的所有通讯均基于某个通讯模式。

通讯模式实际上就是通讯双方协同工作的方式。

行情发布涉及的通讯模式共有二种:

●对话通讯模式

●广播通讯模式

对话通讯模式是指由会员端主动发起的通讯请求。

该请求被交易所端接收和处理,且给予响应。

例如登入和登出。

这种通讯模式和普通的客户/服务器模式相同。

广播通讯模式是指交易所端主动,向市场中的关联会员发出相同的信息。

例如行情等。

通讯模式和网络的连接不壹定存于简单的壹对壹的关系。

也就是说,壹个网络连接中可能传送多种不同通讯模式的报文,壹种通讯模式的报文也能够于多个不同的连接中传送。

无论哪种通讯模式,其通讯过程均如图1所示:

图1)各通讯模式的工作过程

2.2数据流

行情发布支持对话通讯模式、广播通讯模式:

对话通讯模式下支持对话数据流:

对话数据流是壹个双向数据流,会员系统发送请求,行情发布系统反馈应答。

交易系统不维护对话流的状态。

系统故障时,对话数据流会重置,通讯途中的数据可能会丢失。

广播通讯模式下支持行情数据流:

行情数据流是壹个单向数据流,由行情发布系统发向会员系统,用于发送行情信息;行情流是壹个可靠的数据流,行情系统维护整个系统的行情流,于壹个交易日内,会员系统断线恢复连接时,能够请求行情系统发送指定序号之后的行情流数据。

行情服务所提供的行情内容是按照主题组织的。

每个主题包括壹组合约的行情,仍包括了行情发布内容和发布方式,包括行情深度、采样频率、延迟时间等。

交易所会公布各行情主题的具体内容,且设定每个行情用户所能订阅的行情主题。

每个行情主题对应着壹个行情流。

要获得行情通知,客户端必需于连接行情服务器时,订阅壹个或多个行情发布主题。

第3章运行模式

3.1工作线程

交易员客户端应用程序至少由俩个线程组成,壹个是应用程序主线程,壹个是交易员API工作线程。

应用程序和交易系统的通讯是由API工作线程驱动的。

CFfexFtdcMduserApi提供的接口是线程安全的,能够有多个应用程序线程同时发出请求。

CFfexFtdcMduserSpi提供的接口回调是由API工作线程驱动,如果重载的某个回调函数阻塞,则等于阻塞了API工作线程,API和交易系统的通讯会停止。

因此,于CFfexFtdcTraderSpi派生类的回调函数中,通常应迅速返回,能够利用将数据放入缓冲区或通过Windows的消息机制来实现。

3.2本地文件

交易员API于运行过程中,会将壹些数据写入本地文件中。

调用CreateFtdcMduserApi函数,能够传递壹个参数,指明存贮本地文件的路径。

该路径必须于运行前已创建好。

本地文件的扩展名均是”.con”。

第4章开发接口

行情客户端系统API提供了二个接口,分别为CFfexFtdcMduserApi和CFfexFtdcMduserSpi。

4.1CFfexFtdcMduserSpi接口

CFfexFtdcMduserSpi实现了事件通知接口。

用户必需派生CFfexFtdcMduserSpi接口,编写事件处理方法来处理感兴趣的事件。

4.1.1OnFrontConnected方法

当客户端和行情发布服务器建立起通信连接时(仍未登录前),该方法被调用。

函数原型:

voidOnFrontConnected();

本方法于完成初始化后调用,能够于其中完成用户登录任务。

4.1.2OnFrontDisconnected方法

当客户端和交易后台通信连接断开时,该方法被调用。

当发生这个情况后,API会自动重新连接,客户端可不做处理。

函数原型:

voidOnFrontDisconnected(intnReason);

参数:

nReason:

连接断开原因

0x1001网络读失败

0x1002网络写失败

0x2001接收心跳超时

0x2002发送心跳失败

0x2003收到错误报文

4.1.3OnHeartBeatWarning方法

心跳超时警告。

当长时间未收到报文时,该方法被调用。

函数原型:

voidOnHeartBeatWarning(intnTimeLapse);

参数:

nTimeLapse:

距离上次接收报文的时间

4.1.4OnRspUserLogin方法

当客户端发出登录请求之后,该方法会被调用,通知客户端登录是否成功。

函数原型:

voidOnRspUserLogin(

CFfexFtdcRspUserLoginField*pRspUserLogin,

CFfexFtdcRspInfoField*pRspInfo,

intnRequestID,

boolbIsLast);

参数:

pRspUserLogin:

返回用户登录信息的地址。

用户登录信息结构:

structCFfexFtdcRspUserLoginField

{

///交易日

TFfexFtdcDateTypeTradingDay;

///登录成功时间

TFfexFtdcTimeTypeLoginTime;

///最大本地报单号

TFfexFtdcOrderLocalIDTypeMaxOrderLocalID;

///交易用户代码

TFfexFtdcUserIDTypeUserID;

///会员代码

TFfexFtdcParticipantIDTypeParticipantID;

};

pRspInfo:

返回用户响应信息的地址。

特别注意于有连续的成功的响应数据时,中间有可能返回NULL,但第壹次不会,以下同。

错误代码为0时,表示操作成功,以下同。

响应信息结构:

structCFfexFtdcRspInfoField

{

///错误代码

TFfexFtdcErrorIDTypeErrorID;

///错误信息

TFfexFtdcErrorMsgTypeErrorMsg;

};

nRequestID:

返回用户登录请求的ID,该ID由用户于登录时指定。

bIsLast:

指示该次返回是否为针对nRequestID的最后壹次返回。

4.1.5OnRspUserLogout方法

当客户端发出登出请求之后,该方法会被调用,通知客户端登出是否成功。

函数原型:

voidOnRspUserLogout(

CFfexFtdcRspUserLogoutField*pRspUserLogout,

CFfexFtdcRspInfoField*pRspInfo,

intnRequestID,

boolbIsLast);

参数:

pRspUserLogout:

返回用户登出信息的地址。

用户登出信息结构:

structCFfexFtdcRspUserLogoutField

{

///交易用户代码

TFfexFtdcUserIDTypeUserID;

///会员代码

TFfexFtdcParticipantIDTypeParticipantID;

};

pRspInfo:

返回用户响应信息的地址。

响应信息结构:

structCFfexFtdcRspInfoField

{

///错误代码

TFfexFtdcErrorIDTypeErrorID;

///错误信息

TFfexFtdcErrorMsgTypeErrorMsg;

};

nRequestID:

返回用户登出请求的ID,该ID由用户于登出时指定。

bIsLast:

指示该次返回是否为针对nRequestID的最后壹次返回。

4.1.6OnRtnDepthMarketData方法

行情通知,行情服务器会主动通知客户端。

函数原型:

voidOnRtnDepthMarketData(CFfexFtdcDepthMarketDataField*pDepthMarketData);

参数:

pDepthMarketData:

返回市场行情信息的地址。

深度市场行情信息结构:

structCFfexFtdcDepthMarketDataField

{

///交易日

TFfexFtdcDateTypeTradingDay;

///结算组代码

TFfexFtdcSettlementGroupIDTypeSettlementGroupID;

///结算编号

TFfexFtdcSettlementIDTypeSettlementID;

///最新价

TFfexFtdcPriceTypeLastPrice;

///昨结算

TFfexFtdcPriceTypePreSettlementPrice;

///昨收盘

TFfexFtdcPriceTypePreClosePrice;

///昨持仓量

TFfexFtdcLargeVolumeTypePreOpenInterest;

///今开盘

TFfexFtdcPriceTypeOpenPrice;

///最高价

TFfexFtdcPriceTypeHighestPrice;

///最低价

TFfexFtdcPriceTypeLowestPrice;

///数量

TFfexFtdcVolumeTypeVolume;

///成交金额

TFfexFtdcMoneyTypeTurnover;

///持仓量

TFfexFtdcLargeVolumeTypeOpenInterest;

///今收盘

TFfexFtdcPriceTypeClosePrice;

///今结算

TFfexFtdcPriceTypeSettlementPrice;

///涨停板价

TFfexFtdcPriceTypeUpperLimitPrice;

///跌停板价

TFfexFtdcPriceTypeLowerLimitPrice;

///昨虚实度

TFfexFtdcRatioTypePreDelta;

///今虚实度

TFfexFtdcRatioTypeCurrDelta;

///最后修改时间

TFfexFtdcTimeTypeUpdateTime;

///最后修改毫秒

TFfexFtdcMillisecTypeUpdateMillisec;

///合约代码

TFfexFtdcInstrumentIDTypeInstrumentID;

///申买价壹

TFfexFtdcPriceTypeBidPrice1;

///申买量壹

TFfexFtdcVolumeTypeBidVolume1;

///申卖价壹

TFfexFtdcPriceTypeAskPrice1;

///申卖量壹

TFfexFtdcVolumeTypeAskVolume1;

///申买价二

TFfexFtdcPriceTypeBidPrice2;

///申买量二

TFfexFtdcVolumeTypeBidVolume2;

///申卖价二

TFfexFtdcPriceTypeAskPrice2;

///申卖量二

TFfexFtdcVolumeTypeAskVolume2;

///申买价三

TFfexFtdcPriceTypeBidPrice3;

///申买量三

TFfexFtdcVolumeTypeBidVolume3;

///申卖价三

TFfexFtdcPriceTypeAskPrice3;

///申卖量三

TFfexFtdcVolumeTypeAskVolume3;

///申买价四

TFfexFtdcPriceTypeBidPrice4;

///申买量四

TFfexFtdcVolumeTypeBidVolume4;

///申卖价四

TFfexFtdcPriceTypeAskPrice4;

///申卖量四

TFfexFtdcVolumeTypeAskVolume4;

///申买价五

TFfexFtdcPriceTypeBidPrice5;

///申买量五

TFfexFtdcVolumeTypeBidVolume5;

///申卖价五

TFfexFtdcPriceTypeAskPrice5;

///申卖量五

TFfexFtdcVolumeTypeAskVolume5;

};

4.1.7OnRspError方法

针对用户请求的出错通知。

函数原型:

voidOnRspError(

CFfexFtdcRspInfoField*pRspInfo,

intnRequestID,

boolbIsLast)

参数:

pRspInfo:

返回用户响应信息的地址。

响应信息结构:

structCFfexFtdcRspInfoField

{

///错误代码

TFfexFtdcErrorIDTypeErrorID;

///错误信息

TFfexFtdcErrorMsgTypeErrorMsg;

};

nRequestID:

返回用户登出请求的ID,该ID由用户于登出时指定。

bIsLast:

指示该次返回是否为针对nRequestID的最后壹次返回。

4.2CFfexFtdcMduserApi接口

CFfexFtdcMduserApi接口提供给客户登陆、登出行情查询服务器,进行行情查询等功能。

4.2.1CreateFtdcMduserApi方法

产生壹个CFfexFtdcMduserApi的壹个实例,不能通过new来产生。

函数原型:

staticCFfexFtdcMduserApi*CreateFtdcMduserApi(constchar*pszFlowPath="");

参数:

pszFlowPath:

常量字符指针,用于指定壹个文件目录来存贮行情服务发布消息的状态。

默认值代表当前目录。

返回值:

返回壹个指向CFfexFtdcMduserApi实例的指针。

4.2.2Release方法

释放壹个CFfexFtdcMduserApi实例。

函数原型:

voidRelease();

4.2.3Init方法

使客户端开始和行情发布服务器建立连接,连接成功后能够进行登陆。

函数原型:

voidInit();

4.2.4Join方法

客户端等待壹个接口实例线程的结束。

函数原型:

voidJoin();

4.2.5GetTradingDay方法

获得当前交易日。

只有当和服务器连接建立后才会取到正确的值。

函数原型:

constchar*GetTradingDay();

返回值:

返回壹个指向日期信息字符串的常量指针。

4.2.6RegisterSpi方法

注册壹个派生自CFfexFtdcMduserSpi接口类的实例,该实例将完成事件处理。

函数原型:

voidRegisterSpi(CFfexFtdcMduserSpi*pSpi);

参数:

pSpi:

实现了CFfexFtdcMduserSpi接口的实例指针。

4.2.7RegisterFront方法

设置行情发布服务器的地址。

函数原型:

voidRegisterFront(char*pszFrontAddress);

参数:

pszFrontAddress:

指向后台服务器地址的指针。

服务器地址的格式为:

“protocol:

//ipaddress:

port”,如:

”tcp:

//127.0.0.1:

17001”。

“tcp”代表传输协议,“127.0.0.1”代表服务器地址。

”17001”代表服务器端口号。

4.2.8SubscribeMarketDataTopic方法

客户端订阅自己需要的行情。

订阅后行情服务器会自动发出行情通知给客户端。

函数原型:

voidSubscribeMarketDataTopic(intnTopicID,TE_RESUME_TYPEnResumeType);

参数:

nTopicID:

代表深度行情的主题,由交易所公布。

nResumeType:

市场行情重传方式

TERT_RESTART:

从本交易日开始重传

TERT_RESUME:

从上次收到的续传

TERT_QUICK:

先传送当前行情快照,再传送登录后市场行情的内容

4.2.9ReqUserLogin方法

用户发出登陆请求。

函数原型:

intReqUserLogin(

CFfexFtdcReqUserLoginField*pReqUserLoginField,

intnRequestID);

参数:

pReqUserLoginField:

指向用户登录请求结构的地址。

用户登录请求结构:

structCFfexFtdcReqUserLoginField

{

///交易日

TFfexFtdcDateTypeTradingDay;

///交易用户代码

TFfexFtdcUserIDTypeUserID;

///会员代码

TFfexFtdcParticipantIDTypeParticipantID;

///密码

TFfexFtdcPasswordTypePassword;

};

nRequestID:

用户登录请求的ID,该ID由用户指定,管理。

返回值:

0,代表成功。

其它值代表失败。

4.2.10ReqUserLogout方法

用户发出登出请求。

函数原型:

intReqUserLogout(

CFfexFtdcReqUserLogoutField*pReqUserLogout,

intnRequestID);

参数:

pReqUserLogout:

指向用户登出请求结构的地址。

用户登出请求结构:

structCFfexFtdcReqUserLogoutField

{

///交易用户代码

TFfexFtdcUserIDTypeUserID;

///会员代码

TFfexFtdcParticipantIDTypeParticipantID;

};

nRequestID:

用户登出请求的ID,该ID由用户指定,管理。

返回值:

0,代表成功。

其它值代表失败。

第5章开发示例

//mdusertest.cpp:

//壹个简单的例子,介绍CFfexFtdcMduserApi和CFfexFtdcMduserSpi接口的使用。

#include"stdio.h"

#include"FtdcMduserApi.h"

classCSimpleHandler:

publicCFfexFtdcMduserSpi

{

public:

//构造函数,需要壹个有效的指向CFfexFtdcMduserApi实例的指针

CSimpleHandler(CFfexFtdcMduserApi*pUserApi):

m_pUserApi(pUserApi){}

~CSimpleHandler(){}

//当客户端和行情发布服务器建立起通信连接,客户端需要进行登录

voidOnFrontConnected(){

CFfexFtdcReqUserLoginFieldreqUserLogin;

strcpy(reqUserLogin.TradingDay,m_pUserApi->GetTradingDay());

strcpy(reqUserLogin.ParticipantID,"P001");

strcpy(reqUserLogin.UserID,"U001");

strcpy(reqUserLogin.Password,"P001");

m_pUserApi->ReqUserLogin(&reqUserLogin,0);

}

//当客户端和行情发布服务器通信连接断开时,该方法被调用

voidOnFrontDisconnected(){

//当发生这个情况后,API会自动重新连接,客户端可不做处理

printf("OnFrontDisconnected.\n");

}

//当客户端发出登录请求之后,该方法会被调用,通知客户端登录是否成功

voidOnRspUserLogin(CFfexFtdcRspUserLoginField*pRspUserLogin,CFfexFtdcRspInfoField*pRspInfo,intnRequestID,boolbIsLast){

printf("OnRspUserLogin:

\n");

printf("ErrorCode=[%d],ErrorMsg=[%s]\n",pRspInfo->ErrorID,pRspInfo->ErrorMsg);

printf("RequestID=[%d],Chain=[%d]\n",nRequestID,bIsLast);

if(pRspInfo->ErrorID!

=0){

//端登失败,客户端需进行错误处理

prin

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 自然科学 > 物理

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2