上海期货交易所,上海期货交易所第二代行情发布平台

cny 6
接口规范 Version:1.21发布⽇期:2020/01/06 修订记录 修订记录、核准记录和审核记录 版本编号0.901.00 修订⽇期2018/09/252018/11/28 修订摘要创建征求意⻅稿根据相关意⻅修改发布增加合约⾏情更新相关信息:章节5.2.4中成交⾏情域中增加更新时间和合约⾏情快照编号等4个字段。
调整组播⼼跳频率:章节6.2.1中⼼跳发送频率从5秒改为3秒。
修改和增加⼀些解释说明:章节6.2.2中修改增量⾏情消息为增量⾏情刷新消息, 1.10 2019/02/14 以区分出其只是增量⾏情报文的其中⼀种消息。
章节5.2.2中添加说明响应信息域是查询失败反馈报文中唯⼀域; 章节5.2.2中增加⽤户端产品信息和接⼝端产品信息说明。
修改了⼀些文稿⼩错误:
如章节5.2.4中快照时间域的采样时间格式最后的结束符从'\n'修改为'\0'。
增加合约信息域指数相关字段说明: 1.20 2019/04/18 章节5.2.4中合约信息域中ProductClass和CurrencyID字段增加指数合约的说明。
增加合约信息域中TAS相关字段的说明: 1.21 2019/12/09
章节5.2.4中合约信息域中ProductClass中新增TAS合约的产品类型, UnderlyingInstrID的说明由“期权基础商品代码”改为“基础商品代码”。
核准记录核准⼈员 邹文军 属于部⻔(单位)上期技术 核准⽇期2020/01/07 审核记录审核⼈员 赵鸿昊 属于部⻔(单位)上期技术 审核⽇期2020/01/07 文件制作和维护:上海期货信息技术有限公司。

1.引⾔
2.⾏情及其组织形式 2.1⾏情主题2.2⾏情快照和增量⾏情
3.平台提供的服务
4.字段类型和报文4.1字段类型4.2报文 4.2.1报文结构4.2.2域构成语法4.2.3报文与消息
5.⾏情查询服务5.1MDQP报文头5.2⾏情查询服务的功能5.2.1⼼跳功能 ⼼跳消息(TypeID=0x00)5.2.2⽤户登录功能 登录请求(TypeID=0x11)登录应答(TypeID=0x12)5.2.3⽤户登出功能登出请求(TypeID=0x13)登出应答(TypeID=0x14)5.2.4主题⾏情快照查询功能快照查询请求(TypeID=0x31)快照查询应答(TypeID=0x32)5.2.5增量⾏情查询功能增量查询请求(TypeID=0x33)增量查询应答(TypeID=0x34)
6.增量⾏情服务6.1MIRP报文头6.2增量⾏情服务的功能6.2.1⼼跳功能⼼跳消息(TypeID=0x00)6.2.2增量⾏情推送功能增量⾏情刷新消息(TypeID=0x01)
7.启动与恢复7.1启动过程7.2⾏情恢复7.2.1快照恢复7.2.2增量⾏情补⾜恢复7.3数据中⼼切换
8.结束语 ⽬录
1.引⾔ 上海期货交易所(下文简称:上期所)第⼆代⾏情发布平台(SHFEMarketDataPlatform,SMDP2.0)采⽤数据编码压缩以及组播传输等技术⽅法,发送期货及衍⽣品交易⾏情。
本规范介绍上期所第⼆代⾏情发布平台(下文简称:平台)提供的服务,以及服务接⼝、协议和编码,并给出从平台获取⾏情的步骤。

2.⾏情及其组织形式 2.1⾏情主题 上期所期货及衍⽣品交易⾏情是按照⾏情主题进⾏组织的。
⾏情主题定义了⾏情的发布内容和发布⽅式,包括产品、⾏情深度、采样频率、延迟时间和统计模式等。
各个⾏情主题的具体参数请参考上期所发布的主题列表。
产品:指出该主题⾏情包含哪些期货及衍⽣品品种。
⾏情深度:上期所第⼆代⾏情发布平台的⾏情是分价格档位⾏情(MarketByPrice,MBP),⾏情深度指的是⾏情价格档位的数量。
采样频率:上期所第⼆代⾏情发布平台的⾏情是切片⾏情,采样频率指的是切片频率。
延时时间:延迟时间为该切片⾏情延后于实时切片⾏情的时间。
实时切片⾏情的延迟时间为
0。
统计模式:分为双边统计和单边统计。
单边统计中的成交量和成交⾦额按照单边计算。
⽽双边统计按双边计算,成交量和成交⾦额为单边统计的两倍。
平台的⽤户按照权限可获得相应主题的⾏情。
2.2⾏情快照和增量⾏情 平台中的⾏情信息通过⾏情快照和增量⾏情的形式提供给客户。
⾏情快照反映了某个时刻(某个⾏情切片时刻)的市场状态,包括了某时刻的报单、成交、合约和市场统计等所有⾏情信息。
增量⾏情反映了⾏情快照的变化,包含了新旧⾏情快照在相应两个切片时刻内的累积变化。
⾏情信息在两个切片时刻内的累计变化会导致⾏情快照的更新,⾏情快照的更新都会产⽣对应的增量⾏情。
新⾏情快照可
以根据原⾏情快照及对应的增量⾏情得到。
主题⾏情快照由该主题所包含的所有期货及衍⽣品品种的合约⾏情快照组成。
主题增量⾏情由相应的合约增量⾏情组成。
如果某合约在对应的切片时刻内未产⽣增量⾏情(⽆更新),则该主题增量⾏情中就不包含该合约的⾏情信息。
举例说明:主题下包括三个合约:合约
1、合约2和合约
3,那么⼀个主题⾏情快照则由合约1的合约⾏情快照、合约2
的合约⾏情快照和合约3的合约⾏情快照组成。
主题⾏情快照 合约1合约⾏情快照 合约2合约⾏情快照 合约3合约⾏情快照 ⽽在⼀次主题⾏情变化中,仅合约1和合约3的合约⾏情快照发⽣了变化。
则主题增量⾏情仅包括合约1和合约3的合约增量⾏情。
合约2的空合约增量⾏情被省略。
主题增量⾏情 合约1合约增量⾏情 合约3合约增量⾏情 每个主题⾏情独立对⾃⼰的主题⾏情快照进⾏编号,称为快照编号。
主题⾏情快照的编号从0开始,单向递增。
主题增量⾏情也有编号,当主题⾏情快照的编号从n变为n+1时,其产⽣的主题增量⾏情的编号为n+
1。
⽤户在获取⼀个主题⾏情快照后,可以在其基础上,根据后续的主题增量⾏情,更新为后续的主题⾏情快照。
主题增量⾏情的编号与其对应的主题⾏情快照的编号⼀致。
后续章节中,我们有时也将主题增量⾏情的编号称为其快照编号。
主题⾏情快照
(0) +主题增量⾏情
(1) 主题⾏情快照
(1) +主题增量⾏情
(2) 主题⾏情快照
(2) 合约⾏情快照也有⾃⼰的快照编号,除了初始编号与主题⾏情快照编号相同外,后续都是根据合约⾃⼰的变化独立编号。
合约增量⾏情和合约⾏情快照的联系也是通过编号进⾏的。
每⼀次合约增量⾏情都意味着合约⾏情快照的编号递增,合约增量⾏情的编号与其对应的合约⾏情快照的编号⼀致。
值得注意的是,每⼀次主题⾏情快照变化时,主题⾏情快照编号必须递增,但主题增量⾏情仅包括部分合约的合约增量⾏情,仅部分合约⾏情快照的编号在本次主题增量⾏情对应的变化中递增,这会导致主题增量⾏情的编号和其下合约的合约增量⾏情的编号渐渐不同。
每个合约⾏情快照是由其合约信息、成交⾏情和分价表信息三个部分⾏情信息组成。
合约增量⾏情是由⼀系列合约事件构
成,每种合约事件代表了合约⾏情快照中的特定部分信息的变动。
我们将在后续的章节中详细介绍其中具体的内容。

