【问题标题】:quickfix sendingtime (field 52) dropping millisecondsquickfix 发送时间(字段 52)下降毫秒
【发布时间】:2013-01-27 05:22:05
【问题描述】:

我正在使用 Python API 运行 QuickFix,并使用 FIX4.2 连接到 TT FIX 适配器

我已成功登录并发送市场数据请求。回复很好。在我的消息日志(屏幕日志和文件日志)中,我得到了一个 SendingTime(字段 52),看起来像这样:

52=20130207-02:38:32.212

但是,当我尝试获取此字段并将其打印到终端或文件时,除了删除毫秒之外,一切都相同。所以结果总是:

52=20130207-02:38:32

显然这很糟糕。我想不出为什么一开始会出现毫秒,然后在我访问它们时被丢弃。

也许这是 Python 的产物,它使用 '.' 访问属性特点?但这似乎很愚蠢,因为 SendingTime 是一个字符串,最后我检查了字符串中是否允许句点。

任何帮助都会很棒,我真的很希望能够将准确的时间戳打印到文件中。

谢谢,

马鹿

【问题讨论】:

    标签: python python-2.7 timestamp quickfix timestamping


    【解决方案1】:

    尝试使用 FieldMap 的 const std::string & getField (int field) 函数提取字段。这会将您的字段作为字符串获取,而无需尝试将其转换为日期类型。我敢打赌,这将保留毫秒,至少在文本上。

    抱歉,我不知道为什么 Python 会丢失 ms。我只是不太了解 Python 包装器。

    编辑:不,不是正确的答案。我不知道您没有从标题中提取该字段。 (当然,您仍然可以在标题上使用此功能。)

    【讨论】:

    • 非常感谢您回答我的问题。我对编程和 FIX 都是新手(大约一个月),仅通过阅读其他人的困惑的答案,我就学到了很多东西。我看过你的帖子,很高兴能得到你的帮助。我对你建议我看的 FieldMap 函数有点困惑。它与我使用的.getField() 方法有什么不同,或者这正是您的建议?再次感谢@Grant!
    • 这个版本采用一个整数参数,它是一个标签。返回值将是原始消息中显示的字段的字符串值——QF 不会尝试将其转换为另一种类型(如 int 或 double 或时间戳)。
    【解决方案2】:

    我通过指定 getField 函数来查看标题解决了我的问题。所以:

    sendingTime= quickfix.SendingTime()

    print sendingTime, "\n"

    message.getHeader().getField(sendingTime)

    print sendingTime, "\n"

    第一行将是发送时间,以毫秒为单位(我不知道为什么),它看起来像 52=20130207-02:38:32

    第二个打印行实际上查看 标题(字段 52 所在的位置)并获取整个字段,它看起来像:

    52=20130207-02:38:32.212

    这解释了为什么当我尝试 message.getField(sendingTime) 时收到 Field not Found 错误。

    【讨论】:

    • 好收获。下次您发布问题时,您应该包含一些代码。如果我看过代码,我可能已经注意到你没有看标题。
    猜你喜欢
    • 2020-03-18
    • 2013-06-20
    • 2013-02-23
    • 2015-01-03
    • 2015-11-06
    • 2019-04-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多