综合交易平台API技术开发指南

来源:互联网 发布:谁有好用的修车软件 编辑:程序博客网 时间:2024/04/29 21:29

综合交易平台API技术开发指南 


第一章CTP 产品特性 
1. 如何获取综合交易平台(Comprehensive Transaction Platform 以下简称 CTP)证券(期
货)交易及行情 API 发布包、文档以及开发实例? 
【答:】所有 CTP 相关资料都在 CTP_API 开发技术群(59216315)及 CTP_API 开发技术
2 群(102497247)群共享中发布,请及时获取最新版本。CTP_API 开发技术群均遵守实
名制规则,在申请加入时请告知实名并在加入后及时修改群名片,对于不符合群公告要

求的群成员将不定期予以清除。


 
2. CTP 提供哪些证券(期货)投资者交易客户端软件? 
【答:】CTP 向全市场免费开放投资者交易及行情 API,并不提供任何投资者使用的交易
客户端产品。
目前市场上使用的客户端产品都由第三方厂商提供(基于免费开放的 API
接入 CTP),此类第三方厂商与上期技术无任何关联关系。较为成熟的客户端产品包括
手工交易客户端(如快期:http://www.kuaiqi.net/)及程序化交易客户端(如盈佳
http://winnerfutures.com.cn/) 
 
3. 请问国内证券(期货)公司有哪些使用 CTP 系统? 
【答:】截至到 2012 年 10 月 19 日,期货公司主用系统用户 11 家(部分公司同时部署
一套或多套 CTP 次用系统),期货公司次用系统用户 23 家,证券公司次用系统用户 1
家。 
CTP 期货公司主用系统用户:中国国际、华泰长城、海通期货、申银万国、上海中
期、广发期货、恒泰期货、美尔雅期货、中证期货、华元期货、瑞龙期货、天鸿期货。 
CTP 期货公司次用系统用户:华西期货、华鑫期货、兴业期货、渤海期货、金源期
货、宏源期货、新湖期货、国泰君安、东证期货、南华期货、浙商期货、银河期货、经
易期货、西部期货、光大期货、中信建投、瑞达期货、久恒期货、国海良石、永安期货、
国金期货、方正期货。 
CTP 证券公司次用系统用户:华宝证券。 
 【综合交易平台 API 技术开发指南】 
 上海期货信息技术有限公司,2012 第 3 页 共 17 页
 
4. CTP 中的 BrokerID 是什么意思,在使用 CTP-API 时如何填写? 
【答:】CTP 最初设计时考虑了一套 CTP 系统供多家经纪公司使用的情形,CTP 则使用
BrokerID 从业务层面完全隔离不同经纪公司的交易、风控及结算用户的接入。BrokerID
的具体取值请咨询开户的经纪公司。 
 
5. CTP 中 UserID 和 InversterID 的区别是什么? 
【答:】经纪公司交易员为投资者下单时,UserID 为操作员代码,InversterID 为投资者
代码;投资者自己下单时,两者同为投资者代码。 
 
6. CTP-API 中的 OrderRef 和 OrderActionRef 是什么意思,在客户端开发时如何填写? 
【答:】OrderRef 是 CTP 后台提供给客户端标识一笔报单的字段,客户端可以通过关键
字组(FrontID 、SessionID 、OrderRef)唯一确定一笔报单,客户端在报单发出时未填
写 OrderRef 字段,CTP 后台会自动为该报单的 OrderRef 字段赋值并返回给客户端。
OrderActionRef 与 OrderRef 功能类似,它是提供给客户端来标识一笔撤单。OrderRef 的
数据类型为字符数组,必须是阿拉伯数字字符。OrderRef(OrderActionRef)的取值必须
保证在同一会话内后发送的报(撤)单的 OrderRef(OrderActionRef)值大于之前的最
大值,在开发多线程的客户端时需要特别注意。 
 
7. CTP 是否提供 Level2 行情? 
【答:】CTP 期货交易系统仅提供各交易所发布的普通一阶行情。部分证券公司部署的
CTP 证券交易系统提供 level2 行情,请联系证券公司获取 CTP-level2-API 发布包及 level2
行情服务器配置参数。 
 
8. CTP 是否提供历史行情,实际交易时需要取历史数据做相应计算,比如 atr(30)等,如
何处理?是否只能客户端通过别的接口自己补数据? 
【答:】历史数据需要通过行情商解决。对于未及时登录及断线造成的行情数据丢失,
CTP 也不提供行情回补机制,因为行情的实时性对 CTP 的系统延时要求非常高,行情数
据的回补逻辑增加的系统延时以及网络资源的消耗限制了其在高速系统内部实现的空
间。程序化交易客户端可以通过多路连接的方式降低断线风险,或是托管策略服务器的【综合交易平台 API 技术开发指南】 
方式以提高到 CTP 连接的保障级别。 
 
第二章CTP-API 技术基础 
9. CTP-API 库包含哪些文件,分别包含什么内容? 

【答:】

1. 错误定义文件(error.dtd、error.xml)

2. 行情接口类定义文件(ThostFtdcMdApi.h)、

3. 交易接口类定义文件(ThostFtdcTraderApi.h)、

4. 客户端接口使用的业务数据结构定义文件 ( ThostFtdcUserApiStruct.h )、 

5. 客 户 端 接 口 使 用 的 业 务 数 据 类 型 定 义 文 件( ThostFtdcUserApiDataType.h )、 

6. 行 情 接 口 库 文 件 ( thostmduserapi.lib ,thostmduserapi.dll)、

7. 交易接口库文件(thosttraderapi.lib,thosttraderapi.dll)。

交易和行情接口类定义文件都包含 API 和 SPI 类定义,

客户端使用 API 向 CTP 后台发送请求,

CTP后台则使用 SPI 向客户端回传响应及回报。 

 CTP 证券接口库文件基本类似,文件名中使用“SSE”标识为证券接口。 


 
10. CTP-API 与 CTP 后台才何种协议通讯,如何通讯? 
【答:】CTP-API 使用建立在 TCP 协议之上 FTD 协议与 CTP 后台进行通讯,FTD 协议中
的所有通讯都基于某个通讯模式。通讯模式实际上就是通讯双方协同工作的方式。

CTP-API 涉及的通讯模式共有三种:

○1 对话通讯模式,是指由客户端主动发起的通讯请求,该请求被 CTP 后台接收和处理,并给予响应,

如报单、撤单及查询等,这种通讯模式与普通的客户/服务器模式相同。

○2 私有通讯模式,是指 CTP 后台主动向某个特定的客户端发出的信息,如报单回报、成交回报等。

○3 广播通讯模式,是指 CTP 后台主动向有客户端都发出相同的信息,如合约交易状态通知等。

 

通讯模式和网络的连接不一定存在简单的一对一的关系。也就是说,一个网络连接中可能传送多种不同通讯模式的报文,一种通讯模式的报文也可以在多个 
不同的连接中传送。 
 CTP-API 与 CTP 后台通讯,不同的通讯模式对应不同的通讯数据流,对话通讯模式
对应对话数据流(DialogRsp)和查询数据流(QueryRsp),CTP 后台不维护对话数据流
(查询数据流)的状态,通讯故障时,对话数据流(查询数据流)会重置,通讯途中的数据可能会丢失。 
私有通讯模式对应私有数据流(Private),私有数据流是一个可靠的数据流,CTP
后台维护每个登录用户的私有流,在一个交易日内,CTP-API 与 CTP 后台断线后恢复连
接时,CTP 后台会向使用 restart 或 resume 模式订阅私有数据流的用户重传全部(restart)
或断线期间(resume)的私有数据流。 
广播通讯模式对应公共数据流(Public),公共数据流与私有数据流类似,也是一个可靠的数据流。 
 
11. CTP-API 的实例会在客户端生成哪些流文件?如何指定流文件存放路径? 

【答:】行情接口实例生成(DialogRsp.con,QueryRsp.con,TradingDay.con),

交易接口实例(DialogRsp.con,Private.con,Public.con,QueryRsp.con,TradingDay.con)。

以上流文件的存放路径都是通过接口实例创建函数(CreateFtdcTraderApi\CreateFtdcMdApi)参

数指定,如 CreateFtdcTraderApi(".\\flow\\")将会在当前目录的 flow 文件夹存放流文件。
客户端无法决定是否生成以上流文件,因此,在开发多 CTP-API 实例的客户端时需要注
意操作系统的文件句柄限制。另外,流文件中存储了客户端与后台的数据交互进度标识,
因此,多账号共用接口实例(或多实例共用流文件)将会造成数据紊乱或缺失。 
 
12. 基于 CTP-API 的客户端交易软件在每个交易日开始之前需要执行哪些必要的步骤? 

【答:】

○1 创建 API 实例(CreateFtdcTraderApi)并为其注册对应的回调接口类的实例( RegisterSpi ) → 

○2 订 阅 私 有 流 ( SubscribePrivateTopic ) → 

○3 订阅公有流(SubscribePublicTopic)→

○4 注册名字服务器网络地址(RegisterNameServer)或注册前置机网络地址(RegisterFront)→

○5 初始化 API 与 CTP 前置服务器连接(Init),连接成功后回调 OnFrontConnected→

○5 发起客户端认证请求(ReqAuthenticate),客户端认证结果由 OnRspAuthenticate 返回;在 CTP 后台开启强制客户端认证(或客户端在本次会

话主动发起认证)后,只有通过客户端认证才能接入 CTP 后台→

○6 发起用户登录请求(ReqUserLogin),登录请求响应(OnRspUserLogin)返回登录结果→

○6 登录成功后,客户 端 在当前交易日 必 须 成功执行 一 次 “投资者结算结果确认(ReqSettlementInfoConfirm)”后才能开始交易。 


 
13. CTP 的客户端怎样实现对代理服务器的支持? 
【答:】CTP 的 API 提供了对代理服务器的支持,包括 socks4、socks4a 及 socks5,客户

端开发时只需通过传递给 API 不同的连接字符串就可实现,

例如: 

RegisterFront("socks5:// IP 地址或域名:端口号/user:pass@127.0.0.1:10001"); 


 
14. 什么是动态密码(OneTimePassword),在 ReqUserLogin 请求中如何填写该字段的值? 
【答:】动态令牌(时间令牌 TOTP)是 CTP 后台提供给证券(期货)公司投资者网上交
易使用的一种更强的身份验证工具,该功能目前由投资者和证券(期货)公司选择使用。
为 CTP 供应动态令牌的厂商有坚石诚信和飞天诚信。证券(期货)公司购买动态令牌后
将随附的种子文件导入 CTP 后台,并将各令牌及种子分配给到指定的投资者,使用动态
令牌的投资者在登录 CTP 时需要将动态令牌当时显示的字符填写到 OneTimePassword
字段,通过用户名/密码以及动态密码校验后方可登录成功。 
 
15. 什么是客户端认证,怎样获取认证码(AuthCode)? 
【答:】客户端认证是为了保证证券(期货)公司的投资者只能使用该公司认可的客户
端产品接入 CTP 后台进行交易。投资者在使用第三方提供或是自行开发的客户端产品接
入指定的证券(期货)公司 CTP 交易系统之前,必须向该公司提交用户端产品信息
( UserProductInfo )并 获得 认证码 ( AuthCode );之 后在发起 客户端 认证请 求时
(ReqAuthenticate)填写正确的用户端产品信息及对应的认证码即可完成客户端认证。 
 
16. CTP 的名字服务器是做什么用的,如何使用? 
【答:】上线 CTP 的证券(期货)公司可以选择部署名字服务器,客户端可以通过注册
名字服务器(RegisterNameServer)自动选择 CTP 后台分配的前置机地址接入 CTP 交易
系统,不再需要客户端直接注册 CTP 前置地址(RegisterFront)。 
 
17. CTP 是否提供加密手段以保护通过互联网传送的交易数据的安全? 
【答:】上线 CTP 的证券(期货)公司可以选择部署 ssl 前置供投资者客户端以 SSL 加密
方式接入 CTP 交易系统。客户端选择接入 ssl 前置时使用如下方式注册 ssl 前置地址: 
RegisterFront("ssl:// ssl 前置 IP 地址或域名:端口号"); 【综合交易平台 API 技术开发指南】 
 上海期货信息技术有限公司,2012 第 7 页 共 17 页
 
 
18. 如何接入 CTP 提供的 UDP 行情? 
【答:】创建行情 API 实例函数 CreateFtdcMdApi(const char *pszFlowPath = "", const bool 
bIsUsingUdp=false) 中,参数 bIsUsingUdp:为行情模式,该参数缺省或置为 false 时使用
TCP 行情,否则为 UDP 行情。无论使用 TCP 或是 UDP 行情,都必须注册相对应的 TCP
或 UDP 行情服务器地址。一般来说,CTP 的普通行情前置都为 TCP 行情服务器,使用
UDP 行情服务器需要向证券(期货)公司申请,且仅限专线或内网接入的投资者使用。 
 在注册行情前置服务器时,无论是 tcp 还是 udp,都必须使用 RegisterFront("tcp://
行情前置服务器 IP 地址或域名:端口号")的格式,因为 udp 传输存在不可靠性,所以在
登录、订阅及接收第一次行情时仍然使用 tcp 方式;并且无需为 udp 方式提供配置节点
参数,udp 仍然使用相同的地址和端口号。 
 
19. CTP 对每秒发送查询数量的限制是多少? 
【答:】CTP 仅对查询进行流量限制,对交易指令没有限制。如果有在途的查询,不允
许发新的查询。1 秒钟最多允许发送 1 个查询。返回值“-2”表示“未处理请求超过许
可数”,“-3”表示“每秒发送请求数超过许可数”。 
 
20. 程序使用 TradeApi 和 MdApi,并且把这 2 个 dll 放在同一个目录下。程序再次启动后,
如果某个 api 采用 Resume 模式订阅公有流/私有流,就会去参考相关的本地流文件。可
能会导致数据异常? 
【答:】相同目录下的 2 个 dll 会把数据写入相同本地流文件,导致 2 个 dll 不断的覆盖
对方写下的流文件。程序再次启动时,TradeApi 可能去参考 MdApi 写下的流文件,所以
导致数据流不连续。解决方法:如果一定要把 2 个 dll 放在相同的目录下,可以在创建
api 时指定流文件的路径。使得不同的 dll 写入不同流文件。 
static CThostFtdcUserApi *CreateFtdcUserApi(const char *pszFlowPath = "", const bool 
bIsUsingUdp=false); 
 
21. 请问 api 是否多线程安全的(linux 以及 windows 平台)? 
【答:】api,spi 是不同的线程、api 可以同时被多个线程调用、也就是你说的线程安全性、
这些特性和平台无关。 【综合交易平台 API 技术开发指南】 
 上海期货信息技术有限公司,2012 第 8 页 共 17 页
 
 
22. 测试时发现 CThostFtdcMdSpi 有个比较严重的问题,就是使用 Release()退出清理对象时
会出现死机,并且频率很高,怎样解决? 
【答:】请参考以下代码的释放顺序。 
template <class TUserApi> 
void CUserApiEnv<TUserApi>::UnInitialUserApi() 

 // 释放 UserApi 
 if (m_pUserApi) 
 { 
 m_pUserApi->RegisterSpi(NULL); 
 m_pUserApi->Release(); 
 m_pUserApi = NULL; 
 } 
 // 释放 UserSpi 实例 
 if (m_pUserSpiImpl) 
 { 
 delete m_pUserSpiImpl; 
 m_pUserSpiImpl = NULL; 
 } 

 
23. CTP 的 LIB,是几字节对齐的,是一字节,还是八字节,还是其它的? 
【答:】是标准的 个字节对齐。 
 
24. 使用查询函数时怎样设置查询条件? 
【答:】CTP 提供了查询函数及查询相应函数,客户端可以使用这些函数向后台查询投
资者以及基础数据信息,查询条件各字段不设置时多数查询函数会返回对应经纪公司所
有记录。如查询合约信息: 
 
CThostFtdcQryInstrumentField req; 
 memset(&req, 0, sizeof(req)); 
int iResult = pApi->ReqQryInstrument(&req, ++iRequestID); 
这样,在对应的查询响应 OnRspQryInstrument 中将会获得所有有效的合约。 
 
第三章CTP-API 证券交易 
模拟交易系统 
25. CTP 提供证券模拟交易系统供投资者开发、测试试用: 
交易前置: ctp24-front1.financial-trading-platform.com:41205 
 ctp24-front2.financial-trading-platform.com:41205 
行情前置: ctp24-front3.financial-trading-platform.com:41213 
 ctp24-front4.financial-trading-platform.com:41213 
经纪公司代码:2011 
 
26. 怎样申请上期技术证券模拟交易系统测试账号? 
【答:】可以使用以下账号接入上期技术提供的证券模拟交易系统:1000021-1000030
(共 10 个公用帐号,请勿修改密码),密码均为 1。 
证券交易业务 
27. CTP 证券交易系统支持哪些业务类型? 
【答:】CTP 证券交易系统支持普通股票买卖、ETF 买卖及申购赎回、国债回购卖出、融
资融券等业务类型。 
 
28. CTP 证券交易系统支持哪些交易指令? 
【答:】CTP 证券交易系统支持市价、限价报单及撤单等交易指令。报单(买、卖、申
购及赎回)使用ReqOrderInsert函数,市价单(报单价格条件:THOST_FTDC_OPT_AnyPrice,
有效期类型:THOST_FTDC_TC_IOC,价格:不需要),限价单(报单价格条件:
 
THOST_FTDC_OPT_LimitPrice,有效期类型:THOST_FTDC_TC_GFD,价格:指定价格)。 
 ReqOrderAction 函数完成撤单操作,使用数据序列(BrokerID、InvestorID、OrderRef、
FrontID、SessionID、InstrumentID、ActionFlag=THOST_FTDC_AF_Delete)或(BrokerID、
InvestorID、exchangeID、traderID、OrderLocalID、ActionFlag=THOST_FTDC_AF_Delete)
定位报单完成撤销。 
 
行情接口函数 
交易接口函数 
第四章CTP-API 期货交易 
模拟交易系统 
29. CTP 提供期货模拟交易系统供投资者开发、测试试用: 
交易前置: asp-sim2-front1.financial-trading-platform.com:26205 
行情前置: asp-sim2-md1.financial-trading-platform.com:26213 
经纪公司代码:2030 
 
30. 怎样申请期货模拟交易系统测试账号? 
【答:】准备为 CTP 开发交易客户端的软件厂商,期货投资者可以联系国内任意一家期
货公司向上期技术服务台提出申请。 
 
31. 请问模拟交易系统交易时间? 
【答:】国内证券、期货市场正常交易时间均可交易,每个交易日晚 17:30 到凌晨 5:
00 也可进行交易,节假日正常情况下都可进行交易。 
 
32. 请问期货模拟环境上期所是非交易状态,可其它交易所没有,为何其它交易所的品种也
不动,没有交易了? 【综合交易平台 API 技术开发指南】 
 上海期货信息技术有限公司,2012 第 11 页 共 17 页
 
【答:】模拟环境只有上期所的交易所系统,其他交易所的合约也是在上期所系统模拟。 
 
33. 我 9 点前就开机了,但不知为何到 9 点 4 分左右期货模拟环境才开始接收到行情数据 
【答:】期货模拟环境行情转发在状态从“连续交易”切换到“非交易状态”时会停止行情
转发 5 分钟,主要是为了保证在收盘后 5 分钟内行情静止以方便德邦期货提取模拟大赛
的客户权益数据。这种状态切换发生在集合竞价结束时,由于“非交易状态”仅一分钟,
所以休息 5 分钟就到了 9:04 分,而且模拟环境并不像生产环境每天校时(而是一个月),
所以就有可能看到的延时会更长。 
 
期货交易业务 
行情接口函数 
交易接口函数 
34. 下单交易是否需要经过期货公司的服务器?期货公司服务器坏了是否会影响到 CTP 的
正常交易? 
【答:】CTP 是一套多期货公司共用的交易、结算系统,全部系统部署在上期技术的机
房内。因此,期货公司的服务器状况对其没有任何影响;而且,CTP 系统是由上期技术
统一运行维护,所以稳定性应该没有问题! 
 
35. 我们搞接口与其他的软件连接,只要符合 ctp 的接口。结算的问题我们不需要考虑了吧? 
【答:】CTP 交易、风控和结算子系统完全独立,现在公开发布的是交易接口。开销户、
风控及结算等管理工作由期货公司管理人员通过上期技术提供给期货公司的 CTP 管理
平台和风险控制客户端完成。 
 
 
36. 请问投资者结算结果确认是什么意思?有什么用? 
【答:】投资者在登录后首先需要确认自己的结算单(即账单),结算单确认后才可以进
行交易操作。客户端可以使用 ReqSettlementInfoConfirm 请求确认结算单,请求时只需【综合交易平台 API 技术开发指南】 
 上海期货信息技术有限公司,2012 第 12 页 共 17 页
 
要填写经纪公司代码和投资者代码。查询结算单使用 ReqQrySettlementInfo,不填日期,
表示取上一交易日结算单。使用 ReqQrySettlementInfoConfirm 可以查询当天客户结算单
确认情况,无记录返回表示当天未确认结算单,为避免客户当天多次登陆多次重复确认
结算单,建议在确认前先查询当天是否已经确认,如果客户已经确认过则不需要再次重
复确认。 
37. 可以设置止损否,限价止损、市价止损及 gtc 止损之类的? 
【答:】止盈止损等条件单将在 V4.1 版本推出。gtc 不会支持,现在国内的期货交易所
还不支持过夜挂单!CTP 目前也只是 7:30 起动系统,早的话 8:00 可以挂预埋单了。 
 
38. 可以在 CTP 上面设置保证金的算法--结算价/昨结算价/成交均价/开仓价 
四种算法分别都是什么意思? 
【答:】保证金算法:历史仓用昨结算价计算,今仓可以选择(成交均价/开仓价/结算
价),这里的结算价是指最新价,该项配置由期货公司管理人员在后台进行配置,客户
端可以通过API查到该配置的内容(v4.1 版本将支持该项查询,所以现在快期是在前
端自己做配置)。 
 
39. 逐笔报单的预冻结资金哪里可以看到?需要自己计算的话如何计算? 
【答:】冻结保证金=(成交均价|开仓价|最新价) * 未成交手数 * 合约乘数 * 保证金率
(按金额)+ 未成交手数* 保证金率(按手),参与计算的价格选择参照保证金算法设置。 
 
40. 可提比例怎么查,基本保证金是什么? 
【答:】可提资金等实时性要求不高的数据可以直接从后台查询,客户端无需知道“可
提比例”。“基本保证金”又叫“保底资金”和“基本准备金”,TThostFtdcMoneyType 
Reserve。 
 
41. 平仓盈亏和持仓盈亏是在计入“可用资金”并应用算法时是汇总后统一计算还是分笔计
算? 
【答:】汇总计算后再应用相应算法,如“浮盈可开仓”是把所有的持仓浮盈浮亏加总
后再计入“可用资金”。 
42. 下午开盘前是否有集合竞价?集合竞价时是否会收到行情更新?集合竞价时是否可以【综合交易平台 API 技术开发指南】 
 上海期货信息技术有限公司,2012 第 13 页 共 17 页
 
发市价单? 
【答:】下午没有集合竞价。集合竞价时不更新买卖价/量。集合竞价时发送的市价单会
被交易所认为没有对手方,作为交易不成功来自动撤单。 
43. 请问报单状态中的在队列中是什么意思? 
【答:】表示报单已经在交易所的撮合队列中。 
44. 真 实 环 境 中 的 OnRtnDepthMarketData() 返 回 的 成交金额 Turnover 及 当日均价
AveragePrice 两个字段是不是不正确? 
【答:】是的,交易客户端用到该数据时需要自行调整,调整规则如下: 
交易所 当日均价 成交金额 
郑商所 正确 乘以合约乘数 
大商所 除以合约乘数 正确 
上期所 除以合约乘数 正确 
 
45. 查询历史平仓明细是哪个函数? 
【答:】查历史结算单,CTP 的历史报单只能通过期货公司管理人员在管理平台查询,
客户端需要历史交易记录可以通过查询历史结算单的方式获取。 
 
46. 通过 ReqQryInstrumentMarginRate 获取保证金率时,在返回的数据中,是不是全部都是
绝对值?如果是相对交易所的费率的话,那么交易所保证金率通过什么方法获取? 
【答:】ReqQryInstrumentMarginRate 返回的保证金率已经包含了交易所保证金率及保证
金率调整,也就是说返回最终的比率,即绝对值。 
 
47. 持仓查询记录中的昨持仓是今天开盘前的一个初始值,不会因为平昨或者平仓而减少。
当前时侯的昨持仓=总持仓-今持仓。YdPosition := Position - TodayPosition。 
 
48. OnHeartBeatWarning 在什么情况下发生?我试了自己断线,路由器断线,狂开 bt 下载
都没发生过这个事件。 
【答:】永远不会发生,已经对 API 用户屏蔽了该响应。 
 
49. 委托单的状态中怎么没有“部成部撤”这个状态呢?“未成交不在队列中”与“撤单”的区别
是什么? 
【答:】“部成部撤”即“部分成交不在队列中”。CTP 有一个自动挂起标志,如果设置
了该标志,那么断线客户的未成交报单将被自动挂起,这时该报单的状态就是“未成交
不在队列中”。自动挂起标志是从上期所系统沿用过来的东西,原来设计的“自动挂起”
报单,可以撤单也可以通过“激活”指令让报单重新进入队列。目前请客户端将“自动挂
起标志”设置为 0,永远不挂起。 
 
50. 为什么每次连接服务器时,最大报单引用(MaxOrderRef)都是 1 开始的? 
【答:】FrontID + SessionID + OrderRef,作为主键,当 FrontID + SessionID 变更后
MaxOrderRef 将重置。 
 
51. 报单引用是每发一次单就要递增,还是该 SESSION 内一直使用 LONGIN 时取得的最大报
单引用? 
【答:】报单引用由客户端自主管理,后台仅要求该字段递增。 
 
52. OnRtnOrder 每次在登陆时都会把上一次的下单结果再重新返回一次,这样是不是有些
不妥啊? 
【答:】CTP 的公有流和私有流提供三种订阅方式,TERT_RESTART:从本交易日开始重传,
TERT_RESUME:从上次收到的续传,TERT_QUICK:只传送登录后的内容。每次都重传是因
为在订阅时(SubscribePrivateTopic/SubscribePublicTopic)选择了 TERT_RESTART 方式。 
 
53. 我查某个合约的手续费,返回品种,不能认为所有合约都是按这个设置的?也有可能有
个别合约是按合约设置的? 
【答:】是的,查询费率时返回品种只说明该合约的费率设置是取自对应品种的费率设
置,后台没有对该合约进行特殊的设置。 
 
54. 如果发送一个报单委托价格在停板之外。按道理如果 CTP 校验失败,那么应该从
OnRspOrderInsert 返回错误;如果是交易所校验失败,那么应该从 OnErrRtnOrder 来返
回错误。现在情况是这两个地方都不返回错误,而是从 OnRtnOrder 返回。然而
OnRtnOrder 却没有错误代码,仅是状态改变,没法捕捉异常。其实用户报单后,如果
正确根本不会“马上收到报单响应 OnRspOrderInsert”,只有报单被 CTP 拒绝才会收到。 【综合交易平台 API 技术开发指南】 
 上海期货信息技术有限公司,2012 第 15 页 共 17 页
 
【答:】超出涨跌停板的判断是在交易所处理,所以,CTP 收到报单就新增一条记录,
然后收到交易所的 OnErrRtnOrder 后,修改委托表里的记录,触发 OnRtnOrder。
OnErrRtnOrder 的作用是:CTP 在检查委托发现错误时,会给发出委托的投资者发出
OnRspInsertOrder,同时发出 OnErrRtnOrder 给相关的交易员,所以,作为投资者可以不
关心 OnErrRtnOrder。 
 
55. 还有就是 OnRtnOrder 有重复推送的问题。比如发一个单,OnRtnOrder 推了一个“已报”
状态回来。然后我开始撤单,撤单一报入,OnRtnOrder 首先又推一个“已报”的状态
回来,然后才是“撤消”的状态。重复推送当然不会出错,不过会影响效率。 
【答:】投资者发出 1 个操作,都会收到 2 条回报。具体说,1,发出 1 笔委托,2,CTP
发出“已提交”状态回报,3,CTP 转发交易所的“未成交”状态回报。 
下一个动作:1,用户发出撤单;2,CTP 修改 active User,再发出“未成交”状态回报;
3,CTP 转发交易所的“已撤单”状态回报。就是 CTP 应答一下,然后交易所又应答一
下。都是把对应的委托状态从 OnRtnOrder 推回来。 
 
56. 从 OnRtnOrder 中有没有办法区分这是从 CTP 返回的包还是从交易所返回的包? 
【答:】对客户端来说,所有返回包都由 CTP 发出。 
57. 我想请教,报单状态回报或下单撤单反馈里面我怎么区分是不是交易所小结休息引起
的?这样我好下预埋单。 
【答:】OnRtnInstrumentStatus 会通知当前交易所状态变化 
58. 哪些报单状态是报单的最终状态,不会再改变了的? 
【 答 :】 以 下 状 态 为 报 单 的 最 终 状 态 : THOST_FTDC_OST_AllTraded 、
THOST_FTDC_OST_Canceled 、 THOST_FTDC_OST_NoTradeNotQueueing 、
THOST_FTDC_OST_PartTradedNotQueueing。 
59. ReqOrderAction 里面的:报单的挂起、报单的激活、报单的修改这几个功能现在有没有
实现? 
【答:】目前只支持撤单。 
60. 平今仓的时候,对大连或者郑州使用 CloseToday 是否有问题? 
【答:】后台有对应的转换,对 DCE 和 CZCE 的仓位使用平今或平昨都转换为平仓. 
61. 判断一个合约是否可以交易,如果使用 InstLifePhase 判断,那么在上市日和到期日这一【综合交易平台 API 技术开发指南】 
 上海期货信息技术有限公司,2012 第 16 页 共 17 页
 
天,合约生命周期状态是 1(上市),还是 3(到期)?还是直接用 IsTrading 去判断? 
【答:】CTP 交易后台从管理平台或是交易所取得“合约生命周期状态”及“当前是否
交易”两个字段的值,由于跟后台的设置关联,且 DCE 及 CZCE 并不会在盘中推送单个
合约的状态,因此并不能通过这两个字段及时获得合约是否交易的信息。要查某个合约
当天是否可以交易,可以查 IsTrading,要看现在是否可以交易,就看合约状态(仅上期
所)或者交易所状态。 
62. TThostFtdcCombOffsetFlagType 有几个类型,分别代表什么意思啊。 
【 答 :】 TThostFtdcCombOffsetFlagType 是 一 个 数 组 , 元 素 值 的类型 为
TThostFtdcOffsetFlagType,单腿合约交易只需要填[0]位,组合合约交易时各分腿的开平标志
从[0]开始,每个元素对应一条分腿,暂定为 5 位,目前市场上最长的组合合约为 3 条腿。 
 
63. 银期转账里,业务功能码,应该填什么? 
【答:】 
101001 银行发起转帐开户 
101002 银行发起签约销户 
101003 银行发起银行帐号变更 
102001 银行发起银行资金转期货 
102002 银行发起期货资金转银行 
103001 银行发起冲正银行转期货 
103002 银行发起冲正期货转银行 
104001 银行发起查询资金帐户余额 
104003 银行发起查询账户对应关系 
104005 完成银行向期货公司发起验证期货投资账号密码交易,并可查询账户信息 
104006 银行发起查询期货公司系统状态 
105099 银行下传对帐明细文件 
202001 期货发起银行资金转期货 
202002 期货发起期货资金转银行 
203001 期货发起冲正银行转期货 
203002 期货发起冲正期货转银行 
204002 期货发起查询银行余额 【综合交易平台 API 技术开发指南】 
 上海期货信息技术有限公司,2012 第 17 页 共 17 页
 
204004 期货发起个人客户查询银期直通车开通情况 
204005 期货端发起查询转帐明细 
204006 期货公司发起查询银行系统状态 
204999 期货端发起查询客户平台当日流水 
206001 期货发起银行资金转期货资金(入金)通知 
206002 期货发起期货资金转银行资金(出金)通知 
901001 个人开通银期直通车 
901002 个人解除银期直通车 
905001 平台发起期商签到 
905002 平台发起期商签退 
905003 期货发起同步密钥 
 
64. 请问 CTP 支持哪些下单类型?我在文档里面看到可以直接在报单的时候设置限价单,市
价单和触发单。这些好像交易所目前官方还只支持限价单吧? 其他实现都是 CTP 实现
的吗? 
【答:】CTP 支持国内三家商品交易所正式对外开放的所有下单类型,大商所和郑商所
提供套利交易指令和市价单,大商所提供止盈止损等条件单。CTP 在后台提供非交易时
段的预埋单,条件单也将在 v4.1 版本中完成。 
0 0
原创粉丝点击