3.平台提供的服务 上期所第⼆代⾏情发布平台按⾏情主题定义的采样频率,对相应产品的⾏情信息进⾏切片。
当⾏情信息发⽣变化时,产⽣主题⾏情快照,并以组播的⽅式推送主题增量⾏情,向⽤户提供⾏情更新。
平台提供与⽤户交互的⾏情查询服务和向⽤户单向推送的增量⾏情服务。
⾏情查询服务为⽤户提供登录登出、⾏情快照查询和增量⾏情缺失补⾜等功能。
使⽤MDQP协议(Market
DataQueryProtocol)与⽤户进⾏交互。
MDQP协议的⽹络层协议为TCP协议。
增量⾏情服务将每个主题的增量⾏情推送给该主题⾏情的订阅客户。
增量⾏情服务使⽤MIRP协议(MarketdataIncrementalRefreshProtocol)以组播⽅式向⽤户推送信息。
MIRP协议的⽹络层协议为UDP协议。
平台采⽤的是两地三中⼼部署的主备运⾏模式。
每个中⼼中都布有多个⾏情查询服务和增量⾏情服务。
对于⾏情查询服
务,⽤户可连接其中任意⼀个。
对于增量⾏情服务,⽤户可选择接入⼀路或同时接入多路。
正常情况下,备中⼼的服务(图中虚线部分)不启⽤。
如下图所⽰。

4.字段类型和报文 在介绍平台提供的功能和协议之前,我们先介绍平台的两种协议⽀持的字段类型和报文结构。
4.1字段类型 字段是平台⽀持的两种协议信息模块的基本单位。
每个字段按照其类型进⾏编码。
字段按照协议定义的顺序以⼩端紧凑的⽅式编码成更⼤的信息模块,不⽀持字段的字节对齐。
平台⽀持的编码类型包括:不同⼤⼩的整形、双精度浮点型、不同⻓度的字符数组和字节数组等。
具体如下表所⽰。
类型IntnuIntnDouble Char[n] Byte[n]VInt ⻓度(字节)n/8n/88 n n1~10 编码 ⼆进制编码⼆进制编码⼆进制编码(IEEE754) ⼆进制编码 ⼆进制编码Varint+ZigZag编码 说明 ⻓度为nbits的有符号整型。
n可为8、16、32或64。
如Int32为32位⼆进制编码的有符号整型。
⻓度为nbits的⽆符号整型。
n可为8、16、32或64。
双精度浮点数。
其中DBL_MAX⽤以表⽰⽆效值。
⻓度为n的标准字符或字符串。
n可以为任意正整数。
当n为1时,表⽰字符;当n⼤于1时,⽤以存储字符串。
字符串必须以"\0"结尾。
也就是说,Char[n](n>1)中存放的有效字符串为其中存储的第⼀个"\0"之前的字符序列。
⻓度为n的字节数组。
n可以为任意正整数。
⼀种紧凑编码⽅式,⽤以编码64位有符号整型。
VInt编码为Varint编码和ZigZag编码的结合,为⼀种将64位⼆进制编码的有符号整型编码在最多10字节中的编码⽅式。
Varint编码为⼀种将64位⼆进制编码的⽆符号整型根据其⼤⼩⽤不同⻓度字节进⾏编码的编码⽅式。
其编码特点为数
字越⼩所占⽤的字节数越少。
每个字节的低7位⽤来表⽰数字,最⾼位有特殊的含义:如果该位为
1,表⽰后续的⼀个字节也是该数字的⼀部分;如果该位为
0,则该字节为该数字的最后⼀个字节。
因此⼩于128的数字都可以⽤⼀个字节表⽰。
⼤于128的数字,会⽤两个或两个以上的字节编码。
举例:整数1的表⽰,仅需⼀个字节00000001 整数300的表⽰,需要两个字节1010110000000010 ZigZag编码是为了配合Varint来使⽤的⼀种为有符号整型数定义的编码。
ZigZag的原理是按照绝对值⼤⼩来重新解析⼆进制。
其编码如下表所⽰: 原有符号数0-11-22-3...2147483647-2147483648 编码为012345...42949672944294967295 ⽤⼀个表达式来表⽰ZigZag编码,为: EncZZ(n)=(n<<1)^(n>>63)其中:<<为按位左移运算,^为按位异或运算,>>为按位右移运算。
对ZigZag编码进⾏解码的公式为: DecZZ(n)=(-(n&0x01))^((n>>1)&~(1<<64))其中:&为按位与运算,~为按位非运算。
VInt的编码实际上是将64位整数的有符号编码⾸先使⽤ZigZag转换后,再⽤Varint进⾏的编码。
VInt的编码与GoogleProtocolBuffer中wiretype中的sint64的编码相同。
将VInt编码转换成64位有符号整型的算法分两步: 第⼀步:⾸先将⽬标编码视为Varint编码,将之解码为64位⽆符号整型的ZigZag编码。

