上交所level2 fast行情解析
- 什么是fast/step?
- fast只是一种编码格式,将step数据进行编码,上交所的level2行情采用fast+step的形式传输,上获取到的行情数据图
图片中的字段信息可以在《上海证券交易所LDDS系统level - 2 行情接口说明》《上海证券交易所低延时行情发布系统(LDDS)接口说明书》找到,我接收的行情是从券商来的,所以有什么vss, vde(vss就是我们的程序,vde就是我们需要连接的行情源地址),其中有几个字段比较重要,tag35、tag95、tag96。tag35是行情的类型(指数、快照、逐笔。。。)tag95 是fast 数据长度,在解fast的时候有用,tag96里面就是经过fast编码的数据,也就是我们需要解析的数据,注意!!!!本图只展示了UA3202,还有很多其他类型的数据,比如心跳(心跳就没有95,96这些,所以解析的时候需要注意行情类型),tag96的数据是二进制的,所以我们打印不出来。
- fast只是一种编码格式,将step数据进行编码,上交所的level2行情采用fast+step的形式传输,上获取到的行情数据图
- 如何连接行情源
- 就是udp与tcp的连接,么有什么好讲的,跟行情源对接就好了,在这里我说一下udp与tcp,个人觉得udp的协议好做多了,不用各种判断,不用解决粘包的问题,只管收数据就行了,美滋滋,如果只有tcp,那么就需要自己解析出一个完整的包,再去进行解码。至于怎么解决粘包,怎么取出完整的包,网上一大推这种的,套用规则就行了,只不过我提醒一下,或许也可能是我自己的问题,在刚开始我用结尾tag(10=三位校验和)去判断数据是否读出了一个完整的,我是从头读到tag10,貌似在经过fast数据的时候会读到很多意想不到的数据,而且这种方式也很浪费时间,最后我采用 tag95这来判断获取到的是不是一个完整的包。我只需要逐笔、快照、指数,其他我都过滤了。
- 如何解码
- 如何解头部? 上交所level2行情就是step数据+fast数据,fast数据是被嵌入在tag96中,对于头部step数据的解析我是采用一个字节一个字节的读比如35=UA3202<SOH>,在读到soh(0x01)的时候就标识着我们可以把这一小部分数据拿出来了,拿出来这个字符串之后,比如是读 35=UA3202, 那么用((*(uint32_t*)start) & 0x0000FFFF) == 0x00003533) 位运算来比较,更快。比较了等于35,那么接下来只需要把等号后面的UA3202拿出来就行了,由于这个数据定长,所以就很方便了,直接取等号后面5个字节就行了
- 解码工具
- 我使用的是mfast,git上有例子,fast所使用的模板自己写麻烦,而且贼容易写错,我是问券商要的。fast数据解码之后,使用rapidjson将数据取出来,或者你用其他的也可以,都一样。
- 不得不说,上海的level真的麻烦,而且给的文档不清楚,或许是我自己太笨,哈哈,如果有需要的可以联系我