ctp开发手册文档格式.docx

上传人:b****5 文档编号:15686708 上传时间:2022-11-15 格式:DOCX 页数:91 大小:762.33KB
下载 相关 举报
ctp开发手册文档格式.docx_第1页
第1页 / 共91页
ctp开发手册文档格式.docx_第2页
第2页 / 共91页
ctp开发手册文档格式.docx_第3页
第3页 / 共91页
ctp开发手册文档格式.docx_第4页
第4页 / 共91页
ctp开发手册文档格式.docx_第5页
第5页 / 共91页
点击查看更多>>
下载资源
资源描述

ctp开发手册文档格式.docx

《ctp开发手册文档格式.docx》由会员分享,可在线阅读,更多相关《ctp开发手册文档格式.docx(91页珍藏版)》请在冰豆网上搜索。

ctp开发手册文档格式.docx

2.1通讯模式

2.2数据流

第三章编程接口类型

3.1对话模式的编程接口

3.2私有模式的编程接口

3.3广播模式的编程接口

 

第一章介绍

综合交易平台(ComprehensiveTransactionPlatform),是专门为期货公司开发的一套期货经纪业务管理系统,由交易、风险控制和结算三大系统组成。

API,实现了客户端和综合交易平台之间的通讯。

通过API,投资者可以接收来自上交所,大商所和郑商所的行情数据,发送交易指令,接收相应的反馈和交易状态等信息。

2006年,上海金融期货交易所完成了新一代交易系统的开发,我们借助其成功经验,开发了CTP。

2007年4月,我们获得了来自中国期货公司交易的第一笔订单。

通过近三年的不懈努力,使用CTP的投资者遍布全球,国内使用CTP的期货公司已到达30家。

1.2API文件

CTP上使用的API是基于C++程序库,来实现客户端和CTP服务器之间的数据传输。

客户端包括,所有投资者都可以使用的CTP标准客户端(比如,Q7,popo,weisoft等第三方开发的客户端),以及个性化交易工具(由投资者个人或其合作者开发)。

通过API,客户端可以发出或撤销普通单、条件单、查询委托或交易状态、查询账户实时信息和交易头寸。

API程序库包括:

注:

使用MSVC6.0,MSVC.NET2003等编程工具的,需要在编程设置中打开“multi-thread”选项。

CTP的API和CTP服务器之间使用的通讯协议是期货交易数据协议(futuresTradingDataExchangeprotocol,FTD),它基于TCP协议。

2.1通讯模式

在FTD协议中,通讯模式包括以下三种模式:

●对话模式,客户端给CTP发送请求,CTP将会相应返回结果。

●私有模式,CTP把特定的私人信息发送给对应的客户端,包括持仓信息、交易确认信息等。

●广播模式,CTP将把公告等信息发送给所有的注册用户。

每种模式并不限于一种连接状态。

也就是说,建立一种连接之后,客户端可以同时使用三种通讯模式,或者建立集中不同的连接之后,客户端也可以使用同样的通讯模式。

比如,客户可以使用广播模式来接收合约状态的变动信息,同时也可接收私人信息(如下单确认等)。

下图描绘了三种通讯模式的工作流程:

2.2数据流

CTP提供了对话、私有、广播等三种通讯模式。

在对话模式中,传输的是对话数据流和查询数据流。

对话和查询数据流是双向数据流,客户端发出请求,CTP服务器返回结果。

CTP服务器并不保存对话和查询数据流。

当故障发生时,比如连接中断后又重新连接,对话和查询数据流将回复原值,之间传输的数据将丢失。

在私人通讯模式中,传输的是私人数据流。

私人数据流是单向数据流,CTP服务器就是利用它来把相应的私人信息发给提出申请的客户端。

私人信息包括,风险提示、指令状态、指令确认、交易确认等。

私人数据流是可靠的。

当客户端和CTP服务器失去连接后,在同一交易日的任何时间,客户端都可重新连上CTP服务器,获取一系列指定的私人信息而不用担心这些数据会丢失。

在广播通讯模式中,传输的是公共数据流。

和私人数据流一样,它是单向数据流,而且可靠。

区别在于,广播通讯数据会发送到所有连接的客户端上。

它的主要用途就是发布公共合约的状态信息或重要的公共信息。

CTP的交易API提供了两种编程接口:

CThostFtdcTraderApi与CThostFtdcTraderSpi。

行情API提供的是CThostFtdcMdApi与CThostFtdcMdSpi等两种编程接口。

这四种接口遵循FTD协议。

客户端可使用CThostFtdcXXXApi来发送请求,并通过CThostFtdcXXXSpi来接收CTP返回的数据。

3.1对话模式的编程接口

对话模式的通讯函数常常这样定义:

Request函数的第一个参数是请求的内容,不能为空。

第二个参数是请求的ID,由clienttradeapplication保管,并且最好独一无二,这样,当客户端从CTP服务器接收到数据时,客户端可以用同一个ID重新建立请求并获得反馈。

当客户端收到CTP服务器发出的反馈时,callback函数CThostFtdcXXXSpi被激活。

如果反馈多于一条,callback函数CThostFtdcXXXSpi会反复被激活,直到数据全部接收完毕。

Response函数的第一个参数是反馈的数据,它一般包括最初的请求数据。

如果故障发生或CTP不能找到请求的记录,那么这个参数就是空值。

第二个参数是CTP用来判断反馈是否成功的一个标识。

当callback函数被激活的次数超过一次,除第一次被激活外,其他callback过程发生时第二个参数的值均为空。

