【问题标题】:Converting a binary sequence read from a file into a fixed point number将从文件读取的二进制序列转换为定点数
【发布时间】:2012-04-13 15:49:49
【问题描述】:

我正在尝试解析其中包含 ITCH 消息的文件:

http://www.nasdaqtrader.com/Trader.aspx?id=DPSpecs_USEquities#TVITCH¬ http://www.nasdaqtrader.com/content/technicalsupport/specifications/dataproducts/NQTV-ITCH-V4_1.pdf¬

每个价格都表示为一个 32 位定点数,包含 18 个整数位和 14 个小数位。 (6 个整数位,后跟 4 个小数位)

例如

200,000.0000
110000110101000000 00000000000000

我看过 struct 类,但它只处理整个字节,因为它用于从二进制编码的 c 结构转换。

我查看了 decimal.Decimal 模块,但您似乎只能使用字符串对其进行实例化,这假设您已经拥有字符串格式的数字。

【问题讨论】:

    标签: python binary fixed-point algorithmic-trading datafeed


    【解决方案1】:

    Python 的struct.unpack() 正是您所需要的。您只需要制定适当的格式字符串,以便模块可以知道哪些字段在哪里以及它们具有哪些二进制格式,并且您应该能够快速解码您的数据。

    你用比特来解释事情,但这不是 ITCH 真正的工作方式。固定十进制字段实际上是 N 字节长,隐含了一些十进制移位。因此,您可以将价格字段读取为整数,然后将其除以 1e4 以获得浮点值。

    【讨论】:

    • Struct.unpack 不起作用 - 因为 OP 具​​有以 ASCII 表示的二进制基数中的数字。
    • 我想你不明白他试图解析什么格式。您是否了解 OP 中链接的 ITCH 4.1 是二进制协议,并且不使用 ASCII 表示数字?
    • 干杯约翰,刚刚提取了一些添加消息,并根据过去的价格检查了它们,看来你是对的。现在感觉有点傻,因为它是如此明显以至于它只是 div 1000。
    • 我会对此投赞成票,但据说我还没有足够的代表:/.
    • @JohnZwinck:确实,我的错。感谢您指出这一点。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-11-24
    • 1970-01-01
    • 1970-01-01
    • 2011-04-18
    • 2019-12-03
    • 2016-05-02
    • 2020-06-28
    相关资源
    最近更新 更多