通讯模式
交易员API使用建立在TCP协议之上FTD协议与交易托管系统进行通讯,交易托管系统负责投资者的交易业务处理。
1. 通讯模式
FTD 协议中的所有通讯都基于某个通讯模式。通讯模式实际上就是通讯双方协同工作的方式。
FTD涉及的通讯模式共有三种:
- 对话通讯模式
对话通讯模式是指由会员端主动发起的通讯请求。该请求被交易所端接收和处理,并给予响应。例如报单、查询等。这种通讯模式与普通的客户/服务器模式相同。
- 私有通讯模式
私有通讯模式是指交易所端主动,向某个特定的会员发出的信息。例如成交回报等。
- 广播通讯模式(公有流)
广播通讯模式又称公有流,是指交易所端主动,向市场中的所有会员都发出相同的信息。例如公告、市场公共信息等。
通讯模式和网络的连接不一定存在简单的一对一的关系。也就是说,一个网络连接中可能传送多种不同通讯模式的报文,一种通讯模式的报文也可以在多个不同的连接中传送。
无论哪种通讯模式,其通讯过程都如下图所示
2. 数据流
交易托管系统支持对话通讯模式、私有通讯模式、广播通讯模式:
- 对话通讯模式下支持对话数据流和查询数据流:
对话数据流是一个双向数据流,交易托管系统发送交易请求,交易系统反馈应答。交易系统不维护对话流的状态。系统故障时,对话数据流会重置,通讯途中的数据可能会丢失。
查询数据流是一个双向数据流,交易托管系统发送查询请求,交易系统反馈应答。交易系统不维护查询流的状态。系统故障时,查询数据流会重置,通讯途中的数据可能会丢失。
- 私有通讯模式下支持私有数据流:
私有流是一个单向数据流,由交易系统发向交易托管系统,用于传送交易员私有的通知和回报信息。私有流是一个可靠的数据流,交易系统维护每个交易托管系统的私有流,在一个交易日内,交易托管系统断线后恢复连接时,可以请求交易系统发送指定序号之后的私有流数据。私有数据流向交易托管系统提供报单状态报告、成交回报更等信息。
- 广播通讯模式下支持公共数据流:
公共数据流是一个单向数据流,由交易系统发向交易托管系统,用于发送市场公共信息;公共数据流也是一个可靠的数据流,交易系统维护整个系统的公共数据流,在一个交易日内,交易托管系统断线恢复连接时,可以请求交易系统发送指定序号之后的公共数据流数据。
3. 业务与接口对照
| 业务类型 | 业务 | 请求接口 | 响应接口 | 数据流 |
| 登录 | 登录 | CThostFtdcTraderApi:: ReqUserLogin |
CThostFtdcTraderSpi:: OnRspUserLogin |
对话流 |
| 登出 | CThostFtdcTraderApi:: ReqUserLogout |
CThostFtdcTraderSpi:: OnRspUserLogout |
对话流 | |
| 修改用户口令 | CThostFtdcTraderApi:: ReqUserPasswordUpdate |
CThostFtdcTraderSpi:: OnRspUserPasswordUpdate |
对话流 | |
| 交易 | 报单录入 | CThostFtdcTraderApi:: ReqOrderInsert |
CThostFtdcTraderSpi:: OnRspOrderInsert |
对话流 |
| 报单操作 | CThostFtdcTraderApi:: ReqOrderAction |
CThostFtdcTraderSpi:: OnRspOrderAction |
对话流 | |
| 报价录入 | CThostFtdcTraderApi:: ReqQuoteInsert |
CThostFtdcTraderSpi:: OnRspQuoteInsert |
对话流 | |
| 报价操作 | CThostFtdcTraderApi:: ReqQuoteAction |
CThostFtdcTraderSpi:: OnRspQuoteAction |
对话流 | |
| 私有回报 | 成交回报 | N/A | CThostFtdcTraderSpi:: OnRtnTrade |
私有流 |
| 报单回报 | N/A | CThostFtdcTraderSpi:: OnRtnOrder |
私有流 | |
| 报单录入错误回报 | N/A | CThostFtdcTraderSpi:: OnErrRtnOrderInsert |
私有流 | |
| 报单操作错误回报 | N/A | CThostFtdcTraderSpi:: OnErrRtnOrderAction |
私有流 | |
| 查询 | 报单查询 | CThostFtdcTraderApi:: ReqQryOrder |
CThostFtdcTraderSpi:: OnRspQryOrder |
查询流 |
| 成交查询 | CThostFtdcTraderApi:: ReqQryTrade |
CThostFtdcTraderSpi:: OnRspQryTrade |
查询流 | |
| 投资者查询 | CThostFtdcTraderApi:: ReqQryInvestor |
CThostFtdcTraderSpi:: OnRspQryInvestor |
查询流 | |
| 投资者持仓查询 | CThostFtdcTraderApi:: ReqQryInvestorPosition |
CThostFtdcTraderSpi:: OnRspQryInvestorPosition |
查询流 | |
| 合约查询 | CThostFtdcTraderApi:: ReqQryInstrument |
CThostFtdcTraderSpi:: OnRspQryInstrument |
查询流 | |
| 通知 | 合约状态 | N/A | CThostFtdcTraderSpi:: OnRtnInstrumentStatus |
公有流 |
交易接口和私有流接口会有相互关联,如用户报单录入ReqOrderInsert,马上会收到报单响应OnRspOrderInsert,说明交易系统已经收到报单。报单进入交易系统后,如果报单的交易状态发生变化,就会收到报单回报OnRtnOrder。如果报单被撮合(部分)成交,就会收到成交回报OnRtnTrade。其中,一个用户的报单回报和成交回报也会被所属会员下其他的用户接受到。