2015-10-12 29 views
2

我正在使用quickfix與python。查看文檔頁面here告訴我們如何獲取字段。說一個message = fix.message(與quickfix as fix)來自交易對手。我可以通過調用從quickfix消息獲取字段

message.getHeader().getField(fix.MsgType())

返回,例如35=X得到35(MSGTYPE)字段。

我的問題是:有什麼方法只是返回X?還是我必須切片的一切(如35=X[3:],它返回X),因此知道所有的字符串的長度?

回答

1

答案是先調用message.getHeader().getField(fix.MsgType()) 然後通過調用fix.MsgType().getValue()獲得的價值得到了現場。

+0

我無法得到這個工作。 。 。我最終做了這樣的事情: 'message.getHeader()。getField(fix.MsgType()。getField())' – ernie

0

是,如果你使用強類型的方法,即:

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

請原諒我的無知,但什麼是'新的MsgType()'? – Wapiti

+1

這是標籤35的「字段名稱」。請參見http://www.fixtradingcommunity.org/FIXimate/FIXimate3.0/en/FIX.5.0SP2/tag35.html,所以如果您想要任何「字段名稱」(即基本上是一個QF類型),然後去'新的FieldName()'和QF應該爲你排序。例如:'m.getHeader()。getField(new SenderCompID())。getValue();''或'm.get(new SettlDate());' – rupweb

+0

m.getHeader()。getField(new FieldName() )'其中'FieldName'是你想要的數據的字段名稱...你可以返回qf類型,所以你可以通過'getValue()'獲得大多數qf類型的字符串值。 – rupweb

0

我用一個小util的功能

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