1.开始时ZigZag编码的64位全部清空为0;
2.从第1个字节开始,顺序取出Varint编码的⼀个字节,假设⽬前为第i个字节;
3.将取出的字节低7位累加赋值到ZigZag编码中:Varint编码字节的第n位(n取1~7)赋值给ZiaZag编码的第(i1)*7+n位;
4.判断取出的字节的最⾼位:如果为
1,则返回步骤2取下⼀个字节继续解码;如果为
0,则第⼀步Varint解码结束。
第⼆步:使⽤DecZZ公式将所得的ZigZag编码的64位⽆符号整型转变为64位有符号整型。
下图反映了负数-151的Vint类型解码过程: 4.2报文 MDQP和MIRP两种协议都为应⽤层协议,是平台与⾏情客户端进⾏各种不同种类的数据交互的依据。
平台与⾏情客户端之间的每⼀次完整信息传送称为消息。
消息以报文的形式传输。
MDQP协议的报文称为MDQP报文,MIRP协议的报文称为MIRP报文。
4.2.1报文结构 每个报文都是由⼀个报文头后⾯紧接着⼀个报文体构成。
报文开始报文头 报文体报文结束 域 域 ... 域 域头 域体 报文头为字段序列。
不同协议的报文头字段构成不同,但⼀般都会包括消息类型、报文标识和报文体⻓度等信息。
报文体是由⼀到多个域构成。
域可以为不同的种类,域ID在⼀个协议中唯⼀标识⼀种域。
域由域头和域体组成。
域头和域体都是字段序列。
域头包括域ID和域体⼤⼩两个字段。
不同种类域的域体字段定义各不相
同。
域头结构具体如下: 字段FieldIDFieldSize 编码类型Int16Int16 说明域ID。
唯⼀代表着⼀个域种类。
域体⻓度。
每个消息内容可以由⼀到多个域构成。
协议报文的解码程序正是靠域头将报文体分割成⼀个个各不相同的域。
报文头中的报文体⻓度(报文中⼀般都有该字段)等于报文体中所有域的域体⻓度(域头中的FieldSize)之和加上所有域头的⻓度。
注:域头中的域体⻓度FieldSize可能会⼤于域定义中的字段⻓度之和。
这种情况⼀般会出现在版本更新时,在域定义后增
加了新域体字段,⽽客户端仍然向前兼容地使⽤旧版本进⾏协议解码的时候。
所以,在将报文体分割成多个域时,⼀定要使⽤域头中的域体⻓度进⾏分割,⽽不是使⽤域体字段定义。
在域体末端有冗余字节时,应该丢弃,⽽不是作为下⼀个域的开头字段,否则报文解码就会出错。
4.2.2域构成语法 上节中我们提到,⼀个消息是由⼀到多个域构成,不同的消息类型所需要的域的种类和顺序各不相同。
本节我们定义域构成语法,后续文档中将遵循此语法来描述消息的域构成。
我们定义正规式和结构图两种语法来表⽰⼀个消息的域构成,以便⽤户选择⾃⼰熟悉的语法⽅式进⾏语法理解。
我们⽤圆括号加上名称来表⽰⼀个域或域串,如
(域) 表⽰⼀个域。
同时,圆括号在正规式中也可任意出现辅助判断符号优先级。
结构图中,我们⽤矩形⽅块表⽰⼀个域,黄⾊的矩形⽅块表⽰⼀个域串。
域 域串 我们⽤正规式的连续排列表⽰域的顺序出现。
当两个域在同⼀个括号中时,表明它们⽆顺序要求(可变换顺序出现)。
如: (域1)(域
2,域3) 表⽰此域串必须为域1接着域2和域
3。
结构图中,我们⽤两条虚线表⽰⼀个域串的具体组成部分,域与域之间通过箭头来表⽰顺序,通过双向菱形箭头表⽰⽆顺序要求。
域串 域
1
2
3 ⽆顺序要求的多个域也可以放在同⼀个矩形⽅块中。
域串 域1域2域
3 我们⽤上标来表⽰⼀个域或域串的多次出现。
上标中表⽰出现次数的限制。
如(域)>=1/\<=
M 表⽰域最少出现1次,最多可能出现M次。
我们⽤“/\”表⽰限制条件的“并且”关系,⽤“\/”表⽰限制条件的“或者”关系。
限制条件表⽰出现次数为某固定数时,可以直接⽤该数字表⽰限制。
如“1”表⽰该域会出现1次,所以,下⾯两个正规式是等价的。
(域)等同于(域)
1 下⾯表达式表明域可以出现任意次数。
(域)>=
0 在结构图中,我们⽤⼀个带箭头的圆圈表⽰带出现次数限制的域或域串。
圆圈下为出现次数的限制。
域<=
M 同⼀个括号中的域具有同样的限制。
如(域
1,域2)>=1/\<=
2 可能的域串为“域1域2”、“域2域1”、“域1域1域2”、“域2域1域1”、“域2域2域1”、“域1域2域2”。
注意,每个域如果出现多次时必须是在⼀起的,中间不能插入其他域。
同样地,同⼀个矩形⽅块中的域具有同样的限制。
域1域
2 >=1/\<=2 4.2.3报文与消息 每个协议的报文都有总⻓度上限: MDQP报文的总⻓度上限为1280字节。
MIRP报文的总⻓度上限为1232字节。
总⻓度上限包括报文头。
所以MDQP报文的报文头⻓度和报文头中的报文体⻓度加起来不能⼤于1280字节。
MIRP报文的报文头⻓度和报文头中的报文体⻓度加起来不能⼤于1232字节。
当⼀个消息的数据太多,⼀个报文不能完整装下所有的域时,需要将消息数据分片封装。
在分片时,需要保证域的完整性,即同⼀个域不会拆分成两段放入不同的报文中。
对于某些特殊消息,可能还有其他特殊的分片要求。
同⼀个消息可以由多个报文构成,但⼀个报文最多只能包含⼀个消息的数据,不同消息不能共享同⼀个报文。
即使报文⻓
度⾜够,新消息仍然需要另起⼀个报文进⾏封装。
我们有时也将消息类型称为报文类型。

