【问题标题】:How to get SessionID in QuickFix如何在 QuickFix 中获取 SessionID
【发布时间】:2015-04-13 17:34:23
【问题描述】:

我在 Python 中使用 QuickFix。在this 问题的后面,我稍微探索了 SessionID 类,但我对这种行为感到困惑。

SessionID 类描述为here。它由 BeginString、SenderCompID 和 TargetCompID 组成。

假设我的 SessionID 字符串形式如下所示:FIX.4.2:LMXTS->TS68。

fix.SessionID().fromString() 返回:->

如果你看的话,这三个填充字符是分隔 BeginString、SenderCompID 和 TargetCompID 的。

fix.SessionID().getBeginString 返回8=☺(即 BeginString 不存在)。同样的事情也适用于getSenderCompIDgetTargetCompID,它们分别返回49=☺56=☺

fix.SessionID().getTargetCompID().getValue() 返回空字符串''

尝试另一种方式,fix.SessionID().fromString('FIX.4.2:LMXTS->TS68') 返回None

我试图在创建会话之后获取这些值(当我将fix.ScreenLogFactory(settings) 传递给发起者时,我可以明确看到发生的情况。所以我很困惑。

【问题讨论】:

  • 什么告诉您会话已创建?
  • 你调用 start() 了吗?
  • 当我在 screenLog 模式下启动 QF 时,它会在创建 <20150413-17:43:15.863, FIX.4.2:LMXTS->TS68, event> (Created session) 时打印出来。是的,我也尝试启动启动器,但得到了相同的结果。
  • Application.h 中的方法void onLogon( const SessionID& ) {} 在会话登录时被触发,并为您提供对SessionID 的引用。您可以检查 onLogon 内的 SessionID 对象以查看其行为方式。
  • 所以我想知道是否有某种方法可以做这样的事情并且有。 def onLogon (self, sessionID): print sessionID(有适当的缩进)给了我我需要的东西。我可以在onLogon 中调用sessionID.to_string()(我也可以在toApp 等中调用),并以这种方式区分我的会话。有用!如果您想将此作为解决方法发布,我会接受。更多的互联网点给你。

标签: python python-2.7 quickfix fix-protocol


【解决方案1】:

Application.h 中的方法void onLogon( const SessionID& ) {} 在会话登录时被触发,并为您提供对SessionID 的引用。您可以检查 onLogon 中的 SessionID 对象以了解其行为方式。

【讨论】:

  • 不是fix.SessionID 的实际答案,而是一个很好的解决方法。谢谢。
【解决方案2】:

您可以在创建会话后使用任何快速修复方法,因为 sesionId 是参数之一。

触发的第一个方法是 onCreate,因此您可以将 sessionId 存储在您的类 var 中,然后在需要时重用以检索您的设置。您还可以使用其他答案之一中建议的 onLogon 方法。

以下示例

def onCreate(self, sessionID):
    self.session_id = sessionID
    target = sessionID.getTargetCompID().getString()
    sender = sessionID.getSenderCompID().getString()

【讨论】:

    【解决方案3】:

    听起来您是在创建会话之后直接查看会话,然后再登录等。这意味着您没有在 FromApp 或 ToApp 中使用断点来查看那里的会话属性。如果这样做,您将直接获得属性,即 SenderCompID 或 TargetCompID。

    我在我使用的对象中找不到方法 SessionID。你如何定义你的“修复”对象?

    【讨论】:

    • 嘿 rupweb。 fix 的定义如下:import quickfix as fix。方法SessionID 存在,因为当我调用它时它不会抛出错误。我尝试在onLogon() 方法中打印fix.SessionID().toString() 和变体,结果相同。我会在fromApptoApp 中尝试,然后告诉你情况如何。
    • 因此,将print fix.SessionID().toString() 嵌入toAppfromApp 在两种情况下都会返回:->(当我分别发送和接收消息时)。什么给了?
    • 你能做 fix.SessionID().SenderCompID 或 fix.SessionID().SenderCompID.toString() 或类似的吗?
    • 我会在有时间的时候尝试,但没有任何理由怀疑该行为与问题中描述的行为有任何不同...
    猜你喜欢
    • 2013-04-10
    • 2013-05-30
    • 1970-01-01
    • 2011-03-20
    • 1970-01-01
    • 1970-01-01
    • 2010-11-18
    • 1970-01-01
    • 2010-11-25
    相关资源
    最近更新 更多