从QuickFIX消息中获取字段

5
我正在使用Python的QuickFIX。在文档页面这里,我们得知如何获取字段。假设从交易对手那里收到了一个message = fix.message(使用quickfix as fix),我可以通过调用以下代码获取35(MsgType)字段: message.getHeader().getField(fix.MsgType()) 例如返回 35=X
我的问题是:是否有任何一种方法只返回X?还是我必须像35=X[3:]这样切片所有内容,并因此知道所有字符串的长度?
3个回答

3
答案是先调用 message.getHeader().getField(fix.MsgType()) 获取字段,然后再调用 fix.MsgType().getValue() 获取值。

3
我无法使这个工作起来……最终我做了类似如下的事情:message.getHeader().getField(fix.MsgType().getField()) - ernie

3

我使用一个小工具函数

def get_field_value(self, fobj, msg):
    if msg.isSetField(fobj.getField()):
        msg.getField(fobj)
        return fobj.getValue()
    else:
        return None

我这样调用

clordid = get_field_value(fix.ClOrdID(), message)

对于头部字段,将会像这样。
def get_header_field_value(self, fobj, msg):
    if msg.getHeader().isSetField(fobj.getField()):
        msg.getHeader().getField(fobj)
        return fobj.getValue()
    else:
        return None

0

如果您使用强类型方法,即:

m.getHeader().getField(new MsgType());

请原谅我的无知,new MsgType() 是什么? - Wapiti
1
这是标签35的“字段名称”。请参阅http://www.fixtradingcommunity.org/FIXimate/FIXimate3.0/en/FIX.5.0SP2/tag35.html,因此如果您想要任何“字段名称”(基本上是QF类型),则可以使用`new FieldName()并且QF应该会为您解决。例如:m.getHeader().getField(new SenderCompID()).getValue();m.get(new SettlDate());` - rupweb
m.getHeader().getField(new FieldName()) 其中 FieldName 是您想要获取数据的字段名称... 您将获得 qf 类型,因此您可以使用 getValue() 获取大多数 qf 类型的字符串值。 - rupweb
我在PYTHON中没有尝试过这个,但大概就像QFJ一样。 - rupweb
啊,我明白了。嗯,这在Python中行不通!如果Java中的new FieldName()初始化一个新类,那么在Python中,fix.FieldName()基本上就是在做同样的事情。这又回到了我的最初的问题。 - Wapiti
在Java中,代码m.getHeader().getField(new MsgType());返回像您要求的X一样的结果... - rupweb

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接