第三个参数是反馈的ID,作用和Request函数中的一样。

最后一个参数是结束标识,其值为“true”时表示进行的是该请求的最后一个反馈。

3.2私有模式的编程接口

下面的例子为私有模式的常用接口:

在私有模式里并没有连接API与CTP服务器的行情函数。

当CTP服务器发出私有数据流时,CThostFtdcTradeSpi的callback函数将被激活。

所有callback函数的第一个参数都是CTP服务器返回的内容。

OnErrRtnCThostFtdcTradeSpi函数的第二个参数是报错时详细的错误信息。

3.3广播模式的编程接口

使用广播模式时,客户端可以用以下两种方式与CTP服务器进行通讯:

callback函数OnRtnInstrumentStatus用于通知客户端合约状态的变化。

callback函数OnRtnDepthMarketData用于公布最新的交易所行情数据。

第四章运作模式

4.1工作线程

CTP客户端进程需要两种线程,一是应用程序线程,另一种是交易API工作线程。

如果客户端想要接收行情数据,那么也需要行情API工作线程。

API工作线程连接了客户端和CTP服务器。

交易API和行情API是安全线程,客户端的应用程序可以同时使用两种或多种的工作线程,而无须担心线程冲突。

客户单的应用程序要能尽快的处理callback信息,这样才能避免未处理的callback信息堵塞工作线程。

要避免通讯堵塞,客户端的应用程序需要使用缓冲层来储存从CTP接收的数据,当然缓冲层也可以用来保护客户端自有数据,以便使之与CTPAPI的数据区分开。

4.2文件

CTPAPI的动态链接数据库会产生一些文件来储存运行过程中的数据,这些文件的后缀名为“.con”。

交易客户端的应用程序通过CreateFtdcTraderApi()或CreateFtdcMdApi()函数的第一个参数来判断这些文件的本地路径。

4.3商业术语与接口函数对比

第五章CTPAPI特别说明

5.1一般规则

客户端应用程序需要经过两步才能连接到CTP服务器:

初始化与功能启用。

使用交易API,客户端交易应用程序需要编写:

(1)创建一个“CThostFtdcTraderApi”实例。

(2)创建一个处理来自“CThostFtdcTraderSpi”接口的事件处理器,然后使用“CThostFtdcTraderApi”的“RegisterSpi”函数记录下这些事件。

(3)使用“CThostFtdcTraderApi”的“SubscribePrivateTopic”函数处理私有数据流。

(4)使用“CThostFtdcTraderApi”的“SubscribePublicTopic”函数处理公共数据流。

(5)使用“CThostFtdcTraderApi”的“RegisterFront”函数记录CTP服务器的前端地址。

客户端多运行几次这种函数,以便与服务器建立更可靠的联系。

强烈建议。

(6)使用“CThostFtdcTraderApi”的“Init“函数来连接CTP服务器。

(7)服务器连上之后,“CThostFtdcTraderSpi”接口的callback函数“OnFrontConnected”将被激活。

函数运行过程中,客户端的应用程序需要使用“CThostFtdcTraderApi”的“ReqUserLogin”函数来提交“login”请求。

(8)当CTP服务器确认登陆成功后,“CThostFtdcTraderSpi”接口的callback函数“OnRspUserLogin”将被激活。

(9)这样,客户端与CTP服务器的通讯就建立起来了。

客户端交易应用程序可以使用其他CTPAPI来与CTP服务器进行通讯。

如果客户端应用程序需要使用行情API,客户端需要采取以下步骤来描述先前的数据流,不包括私有数据流和公共信息流。

具体如下:

(1)所有request函数的参数都不能为空值;

(2)如果函数返回的数值为“int”,数值0意味着函数运行良好,其他数值则表示返回错误,具体的错误信息在“error.xml”文件里面。

5.2CThostFtdcTraderSpi

CTP用CThostFtdcTraderSpi表示事件接口。

客户端应用程序可以通过CThostFtdcTraderSpi函数获得CTP服务器发出的通知。

5.2.1OnFrontConnected

当客户端与CTP服务器连接上后,此函数被激活,进而,客户端可以使用“ReqUserLogin”来发送登陆请求。

定义:

voidOnFrontConnected();

5.2.2OnFrontDisconnected

当连接终止或中断时,此函数被激活。

如果该信息没有被处理,那么API会使用登陆地址列表上的一个前端地址,自动重新连接CTP服务器。

voidOnFrontDisconnected(intnReason);

参数:

nReason:

thereasonofdisconnecion

0x1001networkreadingfailed

0x1002networkwritingfailed

0x2001heartbeatreceivingtimeout

0x2002heartbeatsendingtimeout

0x2003receivedanerrormessage

5.2.3OnHeartBeatWarning

此函数用来表示与服务器长时间连接的接口是否可用。

voidOnHeartBeatWarning(intnTimeLapse);

参数:

nTimeLapse:

Lengthoftimeelapsedsincethelastreceivedmessage

5.2.4OnRspUserLogin

CTP服务器使用次callback函数OnRspUserLogin来通知客户端登陆函数OnRspUserLogin是否被服务器接受。

voidOnRspUserLogin(

CThostFtdcRspUserLoginField*pRspUserLogin,

CThostFtdcRspInfoField*pRspInfo,

intnRequestID,

boolbIsLast);

pRspUserLogin:

Thepointerofthestructureforuser’sloginresponse.The

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

当前位置:首页 > 高等教育 > 管理学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1