http://blog.csdn.net/grafx/article/details/54411872

http://weibo.com/p/2304187dfd20dd0102vl1y

http://www.cnblogs.com/eecs/p/4158526.html

简单介绍一下MdApi和TraderApi的一般工作流程,这里不会包含太多细节,仅仅是让读者有一个概念。

MdApi 创建MdSpi对象

调用MdApi类以Create开头的静态方法,创建MdApi对象

调用MdApi对象的RegisterSpi方法注册MdSpi对象的指针

调用MdApi对象的RegisterFront方法注册行情柜台的前置机地址

调用MdApi对象的Init方法初始化到前置机的连接,连接成功后会通过MdSpi对象的OnFrontConnected回调函数通知用户

等待连接成功的通知后,可以调用MdApi的ReqUserLogin方法登陆,登陆成功后会通过MdSpi对象的OnRspUserLogin通知用户

登陆成功后就可以开始订阅合约了,使用MdApi对象的SubscribeMarketData方法,传入参数为想要订阅的合约的代码

订阅成功后,当合约有新的行情时,会通过MdApi的OnRtnDepthMarketData回调函数通知用户

用户的某次请求发生错误时,会通过OnRspError通知用户。

MdApi同样提供了退订合约、登出的功能,一般退出程序时就直接杀进程(不太安全)

TraderApi TraderApi和MdApi类似,以下仅仅介绍不同点

注册TraderSpi对象的指针后,需要调用TraderApi对象的SubscribePrivateTopic和SubscribePublicTopic方法去选择公开和私有数据流的重传方法(这一步MdApi没有)

对于期货柜台而言(CTP、恒生UFT期货等),在每日第一次登陆成功后需要先查询前一日的结算单,等待结算单查询结果返回后,确认结算单,才可以进行后面的操作;而证券柜台LTS无此要求

上一步完成后,用户可以调用ReqQryInstrument的方法查询柜台上所有可以交易的合约信息(包括代码、中文名、涨跌停、最小价位变动、合约乘数等大量细节),一般是在这里获得合约信息列表后,再去MdApi中订阅合约;经常有人问为什么在MdApi中找不到查询可供订阅的合约代码的函数,这里尤其要注意,必须通过TraderApi来获取

当用户的报单、成交状态发生变化时,TraderApi会自动通过OnRtnOrder、OnRtnTrade通知用户,无需额外订阅