5.⾏情查询服务 本章节中介绍⾏情查询服务的消息种类和不同消息种类MDQP报文的域组成。
5.1MDQP报文头 MDQP报文头包括协议版本号、消息类型、报文体⻓度和⽤户请求编号等信息。
MDQP报文头的总⻓度为8个字节。
字段Flag TypeIDLengthRequestID 类型uInt8 Int8uInt16Int32 说明 标识位和协议版本号。
其中⾼4位为4个标识位;低4位(Flag&0x0F)为协议版本号,当前版本号为
1。
⾼4位中的最低位(即第4位,Flag&0x10)为消息结束标识位。
消息标识位为0时表⽰当前报文为本消息最后⼀个报文,为1时表⽰后续报文仍然为同⼀个消息的报文。
其余3位标识位尚未使⽤。
报文类型,即消息类型,唯⼀代表⼀个消息种类。
报文体⻓度。
⽤户请求编号。
MDQP协议中,⽤户进⾏查询请求时,需提供⼀个请求编号来唯⼀标识其发起的某⼀个请求。
平台在相应的应答报文中带回请求编号,以保持请求和应答报文间的对应关系。
5.2⾏情查询服务的功能 ⾏情查询服务向⽤户提供⼼跳、⽤户登录登出、主题⾏情快照查询和增量⾏情查询等功能。
5.2.1⼼跳功能 ⽤户与平台⾏情查询服务之间的连接建立后,当任何⼀侧在⼀定时间内没有收到对⽅的报文,则为连接超时。
默认连接超时时间为10秒。
⼼跳功能⽤以通知对⽅连接有效。
如果⼀定时间内,任何⼀侧没有需要向另⼀侧发送任何报文时,就需要向对⽅发送⼼跳消息报文,避免连接超时。
发⽣连接超时,表⽰连接已⽆效,应断开连接。
⼼跳消息(TypeID=0x00) 每个⼼跳消息由⼀个只有MDQP报文头的空报文构成。
空报文的报文体为空,其中不包含任何域。
⼼跳消息报文头中,
Length为
0,RequestID字段⽆意义。
5.2.2⽤户登录功能 ⾏情⽤户开始接收⾏情前,⾸先要登录到平台。
⽤户⾸先需要发送登录请求消息给平台的⾏情查询服务申请登录,平台处理后发送登录应答消息进⾏反馈。
⾏情客户端⾏情查询服务登录请求登录应答 ⾏情客户端⾏情查询服务 登录请求(TypeID=0x11) 登录请求消息仅需要⼀个登录请求域。
(登录请求域) 登录请求域 开始 结束 登录请求域(FieldID=0x0002)包括⽤户申请登录时提供的相关信息。
字段UserIDParticipantIDPassword Language UserProductInfoInterfaceProductInfo 类型Char[16]Char[11]Char[41] Char[1] Char[41]Char[41] 说明 交易⽤户代码。
会员代码。
密码。
语⾔。
影响错误信息等字段的解码语⾔。
其取值范围如下:‘0’:中文(GB18030)‘1’:英文。
⽤户端产品信息。
⽤以指明⽤户端使⽤何种⾏情客户端。
接⼝端产品信息。
在⽤户使⽤不同⼚商提供的协议解码软件和⾏情客户端软件时,⽤以指明⽤户端使⽤何种协议解码软件。
登录应答(TypeID=0x12) 如果登录成功,登录应答消息包括响应信息域和登录应答域。
如果登录失败,登录应答消息只包括响应信息域。
(响应信息域)(登录应答域)<=
1 响应信息域开始 登录应答域 <=1结束 响应信息域(FieldID=0x0001)中包含了错误代码和错误信息,提⽰⽤户登录是否成功。
在⾏情查询服务中,响应信息域同时也是任何查询失败后的反馈报文中的唯⼀域。
字段ErrorIDErrorMsg 编码类型Int32Char[81] 说明错误代码,唯⼀代表着⼀个种类的错误。
0表⽰⽆错误。
具体的错误信息。
其中,平台⽀持的所有错误代码定义如下: 错误代码0-22-4118-4156-4161-4162-4203 错误原因⽆错误操作过于频繁。
交易所数据还没有同步,平台还未准备好。
⽤户名或密码错误。
⽤户IP不合法。
⽤户尚未登录。
⽤户⽆此权限。
登录应答域(FieldID=0x0003)仅出现在登录成功(响应信息域中的错误代码=0)的时候,向⽤户反馈的信息和字段构成如下: 字段TradingDayLoginTimeUserIDParticipantIDTradingSystemNameActionDay 类型Char[9]Char[9]Char[16]Char[11]Char[61]Char[9] 说明交易⽇。
格式为"YYYYMMDD\0"。
登录成功时间。
格式为"hh:mm:ss\0"。
交易⽤户代码。
会员代码。
系统名称。
⾃然⽇。
格式与交易⽇同。
5.2.3⽤户登出功能 ⽤户需要登出平台时,可以向平台发送登出请求消息,平台处理后发送登出应答消息进⾏反馈。
⾏情客户端⾏情查询服务登出请求登出应答 ⾏情客户端⾏情查询服务 登出请求(TypeID=0x13) 登出请求消息仅需要⼀个登出请求域。
(登出请求域) 登出请求域 开始 结束 登出请求域(FieldID=0x0004)为⽤户向平台申请登出时,向平台提供的相关信息。
字段UserIDParticipantID 类型Char[16]Char[11] 说明交易⽤户代码。
会员代码。
登出应答(TypeID=0x14) 如果登出成功的话,登出应答消息包括响应信息域和登出应答域。
如果登出失败,登出应答消息仅包括响应信息域。
(响应信息域)(登出应答域)<=
1 响应信息域开始 登出应答域 <=1结束 响应信息域与登录应答中的响应信息域相同。
登出应答域(FieldID=0x0005)为⽤户申请登出成功后,平台向⽤户做出的最后反馈信息。
字段UserIDParticipantID 编码类型Char[16]Char[11] 说明交易⽤户代码。
会员代码。
5.2.4主题⾏情快照查询功能 ⽤户发送主题⾏情快照查询请求获得某⼀⾏情切片时刻的全量⾏情,⽤作初始全量⾏情或者⾏情恢复。
⾏情查询服务收到请求后发送快照查询应答消息对⽤户查询进⾏反馈。
⾏情客户端⾏情查询服务 快照查询请求快照查询应答 ⾏情客户端⾏情查询服务 注意:⽤户只能查询整个主题的⾏情快照,不能单独查询单个合约的⾏情快照。
快照查询请求(TypeID=0x31) 快照查询请求消息仅需⼀个快照标识域来唯⼀标识⼀个主题⾏情快照。

