1、综合交易平台API技术开发指南第一章CTP产品特性2第二章CTP-API技术基础4第三章CTP-API证券交易9模拟交易系统9证券交易实务9行情接口函数10交易接口函数10第四章CTP-API期货交易10模拟交易系统10期货交易实务11行情接口函数11交易接口函数11上海朗赏信stt/neiiB公司ShanghaiFmuir&sInfarnnatlDinTechnologyCo_.Ltd.第一章CTP产品特性如何获取综合交易平台(ComprehensiveTransactionPlatform以下简称CTP)证券(期货)交易及行情A
2、PI发布包、文档以及开发实例?【答:2群(102497247群共享中发布,请及时获取最新版本。CTP_API开发技术群均遵守实名制规则,求的群成员将不定期予以清除。CTP提供哪些证券(期货)投资者交易客户端软件?【答:CTP向全市场免费开放投资者交易及行情API,并不提供任何投资者使用的交易客户端产品。目前市场上使用的客户端产品都由第三方厂商提供(基于免费开放的API接入CTP)手工交易客户端(如快期:)及程序化交易客户端(如盈佳:)请问国内证券(期货)公司有哪些使用CTP系统?【答:一套或多套CTP次用系统)家。CTP期货公司主用系统用户:中国国际、华泰长城、海通期货、申银万国、上
3、海中期、广发期货、恒泰期货、美尔雅期货、中证期货、华元期货、瑞龙期货、天鸿期货。CTP期货公司次用系统用户:华西期货、华鑫期货、兴业期货、渤海期货、金源期货、宏源期货、新湖期货、国泰君安、东证期货、南华期货、浙商期货、银河期货、经易期货、国金期货、方正期货、鲁证期货(新增)纪期货(新增)CTP证券公司次用系统用户:华宝证券。可编辑范本CTP中的BrokerlD是什么意思,在使用CTP-API时如何填写?【答:CTP最初设计时考虑了一套CTP系统供多家经纪公司使用的情形,CTP则使用BrokerID从业务层面完全隔离不同经纪公司的交易、风控及结算用户的接入。BrokerID的具体取值
4、请咨询开户的经纪公司。CTP中UserID和InversterlD的区别是什么?【答:代码;投资者自己下单时,两者同为投资者代码。CTP-API中的OrderRef和OrderActionRef是什么意思,在客户端开发时如何填写?【答:OrderRef是CTP后台提供给客户端标识一笔报单的字段,客户端可以通过关键字组(FrontID、SessionID、OrderRef)唯一确定一笔报单,客户端在报单发出时未填写OrderRef字段,CTP后台会自动为该报单的OrderRef字段赋值并返回给客户端。OrderActionRef与OrderRef功能类似,它是提供给客户端来标识一笔撤单。
5、OrderRef的数据类型为字符数组,必须是阿拉伯数字字符。OrderRef(OrderActionRef)的取值必须保证在同一会话内后发送的报(撤)单的OrderRef(OrderActionRef)值大于之前的最大值,在开发多线程的客户端时需要特别注意。CTP是否提供Level2行情?【答:CTP期货交易系统仅提供各交易所发布的普通一阶行情。部分证券公司部署的CTP证券交易系统提供levels情,请联系证券公司获取CTP-level2-API发布包及level2行情服务器配置参数。CTP是否提供历史行情,实际交易时需要取历史数据做相应计算,比如atr(30)等,如何处理?是
6、否只能客户端通过别的接口自己补数据?【答:CTP也不提供行情回补机制,因为行情的实时性对CTP的系统延时要求非常高,行情数据的回补逻辑增加的系统延时以及网络资源的消耗限制了其在高速系统内部实现的空可编辑范本间。方式以提高到CTP连接的保障级别。第二章CTP-API技术基础CTP-API库包含哪些文件,分别包含什么内容?【答:错误定义文件error.dtd、交易接口类定义文件(ThostFtdcTraderApi.h)件(ThostFtdcUserApiStruct.h)客户端接口使用的业务数据类型定义文件(ThostFtdcUserApi
7、DataType.h)行情接口库文件thostmduserapi.lib,交易接口库文件(thosttraderapi.lib,thosttraderapi.dll)包含API和SPI类定义,户端回传响应及回报。CTP证券接口库文件基本类似,文件名中使用“SSE”标识为证券接口。10.CTP-API与CTP后台才何种协议通讯,如何通讯?【答:CTP-API使用建立在TCP协议之上FTD协议与CTP后台进行通讯,FTD协议中的所有通讯都基于某个通讯模式。通讯模式实际上就是通讯双方协同工作的方式。CTP-API涉及的通讯模式共有三种:O对话通讯模式,是指由客户端主动发起的通讯请求,
8、该请求被CTP后台接收和处理,并给予响应,如报单、撤单及查询等,这种通讯模式与普通的客户/服务器模式相同。O私有通讯模式,是指CTP后台主动向某个特定的客户端发出的信息,如报单回报、成交回报等。广播通讯模式,是指CTP后台主动向有客户端都发出相同的信息,如合约交易状态通知等。通讯模式和网络的连接不一定存在简单的一对一的关系。也就是说,一个网络连接中可能传送多种不同通讯模式的报文,一种通讯模式的报文也可以在多个不同的连接中传送。CTP-API与CTP后台通讯,不同的通讯模式对应不同的通讯数据流,对话通讯模式对应对话数据流(DialogRsp)和查询数据流(QueryRsp)CTP后台不维
10、实例创建函数(CreateFtdcTraderApi)参数指定,如CreateFtdcTraderApi(".flow")将会在当前目录的flow文件夹存放流文件。客户端无法决定是否生成以上流文件,因此,在开发多CTP-API实例的客户端时需要注意操作系统的文件句柄限制。因此,多账号共用接口实例(或多实例共用流文件)将会造成数据紊乱或缺失。12.基于CTP-API的客户端交易软件在每个交易日开始之前需要执行哪些必要的步骤?【答:1创建API实例(CreateFtdcTraderApi)并为其注册对应的回调接口类的实例(RegisterSpi宀O订阅私有流(
14、动选择CTP后台分配的前置机地址接入CTP交易系统,不再需要客户端直接注册CTP前置地址(RegisterFront)17.CTP是否提供加密手段以保护通过互联网传送的交易数据的安全?【答:方式接入CTP交易系统。客户端选择接入ss前置时使用如下方式注册ss前置地址:可编辑范本【综合交易平台API技术开发指南】RegisterFront("ssl:/ssl前置IP地址或域名端口号”);18.如何接入CTP提供的UDP行情?【答:blsUsingUdp=false)中,参数blsUsingUdp:为行情模式,该参数缺省或置为false寸使用TCP行情,否则为UDP行情
17、不同的dll写入不同流文件。staticCThostFtdcUserApi*CreateFtdcUserApi(constchar*pszFlowPath="",constboolbIsUsingUdp=false);21.请问api是否多线程安全的(linux以及windows平台)?【答:api,sp是不同的线程、可以同时被多个线程调用、上海期货信息技术有限公司,2012第7页共18页这些特性和平台无关。22.测试时发现CThostFtdcMdSpi有个比较严重的问题,就是使用Release(退出清理对象时会出现死机,并且频率很高,怎样解决?【答:
18、template
19、4.使用查询函数时怎样设置查询条件?答:CTP提供了查询函数及查询相应函数,客户端可以使用这些函数向后台查询投资者以及基础数据信息,有记录。如查询合约信息:CThostFtdcQryInstrumentFieldreq;memset(&req,0,sizeof(req);intiResult=pApi->ReqQryInstrument(&req,+iRequestID);这样,在对应的查询响应OnRspQryInstrument中将会获得所有有效的合约。第三章CTP-API证券交易模拟交易系统25.CTP提供证券模拟交易系统供投资者开发、测试试用:
20、交易前置:ctp24-front1.financial-trading-:41205ctp24-front2.financial-trading-:41205行情前置:ctp24-front3.financial-trading-:41213ctp24-front4.financial-trading-:41213经纪公司代码:201126.怎样申请上期技术证券模拟交易系统测试账号?【答:(共10个公用帐号,请勿修改密码)证券交易业务27.CTP证券交易系统支持哪些业务类型?【答:CTP证券交易系统支持普通股票买卖、ETF买卖及申购赎回、国债回购卖出、融资融券等业务类型。28.
21、CTP证券交易系统支持哪些交易指令?【答:CTP证券交易系统支持市价、限价报单及撤单等交易指令。报单(买、卖、申购及赎回)有效期类型:THOST_FTDC_TC_IOC,价格:不需要)限价单(报单价格条件THOST_FTDC_OPT_LimitPrice,有效期类型:THOST_FTDC_TC_GFD,价格:指定价格)以下为报单必须输入的字段列表:BrokerID、InvestorID、InstrumentID、ExchangeID、OrderPriceType、Direction、VolumeTotalOriginal
22、、TimeCondition、VolumeCondition、ContingentCondition、ForceCloseReason。ReqOrderAction函数完成撤单操作,FrontID、SessionID、InstrumentID、ActionFlag=THOST_FTDC_AF_Delete)或(BrokerID、InvestorID、exchangeID、traderID、OrderLocalID、ActionFlag=THOST_FTDC_AF_Delete)定位报单完成撤销。29.CTP证券交易系统中,如何进行ETF的申购
23、赎回?【答:Direction字段填写THOST_FTDC_D_ETFPur(申购)或THOST_FTDC_D_ETFRed(赎回)字段填写THOST_FTDC_OPT_PurchasesETF(申购)或OrderPriceTypeTHOST_FTDC_OPT_RedeemETF(赎回)VolumeTotalOriginal字段需要重点注意,在进行ETF及普通股买卖时该字段单位为份额或股数,在进行ETF申购赎回时,该字段单位为CTP后台ETF文件中配置的最小申购赎回单位对应的ETF份数(上期技术的证券模拟系统该参数配置为:上证所50ETF为100万,深交所13ET
25、易。33.请问期货模拟环境上期所是非交易状态,不动,没有交易了?【答:模拟环境只有上期所的交易所系统,34.我9点前就开机了,但不知为何到9点4分左右期货模拟环境才开始接收到行情数据【答:转发5分钟,的客户权益数据。这种状态切换发生在集合竞价结束时,由于“非交易状态”仅一分钟,所以休息5分钟就到了9:分,所以就有可能看到的延时会更长。期货交易业务行情接口函数交易接口函数上海期货信息技术有限公司,2012CTP的35.下单交易是否需要经过期货公司的服务器?期货公司服务器坏了是否会影响到正常交易?【答:CTP是一套多期货公司共用的交易、结算系统,全部系统部署在上期技术的机房
26、内。因此,期货公司的服务器状况对其没有任何影响;而且,CTP系统是由上期技术统一运行维护,所以稳定性应该没有问题!36.我们搞接口与其他的软件连接,答:CTP交易、风控和结算子系统完全独立,现在公开发布的是交易接口。开销户、风控及结算等管理工作由期货公司管理人员通过上期技术提供给期货公司的CTP管理平台和风险控制客户端完成。37.请问投资者结算结果确认是什么意思?有什么用?【答:行交易操作。客户端可以使用ReqSettlementInfoConfirm请求确认结算单,请求时只需要填写经纪公司代码和投资者代码。表示取上一交易日结算单。确认情况,结算单,复确认。38.可以设置止损否,限
27、价止损、市价止损及gtc止损之类的?【答:还不支持过夜挂单!CTP目前也只是7:30起动系统,早的话8:00可以挂预埋单了。39.可以在CTP上面设置保证金的算法-结算价/昨结算价/成交均价/开仓价四种算法分别都是什么意思?【答:价)端可以通过API查到该配置的内容V4.1版本将支持该项查询,端自己做配置)40.逐笔报单的预冻结资金哪里可以看到?需要自己计算的话如何计算上海期货信息技术有限公司,2012【综合交易平台API技术开发指南】【答:(按金额)+未成交手数*保证金率(按手),参与计算的价格选择参照保证金算法设置。41.可提比例怎么查,基本保证金是什么?【答:提比例
28、”基本保证金”“保底资金”“基本准备金”TThostFtdcMpoeneRyeTsyerve。42.平仓盈亏和持仓盈亏是在计入算?【答:后再计入“可用资金”43.下午开盘前是否有集合竞价?集合竞价时是否会收到行情更新?集合竞价时是否可以发市价单?【答:被交易所认为没有对手方,作为交易不成功来自动撤单。44.请问报单状态中的在队列中是什么意思?【答:45.真实环境中的OnRtnDepthMarketData()返回的成交金额Turnover及当日均价AveragePrice两个字段是不是不正确?【答:46.查询历史平仓明细是哪个函数?【答:客户端需要历史交易记录可以通过查询
29、历史结算单的方式获取。交易所当日均价成交金额郑商所正确乘以合约乘数大商所除以合约乘数正确上期所除以合约乘数正确47.通过ReqQryInstrumentMarginRate获取保证金率时,在返回的数据中,是不是全部都是绝对值?如果是相对交易所的费率的话,那么交易所保证金率通过什么方法获取?【答:ReqQrylnstrumentMarginRate返回的保证金率已经包含了交易所保证金率及保证金率调整,也就是说返回最终的比率,即绝对值。48.持仓查询记录中的昨持仓是今天开盘前的一个初始值,不会因为平昨或者平仓而减少。当前时侯的昨持仓=总持仓-今持仓。YdPosition
30、:=Position-TodayPosition。49.0nHeartBeatWarning在什么情况下发生?我试了自己断线,路由器断线,狂开bt下载都没发生过这个事件。【答:50.委托单的状态中怎么没有“部成部撤”这个状态呢?“未成交不在队列中”与“撤单”的区别是什么?【答:“部成部撤”即“部分成交不在队列中”CTP有一个自动挂起标志,如果设置了该标志,那么断线客户的未成交报单将被自动挂起,这时该报单的状态就是“未成交不在队列中”。自动挂起标志是从上期所系统沿用过来的东西,原来设计的“自动挂起”报单,可以撤单也可以通过“激活”指令让报单重新进入队列。目前请客户端将“自动挂起
31、标志”设置为0,永远不挂起。51.为什么每次连接服务器时,最大报单引用(MaxOrderRef)都是1开始的?【答:FrontlD+SessionlD+0rderRef,作为主键,当FrontlD+SessionlD变更后MaxOrderRef将重置。52.报单引用是每发一次单就要递增,还是该SESSION内一直使用LONGIN时取得的最大报单引用?【答:53.OnRtnOrder每次在登陆时都会把上一次的下单结果再重新返回一次,这样是不是有些不妥啊?【答:CTP的公有流和私有流提供三种订阅方式,上海期货信息技术有限公司,2012TERT_RESUME:
34、送当然不会出错,不过会影响效率。【答:发出“已提交”状态回报,3,CTP转发交易所的“未成交”状态回报。下一个动作:1用户发出撤单;2,CTP修改activeUser,再发出“未成交”状态回报;3,CTP转发交易所的“已撤单”状态回报。就是CTP应答一下,然后交易所又应答一下。都是把对应的委托状态从OnRtnOrder推回来。57.从OnRtnOrder中有没有办法区分这是从CTP返回的包还是从交易所返回的包?【答:58.我想请教,这样我好下预埋单。【答:OnRtnInstrumentStatus会通知当前交易所状态变化59.哪些报单状态是报单的最终状态,不会再改变了的?
35、【答:】以下状态为报单的最终状态:THOST_FTDC_OST_AllTraded、THOST_FTDC_OST_CanceledTHOST_FTDC_OST_NoTradeNotQueueingTHOST_FTDC_OST_PartTradedNotQueueing。60.ReqOrderAction里面的:报单的挂起、报单的激活、报单的修改这几个功能现在有没有实现?【答:61.平今仓的时候,对大连或者郑州使用CloseToday是否有问题?【答:62.判断一个合约是否可以交易,如果使用InstLifePhase判断,那么在上市日和到期日这一天,