from 上海期货信息技术有限公司 2012 这里对于技术开发指南的文本做了重点摘要,不是完全完整的指南内容,仅供参考.
第一章CTP 产品特性
1. CTP 提供哪些证券(期货)投资者交易客户端软件?
【答:】CTP 向全市场免费开放投资者交易及行情 API,并不提供任何投资者使用的交易
客户端产品。目前市场上使用的客户端产品都由第三方厂商提供(基于免费开放的 API
接入 CTP),此类第三方厂商与上期技术无任何关联关系。较为成熟的客户端产品包括
手工交易客户端(如快期:http://www.kuaiqi.net/)及程序化交易客户端(如盈佳:
http://winnerfutures.com.cn/
请问国内证券(期货)公司有哪些使用 CTP 系统?
【答:】截至到 2012 年 10 月 19 日,期货公司主用系统用户 11 家(部分公司同时部署
一套或多套 CTP 次用系统),期货公司次用系统用户 27 家,证券公司次用系统用户 1家。
CTP 期货公司主用系统用户:中国国际、华泰长城、海通期货、申银万国、上海中
期、广发期货、恒泰期货、美尔雅期货、中证期货、华元期货、瑞龙期货、天鸿期货。
CTP 期货公司次用系统用户:华西期货、华鑫期货、兴业期货、渤海期货、金源期
货、宏源期货、新湖期货、国泰君安、东证期货、南华期货、浙商期货、银河期货、经
易期货、西部期货、光大期货、中信建投、瑞达期货、久恒期货、国海良时、永安期货、
国金期货、方正期货、鲁证期货(新增)、中财期货(新增)、格林期货(新增)、新世纪期货(新增)。
CTP 证券公司次用系统用户:华宝证券。
CTP 中的 BrokerID 是什么意思,在使用 CTP-API 时如何填写?
【答:】CTP 最初设计时考虑了一套 CTP 系统供多家经纪公司使用的情形,CTP 则使用
BrokerID 从业务层面完全隔离不同经纪公司的交易、风控及结算用户的接入。BrokerID
的具体取值请咨询开户的经纪公司。
CTP-API 中的 OrderRef 和 OrderActionRef 是什么意思,在客户端开发时如何填写?
【答:】OrderRef 是 CTP 后台提供给客户端标识一笔报单的字段,客户端可以通过关键
字组(FrontID 、SessionID 、OrderRef)唯一确定一笔报单,客户端在报单发出时未填
写 OrderRef 字段,CTP 后台会自动为该报单的 OrderRef 字段赋值并返回给客户端。
OrderActionRef 与 OrderRef 功能类似,它是提供给客户端来标识一笔撤单。OrderRef 的
数据类型为字符数组,必须是阿拉伯数字字符。OrderRef(OrderActionRef)的取值必须
保证在同一会话内后发送的报(撤)单的 OrderRef(OrderActionRef)值大于之前的最
大值,在开发多线程的客户端时需要特别注意。
第二章CTP-API 技术基础
基于 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)”
后才能开始交易。
什么是动态密码(OneTimePassword),在 ReqUserLogin 请求中如何填写该字段的值?
【答:】动态令牌(时间令牌 TOTP)是 CTP 后台提供给证券(期货)公司投资者网上交
易使用的一种更强的身份验证工具,该功能目前由投资者和证券(期货)公司选择使用。
为 CTP 供应动态令牌的厂商有坚石诚信和飞天诚信。证券(期货)公司购买动态令牌后
将随附的种子文件导入 CTP 后台,并将各令牌及种子分配给到指定的投资者,使用动态
令牌的投资者在登录 CTP 时需要将动态令牌当时显示的字符填写到 OneTimePassword
字段,通过用户名/密码以及动态密码校验后方可登录成功。
CTP 对每秒发送查询数量的限制是多少?
【答:】CTP 仅对查询进行流量限制,对交易指令没有限制。如果有在途的查询,不允
许发新的查询。1 秒钟最多允许发送 1 个查询。返回值“-2”表示“未处理请求超过许
可数”,“-3”表示“每秒发送请求数超过许可数”。
第三章CTP-API 证券交易
CTP 证券交易系统支持哪些业务类型?
【答:】CTP 证券交易系统支持普通股票买卖、ETF 买卖及申购赎回、国债回购卖出、融
资融券等业务类型。
CTP 证券交易系统支持哪些交易指令?
【答:】CTP 证券交易系统支持市价、限价报单及撤单等交易指令。报单(买、卖、申
购及赎回)使用ReqOrderInsert函数,市价单(报单价格条件:THOST_FTDC_OPT_AnyPrice,有效期类型:THOST_FTDC_TC_IOC,价格:不需要),限价单(报单价格条件:
THOST_FTDC_OPT_LimitPrice,有效期类型:THOST_FTDC_TC_GFD,价格:指定价格)。
以下为报单必须输入的字段列表:BrokerID、InvestorID、InstrumentID、ExchangeID、
OrderPriceType、Direction、VolumeTotalOriginal、TimeCondition、VolumeCondition、
ContingentCondition 、ForceCloseReason。
ReqOrderAction 函数完成撤单操作,使用数据序列(BrokerID、InvestorID、OrderRef、
FrontID、SessionID、InstrumentID、ActionFlag=THOST_FTDC_AF_Delete)或(BrokerID、
InvestorID、exchangeID、traderID、OrderLocalID、ActionFlag=THOST_FTDC_AF_Delete)
定位报单完成撤销
第四章CTP-API 期货交易
请问模拟交易系统交易时间?
【答:】国内证券、期货市场正常交易时间均可交易,每个交易日晚 17:30 到凌晨 5:00 也可进行交易,节假日正常情况下都可进行交易。
请问期货模拟环境上期所是非交易状态,可其它交易所没有,为何其它交易所的品种也不动,没有交易了?
【答:】模拟环境只有上期所的交易所系统,其他交易所的合约也是在上期所系统模拟。
我 9 点前就开机了,但不知为何到 9 点 4 分左右期货模拟环境才开始接收到行情数据
【答:】期货模拟环境行情转发在状态从“连续交易”切换到“非交易状态”时会停止行情转发 5 分钟,主要是为了保证在收盘后 5 分钟内行情静止以方便德邦期货提取模拟大赛的客户权益数据。这种状态切换发生在集合竞价结束时,由于“非交易状态”仅一分钟,所以休息5分钟就到了9:04分,而且模拟环境并不像生产环境每天校时(而是一个月),所以就有可能看到的延时会更长。
请问投资者结算结果确认是什么意思?有什么用?
【答:】投资者在登录后首先需要确认自己的结算单(即账单),结算单确认后才可以进行交易操作。客户端可以使用 ReqSettlementInfoConfirm 请求确认结算单,请求时只需
要填写经纪公司代码和投资者代码。查询结算单使用 ReqQrySettlementInfo,不填日期,表示取上一交易日结算单。使用 ReqQrySettlementInfoConfirm 可以查询当天客户结算单确认情况,无记录返回表示当天未确认结算单,为避免客户当天多次登陆多次重复确认结算单,建议在确认前先查询当天是否已经确认,如果客户已经确认过则不需要再次重复确认。
可以在 CTP 上面设置保证金的算法--结算价/昨结算价/成交均价/开仓价四种算法分别都是什么意思?
【答:】保证金算法:历史仓用昨结算价计算,今仓可以选择(成交均价/开仓价/结算价),这里的结算价是指最新价,该项配置由期货公司管理人员在后台进行配置,客户端可以通过API查到该配置的内容(v4.1 版本将支持该项查询,所以现在快期是在前端自己做配置)。
逐笔报单的预冻结资金哪里可以看到?需要自己计算的话如何计算?
【答:】冻结保证金=(成交均价|开仓价|最新价) * 未成交手数 * 合约乘数 * 保证金率(按金额)+ 未成交手数* 保证金率(按手),参与计算的价格选择参照保证金算法设置。
平仓盈亏和持仓盈亏是在计入“可用资金”并应用算法时是汇总后统一计算还是分笔计算?
【答:】汇总计算后再应用相应算法,如“浮盈可开仓”是把所有的持仓浮盈浮亏加总后再计入“可用资金”。
委托单的状态中怎么没有“部成部撤”这个状态呢?“未成交不在队列中”与“撤单”的区别是什么?
【答:】“部成部撤”即“部分成交不在队列中”。CTP 有一个自动挂起标志,如果设置了该标志,那么断线客户的未成交报单将被自动挂起,这时该报单的状态就是“未成交不在队列中”。自动挂起标志是从上期所系统沿用过来的东西,原来设计的“自动挂起”报单,可以撤单也可以通过“激活”指令让报单重新进入队列。目前请客户端将“自动挂起标志”设置为 0,永远不挂起。
OnRtnOrder 每次在登陆时都会把上一次的下单结果再重新返回一次,这样是不是有些不妥啊?
【答:】CTP 的公有流和私有流提供三种订阅方式,TERT_RESTART:从本交易日开始重传,TERT_RESUME:从上次收到的续传,TERT_QUICK:只传送登录后的内容。每次都重传是因为在订阅时(SubscribePrivateTopic/SubscribePublicTopic)选择了 TERT_RESTART 方式。
如果发送一个报单委托价格在停板之外。按道理如果 CTP 校验失败,那么应该从OnRspOrderInsert 返回错误;如果是交易所校验失败,那么应该从 OnErrRtnOrder 来返回错误。现在情况是这两个地方都不返回错误,而是从 OnRtnOrder 返回。然而OnRtnOrder 却没有错误代码,仅是状态改变,没法捕捉异常。其实用户报单后,如果正确根本不会“马上收到报单响应 OnRspOrderInsert”,只有报单被 CTP 拒绝才会收到。
【答:】超出涨跌停板的判断是在交易所处理,所以,CTP 收到报单就新增一条记录,然后收到交易所的 OnErrRtnOrder 后,修改委托表里的记录,触发 OnRtnOrder。OnErrRtnOrder 的作用是:CTP 在检查委托发现错误时,会给发出委托的投资者发出OnRspInsertOrder,同时发出 OnErrRtnOrder 给相关的交易员,所以,作为投资者可以不关心 OnErrRtnOrder。
还有就是 OnRtnOrder 有重复推送的问题。比如发一个单,OnRtnOrder 推了一个“已报”状态回来。然后我开始撤单,撤单一报入,OnRtnOrder 首先又推一个“已报”的状态回来,然后才是“撤消”的状态。重复推送当然不会出错,不过会影响效率。
【答:】投资者发出 1 个操作,都会收到 2 条回报。具体说,1,发出 1 笔委托,2,CTP发出“已提交”状态回报,3,CTP 转发交易所的“未成交”状态回报。下一个动作:1,用户发出撤单;2,CTP 修改 active User,再发出“未成交”状态回报;3,CTP 转发交易所的“已撤单”状态回报。就是 CTP 应答一下,然后交易所又应答一下。都是把对应的委托状态从 OnRtnOrder 推回来。
ReqOrderAction 里面的:报单的挂起、报单的激活、报单的修改这几个功能现在有没有实现?
【答:】目前只支持撤单。
判断一个合约是否可以交易,如果使用 InstLifePhase 判断,那么在上市日和到期日这一天,合约生命周期状态是 1(上市),还是 3(到期)?还是直接用 IsTrading 去判断?
【答:】CTP 交易后台从管理平台或是交易所取得“合约生命周期状态”及“当前是否交易”两个字段的值,由于跟后台的设置关联,且 DCE 及 CZCE 并不会在盘中推送单个合约的状态,因此并不能通过这两个字段及时获得合约是否交易的信息。要查某个合约当天是否可以交易,可以查 IsTrading,要看现在是否可以交易,就看合约状态(仅上期所)或者交易所状态。
银期转账里,业务功能码,应该填什么?
【答:】
101001 银行发起转帐开户
101002 银行发起签约销户
101003 银行发起银行帐号变更
102001 银行发起银行资金转期货
102002 银行发起期货资金转银行
103001 银行发起冲正银行转期货
103002 银行发起冲正期货转银行
104001 银行发起查询资金帐户余额
104003 银行发起查询账户对应关系
104005 完成银行向期货公司发起验证期货投资账号密码交易,并可查询账户信息
104006 银行发起查询期货公司系统状态
105099 银行下传对帐明细文件
202001 期货发起银行资金转期货
202002 期货发起期货资金转银行
203001 期货发起冲正银行转期货
203002 期货发起冲正期货转银行
204002 期货发起查询银行余额
204004 期货发起个人客户查询银期直通车开通情况
204005 期货端发起查询转帐明细
204006 期货公司发起查询银行系统状态
204999 期货端发起查询客户平台当日流水
206001 期货发起银行资金转期货资金(入金)通知
206002 期货发起期货资金转银行资金(出金)通知
901001 个人开通银期直通车
901002 个人解除银期直通车
905001 平台发起期商签到
905002 平台发起期商签退
905003 期货发起同步密钥
请问 CTP 支持哪些下单类型?我在文档里面看到可以直接在报单的时候设置限价单,市价单和触发单。这些好像交易所目前官方还只支持限价单吧? 其他实现都是 CTP 实现的吗?
【答:】CTP 支持国内三家商品交易所正式对外开放的所有下单类型,大商所和郑商所提供套利交易指令和市价单,大商所提供止盈止损等条件单。CTP 在后台提供非交易时段的预埋单,条件单也将在 v4.1 版本中完成。