(快照标识域) 快照标识域 开始 结束 快照标识域(FieldID=0x1001)中包含主题代码和快照编号。
快照编号为-1表⽰需要查询最新快照。
字段TopicIDSnapNo 类型Int16Int32 说明主题代码。
快照编号。
为-1表⽰最新快照。
快照查询应答(TypeID=0x32) 快照查询应答消息的域构成如下: X个中⼼切换历史域(X为当前交易⽇已经发⽣的数据中⼼切换次数,未发⽣过数据中⼼切换则为
0。

⼀个结算会话域⼀个快照标识域⼀个主题属性域⼀个快照时间域⼀个增量⾏情报文编号域。
M个合约域串(M为主题中的合约个数)。
每个合约域串的构成为: ⼀个合约信息域⼀个成交⾏情域<=2N个分价表域构成(N为该主题的⾏情深度) 快照查询应答消息的域构成⽤正规式和结构图表⽰为: ((中⼼切换历史域)X)(结算会话域)(快照标识域)(主题属性域)(快照时间域)(增量⾏情报文编号域)(((合约信息域)(成交⾏
情域)((分价表域)<=2N))M) 中⼼切换历史域 结算会话域 开始
X 快照标识域 增量⾏情报文编号域 快照时间域 主题属性域 合约域串 M结束 合约信息域 成交⾏情域 分价表域 <=2N 中⼼切换历史域(FieldID=0x0032)包括本次交易系统启动后的数据中⼼切换历史信息,仅⽤来提供数据中⼼切换的历史信息。
该域主要包括了每次中⼼切换的有效快照编号及其对应的增量⾏情报文号。
中⼼切换历史域的信息主要是在发⽣数据切换时,提供给⽤户进⾏有效⾏情判定。
字段CenterChangeNoSnapNoPacketNo 类型Int8Int32Int32 说明 数据中⼼编号。
每次系统启动时数据中⼼编号从0开始,每次发⽣数据中⼼切换时加
1。
本次数据中⼼切换时的有效快照编号。
本次数据中⼼切换时的增量⾏情报文编号。
切换后的数据中⼼将从编号PacketNo+1开始发送增量⾏情报文。
结算会话域(FieldID=0x0031)包括结算相关信息。
字段TradingDay 类型Char[9] SettlementGroupID Char[9] SettlementID Int32 说明交易⽇。
格式为"YYYYMMDD\0"。
结算组代码。
结算编号。
快照标识域与快照查询请求中的快照标识域相同。
主题属性域(FieldID=0x1003)包括主题⾏情深度和增量⾏情的MIRP报文加密情况等主题相关信息。
字段MarketDataDepth CipherAlgorithm 类型Int32 Char[1] 说明 主题⾏情深度。
加密算法。
⽬前暂未启⽤加密。
取值范围为:‘0’:不加密。
字段CipherKeyCipherIV 类型Byte[16]Byte[16] 说明密钥,仅在加密算法不为'0'时有效。
加密初始化⽮量,仅在加密算法不为'0'时有效。
快照时间域(FieldID=0x1002)包含⼀个主题⾏情快照的切片采样时刻信息。
字段SnapDateSnapTimeSnapMillisec 类型Char[9]Char[9]Int32 说明采样⽇期。
格式为"YYYYMMDD\0"。
采样时间(到秒级)。
格式为"hh:mm:ss\0"。
毫秒级采样时间。
增量⾏情报文编号域(FieldID=0x1004)⽤以表⽰主题的当前快照中,增量⾏情报文的最新编号。
这意味着当前快照体现了所有⼩于等于该编号的增量⾏情报文的累积信息。
字段PacketNo 类型Int32 说明增量⾏情报文的最新编号。
合约信息域(FieldID=0x0101)⽤以编码合约⾏情快照中的合约信息。
合约信息包括合约的相关属性和当前的相关状态,⼀般在⼀个交易⽇内保持不变。
字段InstrumentIDUnderlyingInstrID ProductClass StrikePriceOptionsType 类型Char[31]Char[31] Char[1] DoubleChar[1] 说明 合约代码。
合约的唯⼀标识字符串。
上期所及相关系统以合约代码来引⽤对应合约。
基础商品代码。
合约所属的产品类型,即合约类型。
⼀个产品下的所有合约类型相同。
产品类型可以为期货、期权、组合、即期、期转现和指数等。
其取值如下:‘1’:期货‘2’:期权‘3’:组合‘4’:即期‘5’:期转现‘6’:TAS‘I’:指数。
执⾏价。
期权合约专⽤。
标明该期权合约的执⾏价格。
期权类型。
期权合约专⽤。
期权类型可以为看涨或看跌。
其取值如下:‘0’:非期权‘1’:看涨‘2’:看跌。
字段VolumeMultipleUnderlyingMultipleIsTrading 类型Int32DoubleInt32 CurrencyID Char[4] PriceTick Double CodecPrice Double InstrumentNo Int32 说明合约数量乘数,标明每⼿该合约包含多少单位的标的物。
合约基础商品乘数。
标明是否交易。
0表⽰非交易,其他为交易状态。
合约的币种代码。
⽬前⽀持“CNY”和空值,“CNY”表⽰⼈⺠币;空值⽤于指数合约。
最⼩变动价位。
合约价格必须是最⼩变动价位的整数倍。
编码基准价。
特殊信息,由平台指定,⼀般为昨结算价,⽤作增量⾏情中⼀些价格字段的编解码基准。
合约编码。
唯⼀对应⼀个合约代码。
将合约代码映射到32位整型编码中以减少编码字节数。
成交⾏情域(FieldID=0x0102)⽤以编码合约⾏情快照中的所有基本⾏情信息,反映了该合约当前成交的相关价格、统计信息和⼀些状态信息。
合约的统计信息基于⼀个统计时间段,平台提供的统计信息是基于交易⽇进⾏的,即所统计的信息从本交易⽇开盘到当前时间的统计。
字段InstrumentNoLastPriceVolumeTurnoverOpenInterestHighestPriceLowestPriceOpenPriceClosePriceSettlementPriceUpperLimitPriceLowerLimitPricePreSettlementPricePreClosePricePreOpenInterestPreDelta 类型Int32DoubleInt32DoubleDoubleDoubleDoubleDoubleDoubleDoubleDoubleDoubleDoubleDoubleDoubleDouble 说明合约编码。
与合约信息域中的合约编码对应。
最新价。
合约数量。
统计本交易⽇已经成交的合约⼿数。
成交⾦额。
统计本交易⽇该合约的成交⾦额总和。
持仓量。
统计该合约⽬前在市场中的总持仓。
最⾼价。
统计本交易⽇到⽬前为⽌的最⾼成交价。
最低价。
统计本交易⽇到⽬前为⽌的最低成交价。
今开盘。
今收盘。
今结算。
涨停板价。
跌停板价。
昨结算。
昨收盘。
昨持仓量。
本交易⽇开盘前的该合约总持仓。
昨虚实度。
字段CurrDeltaActionDayUpdateTimeUpdateMilliSecChangeNo 类型DoubleChar[9]Char[9]Int32Int32 说明今虚实度。
业务发⽣⽇期。
最近修改秒级时间。
最近修改毫秒级时间当前合约⾏情快照编号。
分价表域(FieldID=0x0103)包括合约⾏情快照中的所有分价表信息。
分价表为报单簿信息的⼦集,体现了当天的报单在⼀定价格档位上的分布。
平台提供基于价格排序的分价表信息。
分价表信息中的价格档位深度为主题⾏情的⾏情深度。
假设⾏情深度为
N,则⼀个合约的分价表由2N个档位的价格数量信息组成。
bid⽅向有N个档位,最优档位的价格最⾼。
ask⽅向有N个档位,最优档位的价格最低。
每⼀个分价表域代表⼀个⽅向上的⼀个档位的价格数量信息,所以⾏情深度为N的分价表信息最多需要2N个分价表域来编码。
字段InstrumentNo Direction PriceVolume 类型Int32 Char[1] DoubleInt32 说明 合约编码,与合约信息域中的合约编码对应。
买卖⽅向。
其取值范围:‘0’:bid‘1’:ask。
价格档位。
合约数量。
注:⾏情快照中的所有业务相关字段的意义请参考交易所业务细则相关文档。
5.2.5增量⾏情查询功能 当出现少量增量⾏情报文丢失时,可以通过增量⾏情查询功能补⾜缺失的增量⾏情报文。
平台限制⼀次最多可以查询连续10条增量⾏情报文。
⽤户在需要补⾜增量⾏情报文时,需要向⾏情查询服务发送增量查询请求消息。
平台发送增量查询应答消息进⾏反馈。
⾏情客户端⾏情查询服务增量查询请求增量查询应答 ⾏情客户端⾏情查询服务 增量查询请求(TypeID=0x33) 增量查询请求消息仅包含⼀个增量⾏情报文标识域,⽤以标识连续的⼀系列增量⾏情报文。
(增量⾏情报文标识域) 增量⾏情报文标识域 开始 结束 增量⾏情报文标识域(FieldID=0x0201)除了包含⼀个主题代码外,还包含了两个报文号:StartPacketNo和
EndPacketNo,表⽰需要查询的增量⾏情报文的编号范围是[StartPacketNo,EndPacketNo),总查询报文个数为EndPacketNo-StartPacketNo。
字段TopicIDStartPacketNoEndPacketNo 类型Int16Int32Int32 说明主题代码。
开始报文编号(包含)。
结束报文编号(不包含)。
增量查询应答(TypeID=0x34) 增量查询应答消息以通⽤域的形式传输增量⾏情报文,每个通⽤域中包含⼀个增量⾏情报文。
(通⽤域)(EndPacketNo-StartPacketNo) N=EndPacketNo-StartPacketNo 通⽤域开始 N结束 通⽤域(FieldID=0x0000)的域体为未定义的⼆进制数据。
通⽤域是通⽤的,可⽤来发送任意数据。
但MDQP协议不能对通⽤域域体进⾏解码,⼀般需要额外指定解析算法。
例如,增量⾏情报文需要⽤MIRP协议进⾏解码。

6.增量⾏情服务 本章节中我们来详细介绍增量⾏情服务的消息种类和不同消息种类MIRP报文的域组成。
6.1MIRP报文头 MIRP报文头的结构中包含的字段内容按照从前往后的顺序如下表: 字段 Flag TypeIDLengthPacketNoTopicIDSnapMillisecSnapNoSnapTimeCommPhaseNoCenterChangeNoReserved 类型 uInt8 Int8uInt16Int32Int16uInt16Int32uInt32uInt16Int8Int8 说明标识位和协议版本号。
其中⾼4位为4个标识位;低4位(Flag&0x0F)为协议版本号,当前版本号为
1。
⾼4位中的最低位(即第4位,Flag&0x10)为消息结束标识位。
消息标识位为0时表⽰当前报文为本消息最后⼀个报文,为1时表⽰后续报文仍然为同⼀个消息的报文。
其余3位标识位尚未使⽤。
报文类型,即消息类型,唯⼀代表⼀个消息种类。
报文体⻓度(不包括报文头)。
⾏情报文号。
此号码唯⼀标记⼀个增量⾏情报文。
⼼跳报文沿⽤最新增量⾏情报文的⾏情报文号。
该报文体中包括的⾏情主题的主题代码。
当前主题⾏情快照的毫秒级时间。
⼼跳报文沿⽤最新增量⾏情报文中的毫秒级时间。
当前主题增量⾏情的快照编号。
⼼跳报文沿⽤最新增量⾏情报文的快照编号。
当前主题⾏情快照的秒级时间。
⼼跳报文沿⽤最新增量⾏情报文的快照秒级时间。
从1980年01⽉01⽇开始的第多少天,⽤以表⽰当前交易⽇。
当前数据中⼼编号。
发⽣数据中⼼切换的情况下使⽤。
数据中⼼编号在每个交易⽇系统启动时为
0,每次发⽣数据中⼼切换时加
1。
保留字节。
MIRP报文头⻓度为24个字节。
如果MIRP报文被加密,指的是仅MIRP报文体部分被加密。
⽤户在收到MIRP报文时可分析报文头来有选择地进⾏报文解密。
6.2增量⾏情服务的功能 本节我们介绍增量⾏情服务提供的功能及其消息构成。
6.2.1⼼跳功能 ⼼跳功能由⼼跳消息构成。
平台每3秒发送⼀个⼼跳消息。
⼼跳消息(TypeID=0x00) 每个⼼跳消息由⼀个⼼跳报文构成。
⼼跳报文为⼀个MIRP空报文。
⼼跳消息⽤来协助⽤户判断当前增量⾏情服务状态及
⾏情状态,不属于增量⾏情报文,所以⼼跳报文不增加⾏情报文号。
⼼跳报文的报文头中的报文编号和快照编号可协助⽤户判断当前⾏情状态。
6.2.2增量⾏情推送功能 增量⾏情服务提供增量⾏情推送功能,按照主题的刷新频率,向⼴播组内所有⾏情⽤户⼴播推送增量⾏情。
增量⾏情刷新消息(TypeID=0x01) 增量⾏情刷新消息由⼀到最多M(主题包括的合约数)个合约增量⾏情域串构成。
当增量⾏情刷新消息较⼤,需要分成多个
报文时,同⼀个合约的合约⾏情域串必然是在同⼀个报文中。
每个合约增量⾏情域串由⼀个合约增量⾏情头域开始,后接0到最多2N(N为⾏情深度)个的分价表变动域,再接⼀系列其他合约事件相关域。
除分价表变动域外,其他事件域最多出现⼀次。
((合约增量⾏情头域)(分价表变动域)<=2N(成交概要域,最⾼价域,最低价域,开盘价域,收盘价域,涨停板价域,跌停板价域,结算价域,虚实度域)<=1)>0/\<=
M 合约增量⾏情域串 开始 >0/\<=M结束 合约增量⾏情头域 成交概要域 最⾼价域 最低价域 开盘价域 分价表变动域 收盘价域 <=2N 涨停板价域 <=
1 跌停板价域 结算价域 虚实度域 合约增量⾏情头域(FieldID=0x0003)中包含合约编码和合约增量⾏情编号,⼀般⽤以标识⼀个合约增量⾏情的开始。
字段
InstrumentNoChangeNo 类型VIntVInt 说明合约编码。
当前⾏情合约增量⾏情的编号。
在对应合约快照发⽣变化时,编号顺序递增。
分价表变动域(FieldID=0x1001)包含了⼀个分价表变动事件的数据内容。
分价表变动事件反映了该合约的⾏情合约⾏
情快照的分价表信息的变化。
⼀个分价表变动事件反映了分价表某⼀⽅向的某⼀个档位上的信息变动。
单独⼀个分价表变动事件可能不能完全反映所有的分价表信息变化,所以⼀个⾏情合约增量⾏情中可以包括多个分价表变动事件。
字段 类型 备注 字段EventType MDEntryTypePriceLevelPriceOffsetVolume 类型Char[1] Char[1]VIntVIntVInt 备注 事件类型。
取值范围为:‘1’:增加‘2’:修改‘3’:删除。
买卖⽅向。
取值范围为:‘0’:bid‘1’:ask。
档位深度。
从1开始依次递增,表明对分价表的第⼏档进⾏操作。
档位价格。
编码中的值为实际价格相对于对应主题⾏情快照中的编解码基准价有多少个最⼩变动价位的偏移。
假设该值为n,则实际价格为(编解码基准价)+n*(最⼩变动价位)。
报单量。
使⽤分价表变动事件序列来反映合约⾏情快照中的分价表信息变化时,应该保证合约⾏情快照中的分价表信息完整性。
分价表变动事件序列总体为⼀个事务,平台仅保证分价表变动事件序列前后分价表的信息完整性。
⽤户在使⽤分价表变动事件来重构分价表时,应该严格按照分价表变动事件的顺序进⾏。
接下来我们举例说明使⽤分价表变动事件序列进⾏快照中分价表信息更新的过程。
我们举⼀个例⼦来展现平台如何⽣成分价表变动事件以及⽤户应该如何根据分价表变动事件来更新分价表。
下图中,某⾏情深度为3的主题中编号为20的合约某⼀次切片,平台中的所有档位的分价表信息发⽣了变化后,平台产⽣了四个分价表变动事件。
分价表事件根据价格编码基准价23.00和最⼩变动价0.50进⾏编码。
⾏情客户端收到平台发送的四个分价表变动域后,顺序处理对⽤户端拥有的深度为3的分价表进⾏更新。
其中有两点值得特别注意:⼀是在所有分价表变动域处理完之前,超出分价表深度的信息不能⻢上丢失,后续可
能需要使⽤。
如上述例⼦中的Bid中21.00价格档;⼆是所有分价表变动域超出分价表深度的信息可能不准确,不能⽤作参考,必须丢弃。
如上述例⼦更新后的分价表中的Ask中25.00价位在平台中已经发⽣变化。
成交概要域(FieldID=0x1002)包含了⼀个成交概要事件的数据内容。
成交概要事件包括了成交⾏情中的最新价、成交
⾦额、成交量和持仓量的变化。
事件内容为这些信息变化后的数据。
⼀个⾏情合约增量⾏情中最多只有⼀个成交概要事件。
字段LastPriceOffsetVolumeChange TurnoverOffset 类型备注VInt最新价偏移量。
编码⽅式和意义同分价表变动事件中的档位价格的编码。
成交量变化。
实际成交量相对于上⼀个合约⾏情快照中的成交量的变化。
VInt 假设该值为n,则成交量=(原成交量)+n。
成交额变化。
假设该值为n,则实际成交额=(原成交额)+((成交量-原成交量)*VInt(编解码基准价)+n*(最⼩变动价位))*(合约乘数)。
字段 类型备注 OpenInterestChangeVInt持仓量变化。
实际持仓量相对于上⼀个合约⾏情快照中持仓量的变化。
最⾼价域(FieldID=0x1011)包含了最⾼价变动事件的数据内容。
最⾼价变动事件反映了成交⾏情中的最⾼价的变化。

事件内容为新的最⾼价。
⼀个⾏情合约增量⾏情中最多只有⼀个最⾼价变动事件。
字段HighPriceOffset 类型VInt 备注最⾼价偏移量。
编码⽅式和意义同分价表变动事件中的档位价格的编码。
最低价域(FieldID=0x1012)包含了最低价变动事件的数据内容。
最低价变动事件反映了成交⾏情中的最低价的变化。

事件内容为新的最低价。
⼀个⾏情合约增量⾏情中最多只有⼀个最低价变动事件。
字段LowPriceOffset 类型VInt 备注最低价偏移量。
编码⽅式和意义同分价表变动事件中的档位价格的编码。
开盘价域(FieldID=0x1013)包含了开盘价确定事件的数据内容。
开盘价确定事件提供了成交⾏情中的今开盘,表⽰当
⽇的开盘价已经确定。
事件内容为当⽇开盘价。
⼀个⾏情合约增量⾏情中最多只有⼀个开盘价确认事件。
⼀般情况下,⼀个交易⽇中,最多只会出现⼀次开盘价确定事件。
字段OpenPriceOffset 类型备注VInt开盘价偏移量。
编码⽅式和意义同分价表变动事件中的档位价格的编码。
收盘价域(FieldID=0x1014)包含了收盘价确定事件的数据。
收盘价确定事件提供了成交⾏情中的今收盘。
事件内容为
当⽇收盘价。
⼀个⾏情合约增量⾏情中最多只有⼀个收盘价确认事件。
⼀般情况下,⼀个交易⽇中,最多只会出现⼀次收盘价确定事件。
字段ClosePriceOffset 类型VInt 备注收盘价偏移量。
编码⽅式和意义同分价表变动事件中的档位价格的编码。
涨停板价域(FieldID=0x1015)包含了涨停板价变动事件的数据。
涨停板价变动事件提供了当时的涨停板价。
事件内容
为涨停板价。
⼀个⾏情合约增量⾏情中最多只有⼀个涨停板价变动事件。
在静态涨跌停板制度的情况下,同⼀个交易⽇中,涨停板价⼀般保持不变。
在动态涨跌停板制度中,同⼀个交易⽇中,涨停板价变动可能会出现多次。
字段UpperLimitPriceOffset 类型VInt 备注涨停板价偏移量。
编码⽅式和意义同分价表变动事件中的档位价格的编码。
跌停板价域(FieldID=0x1016)⽤以封装跌停板价变动事件。
跌停板价变动事件提供了当时的跌停板价。
事件内容为跌
停板价。
⼀个⾏情合约增量⾏情中最多只有⼀个跌停板价变动事件。
在静态涨跌停板制度的情况下,同⼀个交易⽇中,跌停板价⼀般保持不变。
在动态涨跌停板制度中,同⼀个交易⽇中,跌停板价变动可能会出现多次。
字段LowerLimitPriceOffset 类型VInt 备注跌停板价偏移量。
编码⽅式和意义同分价表变动事件中的档位价格的编码。
结算价域(FieldID=0x1017)⽤以封装结算价确定事件。
结算价确定事件提供了成交⾏情中的今结算。
事件内容为当⽇
结算价。
⼀个⾏情合约增量⾏情中最多只有⼀个结算价确认事件。
⼀般情况下,⼀个交易⽇中,最多只会出现⼀次结算价确定事件。
字段SettlementPriceOffset 类型备注VInt结算价偏移量。
编码⽅式和意义同分价表变动事件中的档位价格的编码。
虚实度域(FieldID=0x1018)封装了虚实度确定事件。
虚实度确定事件提供了成交⾏情中的今虚实度。
事件内容为当⽇
虚实度。
⼀个⾏情合约增量⾏情中最多只有⼀个虚实度确认事件。
⼀般情况下,⼀个交易⽇中,最多只会出现⼀次虚实度确定事件。
字段CurrDelta 类型Double 备注虚实度。

7.启动与恢复 本章介绍客户端在使⽤平台订阅和处理⾏情的⼀些过程,包括⽤户订阅⾏情的启动过程、⾏情恢复过程和数据中⼼切换处理过程等。
7.1启动过程 ⽤户在连接时的启动过程如下:
1.接收并缓存增量⾏情报文:加入指定的组播组,开始接收MIRP报文,并缓存报文类型为增量⾏情的MIRP报文。
缓存过程中需注意数据中⼼号的变化,如果出现有更⼤数据中⼼编号的增量⾏情报文时,丢弃原有缓存,重新缓存具有较⼤数据中⼼编号的增量⾏情报文。

2.连接并登录:与⾏情查询服务建立TCP连接,使⽤登录请求功能登录。

3.快照查询:使⽤主题⾏情快照查询功能查询最新的主题⾏情快照。

4.数据中⼼确认:检查所查询的主题⾏情快照的数据中⼼编号与所缓存的增量⾏情报文中的⼀致。
如果不⼀致,返回步 骤
2。

5.处理缓存增量⾏情:在所查询的快照基础上,处理缓存的增量⾏情报文。
1).从最⼩的报文编号逐个开始处理2).如果增量⾏情报文编号⼩于等于快照中的增量报文最新编号,则丢弃。
直到找到报文编号⼤于增量报文最新编号的报文为⽌。
3).检查确认增量⾏情报文编号为增量报文最新编号+
1,否则,表明丢包了,进入⾏情恢复过程处理。
(参考⾏情恢复流程章节)4).按照报文号递增顺序处理增量⾏情报文。

