jvQuant level2行情协议解析

行情解析

jvQuant行情推送用的websocket协议,行情传输使用的是无标志的压缩二进制流。需要注意解压缩的方法。

可以参考官方的Demo:GitHub - jvQuant/OpenAPIDemo jvQuant OpenAPI Demo

压缩协议

当压缩后的数据没有明确的标志位(如文件头或文件尾标记)时,解压过程通常依赖于以下几个因素:

  1. 了解压缩算法
    • 首先,需要明确使用的是哪种压缩算法。不同的压缩算法有不同的解压方式。在zlib的情况下,它提供了一套标准的压缩和解压函数,因此你需要确保使用的是zlib的压缩函数进行压缩的。
  2. 完整的压缩数据
    • 解压过程需要完整的压缩数据。如果数据在传输或存储过程中被截断或损坏,解压可能会失败。
  3. 压缩数据的长度
    • 在某些情况下,你可能需要知道压缩数据的长度(或至少是一个足够大的缓冲区来容纳解压后的数据)。zlib的uncompress函数需要知道输出缓冲区的大小,并在解压后更新这个大小以反映实际解压出的数据长度。
  4. 使用正确的解压函数
    • 使用zlib进行解压时,应使用uncompress函数(或对于gzip格式的文件,使用inflateInitinflateinflateEnd等函数序列)。确保调用这些函数时传入了正确的参数,包括指向压缩数据的指针、压缩数据的长度、指向解压数据缓冲区的指针以及解压数据缓冲区的大小(传址调用)。
  5. 错误处理
    • 解压过程中可能会遇到各种错误,如内存不足、输出缓冲区太小、输入数据损坏等。zlib的解压函数会返回错误代码,你应该检查这些错误代码并根据需要进行错误处理。
  6. 示例代码
    • 你可以参考zlib的官方文档或示例代码来了解如何正确使用解压函数。以下是一个简化的示例,展示了如何使用zlib的uncompress函数来解压数据:

解压方法

在Java中,如果你使用Inflater(true)来创建一个Inflater对象并设置nowrap参数为true,这意味着你正在处理一个不使用zlib包装(即没有zlib头部和校验和)的原始DEFLATE数据流。在C++中,要实现相同的解压功能,你需要使用zlib库中的inflate函数,并适当设置其参数来模拟nowrap模式。

然而,需要注意的是,zlib的API并不直接提供一个类似于Java Inflater(true)的构造函数或单个函数调用来启用nowrap模式。相反,你需要通过调用inflateInit2(而不是inflateInit)并指定窗口位大小(通常是MAX_WBITS的某个值)来启用nowrap模式。对于nowrap模式,你应该将窗口位大小设置为-MAX_WBITS(即-15,如果MAX_WBITS定义为15)

Python

Python解压缩好弄,看官方文档使用

zlib.decompress(message, -zlib.MAX_WBITS)

增加MAX_WBITS标志位即可。

PHP

PHP使用gzinflate()方法。

Golang

Golang用flate.NewReader也可以解压。

JAVA

JAVA 需要注意,需使用Inflater(true)来创建一个Inflater对象并设置nowrap参数为true,这意味着你正在处理一个不使用zlib包装(即没有zlib头部和校验和)的原始DEFLATE数据流。

Inflater inflater = new Inflater(true);

C++

C++也需要设置MAX_WBITS标志位,使用inflateInit2方法。

ret = inflateInit2(&strm, -MAX_WBITS);

参考资料

详细代码可以参考:

GitHub - jvQuant/OpenAPIDemo: jvQuant OpenAPI Demo 

jvQuant量化OpenAPI 开发文档

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值