CTP综合交易平台教程 基本介绍
一、系统简介
交易托管系统 API 是一个基于 C++的类库, 通过使用和扩展类库提供的接口来实现相关交易功能,包括报单与报价的录入、报单与报价的撤销、报单与报价的挂起、报单与报价的激活、报单与报价的修改、报单与报价的查询、成交单查询、投资者查询、投资者持仓查询、合约查询、交易日获取等。
支持 MS VC 6.0,MS VC.NET 2003 编译器。需要打开多线程编译选项/MT。 二、体系结构
交易员 API 使用建立在 TCP 协议之上 FTD 协议与交易托管系统进行通讯,交易托管系统负责投资者的交易业务处理。
2.1. 通讯模式
FTD 协议中的所有通讯都基于某个通讯模式。通讯模式实际上就是通讯双方协同工作的方式。FTD 涉及的通讯模式共有三种:l 对话通讯模式l 私有通讯模式l 广播通讯模式对话通讯模式是指由会员端主动发起的通讯请求。该请求被交易所端接收和处理,并给予响应。例如报单、查询等。这种通讯模式与普通的客户/服务器模式相同。私有通讯模式是指交易所端主动,向某个特定的会员发出的信息。例如成交回报等。广播通讯模式是指交易所端主动,向市场中的所有会员都发出相同的信息。例如公告、市场公共信息等。通讯模式和网络的连接不一定存在简单的一对一的关系。也就是说,一个网络连接中可能传送多种不同通讯模式的报文,一种通讯模式的报文也可以在多个不同的连接中传送。无论哪种通讯模式,其通讯过程都如图 1 所示
1
本接口暂时没有使用广播通信方式。
2.2. 数据流
交易托管系统支持对话通讯模式、私有通讯模式、广播通讯模式:对话通讯模式下支持对话数据流和查询数据流:对话数据流是一个双向数据流,交易托管系统发送交易请求,交易系统反馈应答。交易系统不维护对话流的状态。系统故障时,对话数据流会重置,通讯途中的数据可能会丢失。
查询数据流是一个双向数据流,交易托管系统发送查询请求,交易系统反馈应答。交易系统不维护查询流的状态。系统故障时,查询数据流会重置,通讯途中的数据可能会丢失。私有通讯
2
模式下支持私有数据流:私有流是一个单向数据流,由交易系统发向交易托管系统,用于传送交易员私有的通知和回报信息。
私有流是一个可靠的数据流,交易系统维护每个交易托管系统的私有流,在一个交易日内,交易托管系统断线后恢复连接时,可以请求交易系统发送指定序号之后的私有流数据。私有数据流向交易托管系统提供报单状态报告、成交回报更等信息。广播通讯模式下支持公共数据流:公共数据流是一个单向数据流,由交易系统发向交易托管系统,用于发送市场公共信息;公共数据流也是一个可靠的数据流,交易系统维护整个系统的公共数据流,在一个交易日内,交易托管系统断线恢复连接时,可以请求交易系统发送指定序号之后的公共数据流数据。
接口模式
交易 员 API 提供 了二 个接口, 分别为 CThostFtdcTraderApi 和CThostFtdcTraderSpi。这两个接口对 FTD 协议进行了封装,方便客户端应用程序的开发。客户端应用程 序可以通过 CThostFtdcTraderApi 发出操作请求,通继承CThostFtdcTraderSpi 并重载回调函数来处理后台服务的响应。
1. 对话流和查询流编程接口通过对话流进行通讯的编程接口通常如下:
请求:int CThostFtdcTraderApi::ReqXXX(CThostFtdcXXXField *pReqXXX,int nRequestID) 响应:void CThostFtdcTraderSpi::OnRspXXX(CThostFtdcXXXField
*pRspXXX,CThostFtdcRspInfoField *pRspInfo,int nRequestID,bool bIsLast)
其中请求接口第一个参数为请求的内容,不能为空。第二个参数为请求号。请求号由客户端应用程序负责维护,正常情况下每个请求的请求号不要重复。在接收交易托管系统的响应时,可以得到当时发出请求时填写的请求号,从而可以将响应与请求对应起来。当收到后台服务应答时,CThostFtdcTraderSpi 的回调函数会被调用。如果响应数据不止一个,则回调函数会被多次调用。回调函数的第一个参数为响应的具体数据,如果出错或没有结果有可能为NULL。第二个参数为处理结果,表明本次请求的处理结果是成功还是失败。在发生多次回调时,除了第一次回调,其它的回调该参数都可能为 NULL。第三个参数为请求号,即原来发出请求时填写的请求号。第四个参数为响应结束标志,表明是否是本次响应的最后一次回调。 2. 私有流编程接口私有流中的数据中会员的私有信息,包括报单回报、成交回报等。 通过私有流接收回报的编程接口通常如下:
3