6.持续更新⾏情:继续按报文号顺序处理新收到的增量⾏情报文。
⾏情查询服务增量⾏情服务 ⽤户⾏情客户端 加入组播组 组播增量⾏情报文、⼼跳报文侦听增量⾏情报文,并缓存 尝试TCP连接连接成功 登录请求登录应答 快照查询请求快照查询应答 组播增量⾏情报文、⼼跳报文组播增量⾏情报文、⼼跳报文 确认数据中⼼未发⽣切换 根据快照查询结果处理缓存增量⾏情 处理缓存的增量⾏情报文 组播增量⾏情报文、⼼跳报文处理新收到的的增量⾏情报文 ... ⾏情查询服务增量⾏情服务 ⽤户⾏情客户端 7.2⾏情恢复 ⽤户在⼀些情况下,需要进⾏⾏情恢复。
⾏情恢复的⽅式包括快照恢复和增量⾏情补⾜恢复两种⽅式。
7.2.1快照恢复 快照恢复的步骤与启动过程类似,需要从⾏情查询服务查询最新快照后,在最新快照的基础上处理增量⾏情。
在出现以下场景时建议使⽤快照恢复: 出现⼤量的增量⾏情报文丢失;增量⾏情服务的⼼跳超时。
发⽣数据中⼼切换快照恢复具体的步骤如下:
1.继续接收MIRP报文,缓存所有增量⾏情报文。
缓存过程中需注意数据中⼼号的变化。

