2016-03-04 111 views
1

在與我們的經紀公司打開訂單後,我們希望從ExecutionReport消息中獲得填充價格。下面你會找到使用的回調代碼。QuickFIX/J:未收到ExecutionReport消息

MarketDataSnapshotFullRefresh消息已正確接收,但第二個if塊從不觸發。奇怪的是,相應的messages.log文件確實包含多個35=8消息。

我們使用QuickFIX/J作爲FIX引擎。

@Override 
public void fromApp(Message message, SessionID sessionID) throws FieldNotFound, IncorrectDataFormat, IncorrectTagValue, UnsupportedMessageType { 
    if (message instanceof MarketDataSnapshotFullRefresh) { 
     // do stuff with MarketDataSnapshotFullRefresh 
    } 

    if(message instanceof ExecutionReport) { 
     // do stuff with ExecutionReport 
    } 

回答

1

@DumbCoder並不是那麼愚蠢;-),他提出了一個有效的觀點。消息破解應該由quickfix.MessageCracker完成。

怎麼樣?閱讀如何在這裏:QuickFIX/J User Manual - Receiving Messages


消息在fromApp未來並不像在quickfix/J庫中定義的特定消息類型,但quickfix.Message類型。如果你想處理這些你現在正在做的(從fromApp)的方式,你必須手動檢查MsgType

MsgType msgType = (MsgType) message.getHeader().getField(new MsgType()); 

根據檢索到的類型,你會調用處理方法爲特定的消息類型:

if(msgType.valueEquals(MsgType.MARKET_DATA_SNAPSHOT_FULL_REFRESH)) 
    handleMarketDataSnapshotFullRefresh(message, sessionID); 
else if ... 

...

private void handleMarketDataSnapshotFullRefresh(quickfix.Message msg, SessionID sessionID) { 
    // handler implementation 
} 

如前所述,處理傳入消息的更好方法是通過MessageCracker。你可以擴展實現quickfix.Application的類quickfix.MessageCracker

使用兩個參數添加一個onMessage方法,首先是消息類型,其次是SessionID。從fromApp方法呼叫crack,該方法將路由到適當的處理程序。

import quickfix.*; 

public class MyApplication extends MessageCracker implements Application 
{ 
    public void fromApp(Message message, SessionID sessionID) 
      throws FieldNotFound, UnsupportedMessageType, IncorrectTagValue { 
     crack(message, sessionID); 
    } 

    @Handler 
    public void onMessage(quickfix.fix44.MarketDataSnapshotFullRefresh mdsfr, SessionID sessionID) { 
     // handler implementation 
    } 
} 
2

你爲什麼要在錯誤的地方進行消息處理?如果您檢查Quickfix推薦的內容,您會看到他們建議在onMessage(您可能尚未實施)中發生消息處理。在fromApp方法中應該只存在一個消息解密器。

否則你的fromApp方法將成爲代碼的一大熱門,處理你的代碼的下一個人不會是一個快樂的靈魂。

+0

爲了OP:更多細節在[**的QuickFix/J用戶手冊 - 接收信息**](http://www.quickfixj.org/quickfixj/usermanual/1.5.3/usage/receiving_messages.html ) –