分享

STEP协议解读

 昵称32345233 2016-06-16
STEP协议解读
guibin.beijing@gmail.com

0. STEP协议是什么?
STEP: Securities Trading Exchange Protocol,是中国金融行业数据通信标准JR/T0022-2004,目前被深圳交易所采用,作为Leve II数据向信息服务商分发的数据的标准协议。本文讨论的内容是基于STEP 1.0.0。

1. STEP 1.0.0(SZ)支持的重传消息类型
目前STEP 1.0.0 协议支持4种重传的消息。包括证券信息消息StockInfo,逐笔委托消息Order,逐笔成交消息Trade,公告消息Bulletin,证券状态消息StockStatus。
不支持重传的消息包括:行情快照Snapshot消息和指数快照消息Index。
目前STEP1.0.0协议不提供数据的消息包括委托排名OrderRank消息,成交排名TradeRank消息。

2. STEP1.0.1(SS)支持的重传消息类型
行情快照MarketData,OrderRanking,TransactionRankingByIndustry,SingleOrderCancellationRanking,ConsolidatedOrderCancellationRanking, OrderQueue,指数快照Index,MarketOverview,Reference,Announcement

3. STEP1.0.0(SZ)数据重传方法
证券信息消息StockInfo重传通过指定记录索引重传。
逐笔委托消息Order和逐笔成交消息Trade重传通过指定证券集代号记录索引进行重传。
公告消息Bulletin重传通过指定公告索引进行重传。

数据重传需要客户端和服务器端之间建立另外一个TCP数据通道。重传完毕之后,客户端就可以断开同服务器之间的连接了。

什么是记录索引?
StockInfo消息中的记录索引是消息体body的第一个字段RecNo(8926)。

什么是证券集代号和记录索引?
Order消息中消息体body前两个字段SetNo(10115)和RecNo(8926)分别是证券集代号和委托索引。
Trade消息中消息体body前两个SetNo(10115)和RecNo(8926)和Order消息一样,分别是证券集代号和成交索引。

什么是公告索引?
Bulletin消息中消息体body第一个字段BulletinID(10124),是公告的唯一标识。

4. STEP1.0.1(SSE)数据重传方法
总体上SSE恢复数据的方式分为恢复个别消息或者恢复全部消息两种方式。
a) 增量恢复个别消息(Incremental rebuild)
对于消息体第一个字段是MsgSeqID,并且不为-1的7种消息(行情快照MarketData,OrderRanking,TransactionRankingByIndustry,SingleOrderCancellationRanking,ConsolidatedOrderCancellationRanking, OrderQueue,指数快照Index,MarketOverview)支持按照MsgSeqID为标识恢复数据。
逐笔成交Transaction消息按照TradeIndex为标识恢复数据。
b) 重新恢复全部行情类消息(Full image rebuild)
这种恢复消息方式不适用于行情快照MarketData和market depth类数据。除此之外的其他行情类数据均适用。
c) 重新恢复全部Reference消息
d) 重新恢复全部公告信息

5. 重传的交互过程
a) 客户端向服务器端建立新的TCP连接,并发送Resend消息申请重传。
b) 服务器端返回给客户端响应的数据记录。
c) 所有数据返回给客户端后,最后返回一条Resend消息给客户端,此Resend消息的作用是告诉客户端本次重传操作的状态(全部成功?没有全部成功?失败或者拒绝重传请求?目前不能重传?)。

6. QuickFix/J中补数据逻辑和STEP协议的差别
Fix协议规定,仅仅根据消息头中MsgSeqNum就可以再次请求丢失的消息,而STEP使用了扩展的body中的一个或者多个字段来请求丢失的消息。
Fix中使用ResendRequest消息请求丢失的消息,在ResendRequest中填入两个必选参数MsgSeqNum的起始和结束。而STEP使用了客户化的Resend消息,根据请求的不同类型的数据生成不同的Resend,比如请求Order和Trade,需要填入SetNo,BeginRecNo,EndRecNo;请求StockInfo时只需要BeginRecNo和EndRecNo,不需要SetNo;请求Bulletin需要需要填入BulletinID,不需要SetNo, BeginRecNo, EndRecNo。

7. 客户化QuickFix/J实现STEP中的补数据
a) 首先要屏蔽QuickFix/J中自动根据消息头判断并在同一线程中发送ResendRequest。
b) QuickFix/J发现缺少消息时,对补数据进程发送时间,通知Resend,让单独的进程去补数据。
c) 在单独的进程中,根据收到的补数据事件,解析得到相关参数,同服务器建立新的TCP/IP连接、登陆并请求丢失的数据消息。

Guibin
2011-01-04

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多