《综合交易平台API技术开发指南.doc》由会员分享,可在线阅读,更多相关《综合交易平台API技术开发指南.doc(19页珍藏版)》请在三一办公上搜索。
1、【综合交易平台API技术开发指南】 综合交易平台API技术开发指南 第一章 CTP产品特性. 2 第二章 CTP-API技术基础 . 4 第三章 CTP-API证券交易 . 9 模拟交易系统 . 9 证券交易实务 . 9 行情接口函数 . 10 交易接口函数 . 10 第四章 CTP-API期货交易 . 10 模拟交易系统 . 10 期货交易实务 . 11 行情接口函数 . 11 交易接口函数 . 11 上海期货信息技术有限公司,2012 第 1 页 共 18 页 【综合交易平台API技术开发指南】 第一章CTP产品特性 如何获取综合交易平台(Comprehensive Transaction
2、 Platform 以下简称CTP)证券(期 货)交易及行情API发布包、文档以及开发实例? 【答: 2群()群共享中发布,请及时获取最新版本。CTP_API开发技术群均遵守实 名制规则, 求的群成员将不定期予以清除。 CTP提供哪些证券(期货)投资者交易客户端软件? 【答: CTP向全市场免费开放投资者交易及行情API,并不提供任何投资者使用的交易 客户端产品。目前市场上使用的客户端产品都由第三方厂商提供(基于免费开放的API接入CTP) 手工交易客户端(如快期:http:/winnerfutures./) 请问国证券(期货)公司有哪些使用CTP系统? 【答: 一套或多套CTP次用系统) 家
3、。 CTP期货公司主用系统用户:中国国际、华泰长城、海通期货、申银万国、上海中 期、广发期货、恒泰期货、美尔雅期货、中证期货、华元期货、瑞龙期货、天鸿期货。 CTP期货公司次用系统用户:华西期货、华鑫期货、兴业期货、渤海期货、金源期 货、宏源期货、新湖期货、国泰君安、东证期货、南华期货、浙商期货、银河期货、经 易期货、 国金期货、方正期货、鲁证期货(新增) 纪期货(新增) CTP证券公司次用系统用户:华宝证券。 上海期货信息技术有限公司,2012 第 2 页 共 18 页 【综合交易平台API技术开发指南】 CTP中的BrokerID是什么意思,在使用CTP-API时如何填写? 【答: CTP
4、最初设计时考虑了一套CTP系统供多家经纪公司使用的情形,CTP则使用BrokerID从业务层面完全隔离不同经纪公司的交易、风控及结算用户的接入。BrokerID的具体取值请咨询开户的经纪公司。 CTP中UserID和InversterID的区别是什么? 【答: 代码;投资者自己下单时,两者同为投资者代码。 CTP-API中的OrderRef和OrderActionRef是什么意思,在客户端开发时如何填写? 【答: OrderRef是CTP后台提供给客户端标识一笔报单的字段,客户端可以通过关键 字组(FrontID 、SessionID 、OrderRef)唯一确定一笔报单,客户端在报单发出时未
5、填 写OrderRef字段,CTP后台会自动为该报单的OrderRef字段赋值并返回给客户端。OrderActionRef与OrderRef功能类似,它是提供给客户端来标识一笔撤单。OrderRef的 数据类型为字符数组,必须是阿拉伯数字字符。OrderRef(OrderActionRef)的取值必须 保证在同一会话后发送的报(撤)单的OrderRef(OrderActionRef)值大于之前的最 大值,在开发多线程的客户端时需要特别注意。 CTP是否提供Level2行情? 【答: CTP期货交易系统仅提供各交易所发布的普通一阶行情。部分证券公司部署的CTP证券交易系统提供level2行情,请
6、联系证券公司获取CTP-level2-API发布包及level2行情服务器配置参数。 CTP是否提供历史行情,实际交易时需要取历史数据做相应计算,比如atr(30)等,如 何处理?是否只能客户端通过别的接口自己补数据? 【答: CTP也不提供行情回补机制,因为行情的实时性对CTP的系统延时要求非常高,行情数 据的回补逻辑增加的系统延时以及网络资源的消耗限制了其在高速系统部实现的空 上海期货信息技术有限公司,2012 第 3 页 共 18 页 【综合交易平台API技术开发指南】 间。 方式以提高到CTP连接的保障级别。 第二章CTP-API技术基础 CTP-API库包含哪些文件,分别包含什么容?
7、 【答: 错误定义文件 error.dtd、交易接口类定义文件(ThostFtdcTraderApi.h) 件 (ThostFtdcUserApiStruct.h) 客 户 端 接 口 使 用 的 业 务 数 据 类 型 定 义 文 件 (ThostFtdcUserApiDataType.h) 行情接口库文件 thostmduserapi.lib,交易接口库文件(thosttraderapi.lib,thosttraderapi.dll) 包含API和SPI类定义, 户端回传响应及回报。 CTP证券接口库文件基本类似,文件名中使用“SSE”标识为证券接口。 10. CTP-API与CTP后台才
8、何种协议通讯,如何通讯? 【答: CTP-API使用建立在TCP协议之上FTD协议与CTP后台进行通讯,FTD 协议中 的所有通讯都基于某个通讯模式。通讯模式实际上就是通讯双方协同工作的方式。CTP-API涉及的通讯模式共有三种:对话通讯模式,是指由客户端主动发起的通讯请 求,该请求被CTP后台接收和处理,并给予响应,如报单、撤单及查询等,这种通讯模 式与普通的客户/服务器模式相同。私有通讯模式,是指CTP后台主动向某个特定的 客户端发出的信息,如报单回报、成交回报等。广播通讯模式,是指CTP后台主动向 有客户端都发出相同的信息,如合约交易状态通知等。 通讯模式和网络的连接不一定存在简单的一对
9、一的关系。也就是说,一个网 络连接中可能传送多种不同通讯模式的报文,一种通讯模式的报文也可以在多个 不同的连接中传送。 CTP-API与CTP后台通讯,不同的通讯模式对应不同的通讯数据流,对话通讯模式 对应对话数据流(DialogRsp)和查询数据流(QueryRsp) CTP后台不维护对话数据流 上海期货信息技术有限公司,2012 第 4 页 共 18 页 【综合交易平台API技术开发指南】 (查询数据流)的状态,通讯故障时,对话数据流(查询数据流)会重置,通讯途中的 数据可能会丢失。 私有通讯模式对应私有数据流(Private) 后台维护每个登录用户的私有流,在一个交易日,CTP-API与
10、CTP后台断线后恢复连 接时,或断线期间(resume)的私有数据流。 广播通讯模式对应公共数据流(Public) 可靠的数据流。 11. CTP-API的实例会在客户端生成哪些流文件?如何指定流文件存放路径? 【答: 实例(DialogRsp.con,Private.con,Public.con,QueryRsp.con,TradingDay.con) 文件的存放路径都是通过接口实例创建函数(CreateFtdcTraderApi)参 数指定,如CreateFtdcTraderApi(.flow)将会在当前目录的flow文件夹存放流文件。 客户端无法决定是否生成以上流文件,因此,在开发多CT
11、P-API实例的客户端时需要注 意操作系统的文件句柄限制。 因此,多账号共用接口实例(或多实例共用流文件)将会造成数据紊乱或缺失。 12. 基于CTP-API的客户端交易软件在每个交易日开始之前需要执行哪些必要的步骤? 【答: 1创建API实例(CreateFtdcTraderApi)并为其注册对应的回调接口类的实例 (RegisterSpi) 订 阅 私 有 流 (SubscribePrivateTopic) 订 阅 公 有 流 (SubscribePublicTopic)注册名字服务器网络地址(RegisterNameServer)或注册前 置机网络地址(RegisterFront)初始化
12、API与CTP前置服务器连接(Init) 功后回调OnFrontConnected发起客户端认证请求(ReqAuthenticate) 结果由OnRspAuthenticate返回;在CTP后台开启强制客户端认证(或客户端在本次会 话主动发起认证)后,只有通过客户端认证才能接入CTP后台发起用户登录请求 (ReqUserLogin) 户端在当前交易日必须成功执行一次 后才能开始交易。 上海期货信息技术有限公司,2012 第 5 页 共 18 页 【综合交易平台API技术开发指南】 13. CTP的客户端怎样实现对代理服务器的支持? 【答: CTP的API提供了对代理服务器的支持,包括socks
13、4、socks4a及socks5,客户 端开发时只需通过传递给API不同的连接字符串就可实现,例如: RegisterFront(socks5:/ IP地址或域名:端口号/user:pass127.0.0.1:10001); 14. 什么是动态密码(OneTimePassword) 【答: 易使用的一种更强的身份验证工具, 为CTP供应动态令牌的厂商有坚石诚信和飞天诚信。证券(期货)公司购买动态令牌后 将随附的种子文件导入CTP后台, 令牌的投资者在登录CTP时需要将动态令牌当时显示的字符填写到OneTimePassword字段,通过用户名/密码以及动态密码校验后方可登录成功。 15. 什么是
14、客户端认证,怎样获取认证码(AuthCode)? 【答: 端产品接入CTP后台进行交易。 入指定的证券(期货)公司CTP交易系统之前,必须向该公司提交用户端产品信息 (UserProductInfo) 并 获 得 认 证 码 (AuthCode) 之 后 在 发 起 客 户 端 认 证 请 求 时 (ReqAuthenticate)填写正确的用户端产品信息及对应的认证码即可完成客户端认证。 16. CTP的名字服务器是做什么用的,如何使用? 【答: 名字服务器(RegisterNameServer)自动选择CTP后台分配的前置机地址接入CTP交易 系统,不再需要客户端直接注册CTP前置地址(R
15、egisterFront) 17. CTP是否提供加密手段以保护通过互联网传送的交易数据的安全? 【答: 方式接入CTP交易系统。客户端选择接入ssl前置时使用如下方式注册ssl前置地址: 上海期货信息技术有限公司,2012 第 6 页 共 18 页 【综合交易平台API技术开发指南】 RegisterFront(ssl:/ ssl前置IP地址或域名:端口号); 18. 如何接入CTP提供的UDP行情? 【答: bIsUsingUdp=false) 中,参数bIsUsingUdp:为行情模式,该参数缺省或置为false时使用TCP行情,否则为UDP行情。无论使用TCP或是UDP行情,都必须注册
16、相对应的TCP或UDP行情服务器地址。一般来说,CTP的普通行情前置都为TCP行情服务器,使用UDP行情服务器需要向证券(期货)公司申请,且仅限专线或网接入的投资者使用。 在注册行情前置服务器时,无论是tcp还是udp,都必须使用RegisterFront(tcp:/行情前置服务器IP地址或域名:端口号)的格式,因为udp传输存在不可靠性,所以在 登录、订阅及接收第一次行情时仍然使用tcp方式;并且无需为udp方式提供配置节点 参数,udp仍然使用相同的地址和端口号。 19. CTP对每秒发送查询数量的限制是多少? 【答: CTP仅对查询进行流量限制,对交易指令没有限制。如果有在途的查询,不允
17、 许发新的查询。1秒钟最多允许发送1个查询。返回值“-2”表示“未处理请求超过许 可数” “-3”表示“每秒发送请求数超过许可数” 20. 程序使用TradeApi和MdApi,并且把这2个dll放在同一个目录下。程序再次启动后, 如果某个api采用Resume模式订阅公有流/私有流,就会去参考相关的本地流文件。可 能会导致数据异常? 【答: 对方写下的流文件。程序再次启动时,TradeApi可能去参考MdApi写下的流文件,所以 导致数据流不连续。解决方法:如果一定要把2个dll放在相同的目录下,可以在创建api时指定流文件的路径。使得不同的dll写入不同流文件。 static CThost
18、FtdcUserApi *CreateFtdcUserApi(const char *pszFlowPath = , const bool bIsUsingUdp=false); 21. 请问api是否多线程安全的(linux以及windows平台)? 【答: api,spi是不同的线程、可以同时被多个线程调用、 上海期货信息技术有限公司,2012 第 7 页 共 18 页 【综合交易平台API技术开发指南】 这些特性和平台无关。 22. 测试时发现CThostFtdcMdSpi有个比较严重的问题,就是使用Release()退出清理对象时 会出现死机,并且频率很高,怎样解决? 【答: temp
19、late void CUserApiEnv: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提供了查询函数及查询
20、相应函数,客户端可以使用这些函数向后台查询投 资者以及基础数据信息, 上海期货信息技术有限公司,2012 第 8 页 共 18 页 【综合交易平台API技术开发指南】 有记录。如查询合约信息: CThostFtdcQryInstrumentField req; memset(&req, 0, sizeof(req); int iResult = pApi-ReqQryInstrument(&req, +iRequestID); 这样,在对应的查询响应OnRspQryInstrument中将会获得所有有效的合约。 第三章CTP-API证券交易 模拟交易系统 25. CTP提供证券模拟交易系统供投
21、资者开发、测试试用: 交易前置: 行情前置: ctp24-front1.financial-trading-platform.:41205 ctp24-front2.financial-trading-platform.:41205 ctp24-front3.financial-trading-platform.:41213 ctp24-front4.financial-trading-platform.:41213 经纪公司代码:2011 26. 怎样申请上期技术证券模拟交易系统测试账号? 【答: (共10个公用帐号,请勿修改密码) 证券交易业务 27. CTP证券交易系统支持哪些业务类型?
22、 【答: CTP证券交易系统支持普通股票买卖、ETF买卖及申购赎回、国债回购卖出、融 资融券等业务类型。 28. CTP证券交易系统支持哪些交易指令? 【答: CTP证券交易系统支持市价、限价报单及撤单等交易指令。报单(买、卖、申 购及赎回) 上海期货信息技术有限公司,2012 第 9 页 共 18 页 【综合交易平台API技术开发指南】 有 效 期 类 型 :THOST_FTDC_TC_IOC, 价 格 : 不 需 要 ) 限 价 单 ( 报 单 价 格 条 件 :THOST_FTDC_OPT_LimitPrice,有效期类型:THOST_FTDC_TC_GFD,价格:指定价格) 以下为报单
23、必须输入的字段列表:BrokerID、InvestorID、InstrumentID、ExchangeID、OrderPriceType、Direction、VolumeTotalOriginal、TimeCondition、VolumeCondition、ContingentCondition 、ForceCloseReason。 ReqOrderAction函数完成撤单操作, FrontID、SessionID、InstrumentID、ActionFlag=THOST_FTDC_AF_Delete)或(BrokerID、InvestorID、exchangeID、traderID、Ord
24、erLocalID、ActionFlag=THOST_FTDC_AF_Delete) 定位报单完成撤销。 29. CTP证券交易系统中,如何进行ETF的申购赎回? 【答: Direction字段填写THOST_FTDC_D_ETFPur(申购)或THOST_FTDC_D_ETFRed(赎回) 字段填写 OrderPriceTypeTHOST_FTDC_OPT_PurchasesETF( 申 购 ) 或THOST_FTDC_OPT_RedeemETF(赎回) VolumeTotalOriginal字段需要重点注意,在进行ETF及普通股买卖时该字段单位为份额或股数,在进行ETF申购赎回时,该字段单
25、位为CTP后台ETF文件中配置的最小申购赎回单位对应的ETF份数(上期技术的证券模拟系 统该参数配置为:上证所50ETF为100万,深交所13ETF为10万) 另外,ETF申赎不能撤单,当日申购的不能当日赎回。 行情接口函数 交易接口函数 第四章CTP-API期货交易 模拟交易系统 30. CTP提供期货模拟交易系统供投资者开发、测试试用: 交易前置: asp-sim2-front1.financial-trading-platform.:26205 上海期货信息技术有限公司,2012 第 10 页 共 18 页 【综合交易平台API技术开发指南】 行情前置: asp-sim2-md1.fin
26、ancial-trading-platform.:26213 经纪公司代码:2030 31. 怎样申请期货模拟交易系统测试账号? 【答: 货公司向上期技术服务台提出申请。 32. 请问模拟交易系统交易时间? 【答: 00也可进行交易,节假日正常情况下都可进行交易。 33. 请问期货模拟环境上期所是非交易状态, 不动,没有交易了? 【答: 模拟环境只有上期所的交易所系统, 34. 我9点前就开机了,但不知为何到9点4分左右期货模拟环境才开始接收到行情数据 【答: 转发5分钟, 的客户权益数据。这种状态切换发生在集合竞价结束时,由于“非交易状态”仅一分钟, 所以休息5分钟就到了9:分, 所以就有可
27、能看到的延时会更长。 期货交易业务 行情接口函数 交易接口函数 35. 下单交易是否需要经过期货公司的服务器?期货公司服务器坏了是否会影响到CTP的 上海期货信息技术有限公司,2012 第 11 页 共 18 页 【综合交易平台API技术开发指南】 正常交易? 【答: CTP是一套多期货公司共用的交易、结算系统,全部系统部署在上期技术的机 房。因此,期货公司的服务器状况对其没有任何影响;而且,CTP系统是由上期技术 统一运行维护,所以稳定性应该没有问题! 36. 我们搞接口与其他的软件连接, 【答: CTP交易、风控和结算子系统完全独立,现在公开发布的是交易接口。开销户、 风控及结算等管理工作
28、由期货公司管理人员通过上期技术提供给期货公司的CTP管理 平台和风险控制客户端完成。 37. 请问投资者结算结果确认是什么意思?有什么用? 【答: 行交易操作。客户端可以使用ReqSettlementInfoConfirm请求确认结算单,请求时只需 要填写经纪公司代码和投资者代码。 表示取上一交易日结算单。 确认情况, 结算单, 复确认。 38. 可以设置止损否,限价止损、市价止损及gtc止损之类的? 【答: 还不支持过夜挂单!CTP目前也只是7:30起动系统,早的话8:00可以挂预埋单了。 39. 可以在CTP上面设置保证金的算法-结算价/昨结算价/成交均价/开仓价 四种算法分别都是什么意思
29、? 【答: 价) 端可以通过查到该配置的容 v4.1版本将支持该项查询, 端自己做配置) 40. 逐笔报单的预冻结资金哪里可以看到?需要自己计算的话如何计算? 上海期货信息技术有限公司,2012 第 12 页 共 18 页 【综合交易平台API技术开发指南】 【答: (按金额)+ 未成交手数* 保证金率(按手),参与计算的价格选择参照保证金算法设置。 41. 可提比例怎么查,基本保证金是什么? 【答: 提比例” 基本保证金” “保底资金” “基本准备金” TThostFtdcMoneyType Reserve。 42. 平仓盈亏和持仓盈亏是在计入 算? 【答: 后再计入“可用资金” 43. 下
30、午开盘前是否有集合竞价?集合竞价时是否会收到行情更新?集合竞价时是否可以 发市价单? 【答: 被交易所认为没有对手方,作为交易不成功来自动撤单。 44. 请问报单状态中的在队列中是什么意思? 【答: 45. 真 实 环 境 中 的OnRtnDepthMarketData()返 回 的 成 交 金 额Turnover及 当 日 均 价AveragePrice两个字段是不是不正确? 【答: 46. 查询历史平仓明细是哪个函数? 【答: 客户端需要历史交易记录可以通过查询历史结算单的方式获取。 上海期货信息技术有限公司,2012 第 13 页 共 18 页 交易所 当日均价 成交金额 郑商所 正确
31、乘以合约乘数 大商所 除以合约乘数 正确 上期所 除以合约乘数 正确 【综合交易平台API技术开发指南】 47. 通过ReqQryInstrumentMarginRate获取保证金率时,在返回的数据中,是不是全部都是 绝对值?如果是相对交易所的费率的话,那么交易所保证金率通过什么方法获取? 【答: ReqQryInstrumentMarginRate返回的保证金率已经包含了交易所保证金率及保证 金率调整,也就是说返回最终的比率,即绝对值。 48. 持仓查询记录中的昨持仓是今天开盘前的一个初始值,不会因为平昨或者平仓而减少。 当前时侯的昨持仓=总持仓-今持仓。YdPosition := Posi
32、tion - TodayPosition。 49. OnHeartBeatWarning 在什么情况下发生?我试了自己断线,路由器断线,狂开bt下载 都没发生过这个事件。 【答: 50. 委托单的状态中怎么没有“部成部撤”这个状态呢?“未成交不在队列中”与“撤单”的区别 是什么? 【答: “部成部撤”即“部分成交不在队列中” CTP有一个自动挂起标志,如果设置 了该标志,那么断线客户的未成交报单将被自动挂起,这时该报单的状态就是“未成交 不在队列中”。自动挂起标志是从上期所系统沿用过来的东西,原来设计的“自动挂起”报单,可以撤单也可以通过“激活”指令让报单重新进入队列。目前请客户端将“自动挂
33、起标志”设置为0,永远不挂起。 51. 为什么每次连接服务器时,最大报单引用(MaxOrderRef)都是1开始的? 【答: FrontID + SessionID + OrderRef,作为主键,当FrontID + SessionID变更后MaxOrderRef将重置。 52. 报单引用是每发一次单就要递增,还是该SESSION一直使用LONGIN时取得的最大报 单引用? 【答: 53. OnRtnOrder 每次在登陆时都会把上一次的下单结果再重新返回一次,这样是不是有些 不妥啊? 【答: CTP的公有流和私有流提供三种订阅方式, 上海期货信息技术有限公司,2012 第 14 页 共 1
34、8 页 【综合交易平台API技术开发指南】 TERT_RESUME:从上次收到的续传,TERT_QUICK:只传送登录后的容。每次都重传是因 为在订阅时(SubscribePrivateTopic/SubscribePublicTopic)选择了TERT_RESTART方式。 54. 我查某个合约的手续费, 个别合约是按合约设置的? 【答: 置,后台没有对该合约进行特殊的设置。 55. 如果发送一个报单委托价格在停板之外。按道理如果CTP校验失败,那么应该从OnRspOrderInsert返回错误;如果是交易所校验失败,那么应该从OnErrRtnOrder来返 回错误。现在情况是这两个地方都不
35、返回错误,而是从OnRtnOrder返回。然而OnRtnOrder却没有错误代码,仅是状态改变,没法捕捉异常。其实用户报单后,如果 正确根本不会 【答: 然后收到交易所的OnErrRtnOrder后,修改委托表里的记录,触发OnRtnOrder。OnErrRtnOrder的作用是:CTP在检查委托发现错误时,会给发出委托的投资者发出OnRspInsertOrder,同时发出OnErrRtnOrder给相关的交易员,所以,作为投资者可以不 关心OnErrRtnOrder。 56. 还有就是OnRtnOrder有重复推送的问题。 状态回来。然后我开始撤单,撤单一报入,OnRtnOrder首先又推一个“已报”的状态 回来,然后才是“撤消”的状态。重复推送当然不会出错,不过会影响效率。 【答: 发出“已提交”状态回报,3,CTP转发交易所的“未成交”状态回报。 下一个动作:1,用户发出撤单;2,CTP修改active User,再发出“未成交”状态回报;3,CTP转发交易所的“已撤单”状态回报。就是CTP应答一下,然后交易所又应答一