易盛期货交易软件开发包使用手册版本:1.1作者:创建时间:2012年5月1号修订记录修改时间修改内容修改人说明2011-01-01创建2011-04-12增加1,2,3,4章的详细描述2012-05-01增加部分回调接口目录:易盛期货交易软件开发包使用手册...............................................................................................1修订记录...................................................................................................................................21.易盛开发包基本构架说明...............................................................................................41.1.开发包接口...........................................................................................................41.2.开发包文件说明...................................................................................................42.开发包提供API说明.......................................................................................................42.1.类接口及函数接口...............................................................................................42.2.接口使用约束.......................................................................................................53.开发包使用举例(参见Demo.h,Demo.cpp).....................................................................63.1.使用开发包开发流程...........................................................................................63.2.Demo代码示例....................................................................................................74.报单处理流程...................................................................................................................74.1.字段说明...............................................................................................................74.2.报单流程说明.......................................................................................................84.3.撤单流程说明.......................................................................................................9缩略语.....................................................................................................................................111.易盛开发包基本构架说明1.1.开发包接口EsunnyApi接口采用C++语言开发,提供的接口按照交易功能和行情功能划分,对应为交易类和行情类,开发用户使用本开发包开发交易软件时根据需要实现的功能分别调用对应功能的类接口。1.2.开发包文件说明开发包包括以下五个文件:EsunnyApi.h//开发包对外提供的接口EsunnyApiStruct.h//业务处理数据域定义EsunnyApiType.h//基本数据类型定义EsunnyApiErrcode//函数调用返回错误代码定义EsunnyApi.lib//dll导入库,编译时用到EsunnyApi.dll//api执行库,程序运行时用到2.开发包提供API说明2.1.类接口及函数接口2.1.1.类接口API中提供类一共四个,分别为IEsunnyTradeApi,IEsunnyTradeSpi,IEsunnyQuoteApi和IEsunnyQuoteSpi。其中IEsunnyTradeApi和IEsunnyTradeSpi两个类为交易处理类,提供交易相关功能,IEsunnyQuoteApi和IEsunnyQuoteSpi两个类为行情处理类,提供行情查询功能。类名中以Api结尾的类的成员函数为应用程序开发者的调用函数,实现发起请求的功能。类名中以Spi结尾的类的成员函数需要应用程序开发者重写,这些函数为动态库的回调函数,当数据接收完成时会被调用。2.1.2.函数接口API提供的全局函数接口包括CertEsunnyApi,GetEsunnyApiVersion,CreateEsunnyTradeApi和CreateEsunnyQuoteApi四个,功能如下:CertEsunnyApi开发商认证函数,使用本开发包的开发需要通过认证;GetEsunnyApiVersion获取当前开发包版本;CreateEsunnyTradeApi创建交易处理API实例;CreateEsunnyQuoteApi创建行情处理API实例。2.2.接口使用约束1.易盛针对本开发包的开发者提供认证码,以便于识别不同的开发者,只有通过开发商认证函数认证后,开发包提供的各项功能才能正常使用。2.调用行情处理类连接之前必须保证交易处理类已经登录成功。3.交易连接成功后,需要调用登录请求。4.交易登录成功后,方可获取当前交易日。5.交易登录成功后,方可进行相应的查询,资金,委托,成交,持仓,交易状态,商品,合约,组合合约,每一个查询数据结束后,方可进行后续查询,查询结束由该查询对应的回调函数的参数islast判定(1结束,0未结束)。6.调用动态库接口查询相应数据后,动态库开始进行主动的数据推送,如:资金、委托、成交、持仓、交易状态,回调函数名称中包含Qry的为查询应答,包含Rtn的为推送数据,是在条件满足时动态库主动发起的。7.对于Api调用返回值,bool类型true为成功,int类型0为成功。3.开发包使用举例(参见Demo.h,Demo.cpp)3.1.使用开发包开发流程1.根据交易类和行情类创建自己的交易业务类(CTrade)和行情业务类(CQuote),CTrade类从IEsunnyTradeSpi类继承,重写关注的接口,需要关联IEsunnyTradeApi类。CQuote类需要从IEsunnyQuoteSpi类继承,重写关注的接口,需要关联IEsunnyQuoteApi类。2.创建业务类对象之前,先调用认证函数认证,传入易盛授权的认证码。3.生成行情业务处理类和交易业务处理类的实例,连接至交易服务器。4.进入程序主循环。应用开发可以主动发起请求进行相关业务操作,当有数据接收时动态库会调用对应处理函数;或者有满足条件的业务状态发生变化时,应用开发无需主动发起,动态库会调用该回调函数。图表1业务开发流程3.2.Demo代码示例详见附带DEMO工程。4.报单处理流程4.1.字段说明应用开发通过IEsunnyTradeApi的OrderInsert函数发起报单请求,流程中涉及到的各字段意义如下:1.报单请求号:TEsOrderInsertReqField结构RequestID字段,由客户程序生成,报单流程中交易平台第一次应答(通过IEsunnyTradeSpi::OnRspOrderInsert接口调用)时附带请求号,后续报单状态变化通知消息中本字段无效。2.委托号:TEsOrderNoType结构OrderNo字段,为交易服务器在接受应用开发报单请求后生成,后续所有应答均带有本字段,唯一标识一个报单。3.本地号:TEsLocalNoType结构LocalNo字段,为交易服务器生成,同一期货公司不同席位间互传的报单本字段存在重复,“本地号+会员号+席位号”可以唯一标识一个报单。4.系统号:TEsSystemNoType结构SystemNo字段,报单提交到交易所后,交易所生成的编号。当前交易日内,同一交易所的报单编号唯一,交易所编号+系统号可以唯一标识一个报单。5.成交号:TEsMatchNoType结构MatchNo字段,对于同一交易所买卖方向不同的成交,本字段是唯一标识,交易所+买卖方向+成交号,作为成交回报唯一标识。6.组合成交号:TEsMatchNoType结构CmbMatchNo字段,通过同一组合提交的报单,成交回报的组合成交号相同,主要用于识别哪些持仓为同一组合。4.2.报单流程说明1、用户通过OrderInsert发送报单请求,其中请求域中的RequestID字段需要用户自己生成用于标示发出的不同报单。2、交易API将用户的请求数据封装后发送到易盛交易平台,易盛交易平台收到请求并验证后给用户响应该报单请求。3、交易API收到易盛交易平台的响应数据,进行数据转换后调用OnRspOrderInsert函数通知报单已经处理,对于易盛交易平台处理成功的报单同时会返回委托编号(OrderNo)字段,用户程序在此处将OrderNo和第一步生成的RequestID(应答域的ReqData.RequestID)进行关联,后续该笔委托的状态变化通知通过OrderNo字段来识别本报单,RequestID不再有效。4、易盛交易平台应答用户报单同时,将报单请求提交到报单对应的交易所,交易所收到该笔报单进行内部处理后将处理结果返回给易盛交易平台。5、易盛交易平台收到交易所的处理结果分为成功和失败两种情况;对于成功的报单会生成有效的系统号(SystemNo)字段,失败的报单返回失败原因,不会生成系统号。易盛交易平台将收到的数据再推送给用户程序。6、交易API收到易盛交易平台的推送通知后,调用OnRtnOrder函数通知报单的最新状态。成功的报单会生成有效的系统号(SystemNo)字段,失败的报单生成对应的错误描述(RspHead)。失败的报单后续不会再收到OnRtnOrder调用通知。7、对于交易所成功受理的报单,易盛交易平台等待交易所返回该笔委托的最新状态。收到交易所的委托状态变更通知后,易盛交易平台向用户推送该次变化详情。8、交易API收到易盛交易平台的委托状态变更推送通知后,调用OnRtnOrder函数通知用户该笔委托的最新状态。对于一笔委托OnRtnOrder会调用多次直至最终状态。9、该笔委托成交后,交易所向易盛交易平台发送成交数据,易盛交易平台收到数