2.向⾏情查询服务查询最新的主题⾏情快照。
如果连接失效,需要先连接并登录。

3.确认数据中⼼。

4.基于平台发过来的查询主题⾏情快照,顺序处理缓存的增量⾏情报文: 1).按照快照中的增量⾏情最新编号,丢弃所有编号⼩于等于该编号的增量⾏情报文。
2).检查确认当前处理到的增量⾏情报文号为快照中的增量⾏情最新编号+
1。
否则,表明需要重新查询主题⾏情快照,转到步骤
2。
3).按照报文号递增顺序处理增量⾏情报文(如果报文体被加密,使⽤主题属性⾥的加密信息解密)。

5.继续按报文号顺序处理新收到的增量⾏情报文。
⾏情查询服务增量⾏情服务 ⽤户⾏情客户端 组播增量⾏情报文、⼼跳报文缓存增量⾏情报文 快照查询请求快照查询应答 组播增量⾏情报文、⼼跳报文 处理缓存的增量⾏情报文 组播增量⾏情报文、⼼跳报文处理新收到的的增量⾏情报文... 组播增量⾏情报文、⼼跳报文... ⾏情查询服务增量⾏情服务 ⽤户⾏情客户端 7.2.2增量⾏情补⾜恢复 增量⾏情补⾜通过向⾏情查询服务查询丢失的增量报文进⾏⾏情恢复。
增量⾏情补⾜恢复过程适⽤于较少量增量⾏情报文丢失的情况下的快速恢复。
增量⾏情补⾜恢复具体的步骤如下:
1.持续接收MIRP报文并缓存增量⾏情报文。

2.确定丢失的增量⾏情报文的报文编号,使⽤增量查询请求向⾏情查询服务申请补⾜该增量⾏情报文。

3.按顺序处理平台增量查询应答消息传来的增量⾏情报文和缓存报文。

4.继续处理新收到的报文。
⾏情查询服务增量⾏情服务 ⽤户⾏情客户端 组播增量⾏情报文、⼼跳报文缓存增量⾏情报文 增量查询请求增量查询应答 组播增量⾏情报文、⼼跳报文 处理查询到的增量⾏情报文 处理缓存的增量⾏情报文 组播增量⾏情报文、⼼跳报文处理新收到的的增量⾏情报文... 组播增量⾏情报文、⼼跳报文... ⾏情查询服务增量⾏情服务 ⽤户⾏情客户端 7.3数据中⼼切换 当⽤户接收到的增量⾏情报文中的数据中⼼编号发⽣递增时,表明发⽣了数据中⼼切换,⽤户在接收增量⾏情报文时,应关注数据中⼼编号的变化情况。
在交易所主备数据中⼼切换时,可能会导致⽤户已接收到的部分⾏情失效。
⽤户发现数据中⼼切换后,应尝试与⾏情查询服务重新建立TCP连接,并查询最新主题⾏情快照。
在重新进入⾏情接收状态前,⽤户应丢弃所有已接收到的⼤于本次数据中⼼切换有效快照编号的⾏情快照。
注:⽤户须加入所有中⼼的组播组,否则发⽣数据中⼼切换后可能收不到新的增量⾏情。

8.结束语 本文档介绍了平台和⾏情客户端交互的协议和接⼝规范。
如有任何疑问,请联系:FdTecSys@

标签: #条件 #ce #cvt #complete #牌子 #channel #牌子 #cinema