QuickFIX/J:未收到执行报告消息



与我们的经纪公司开立订单后,我们希望从ExecutionReport消息中获取成交价。您将在下面找到使用的回调代码。

正确接收MarketDataSnapshotFullRefresh消息,但永远不会触发第二个if块。奇怪的是,相应的消息.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
    }

消息处理最好由quickfix.MessageCracker完成,尽管有时在fromApp中处理它们是要走的路。

您可以在此处阅读有关消息破解的更多信息:QuickFIX/J 用户手册 - 接收消息。

我将概述两种方式:


  1. fromApp

    传入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
    }
    

  1. 使用MessageCracker

    如前所述,处理传入消息的另一种方法是通过 MessageCracker .例如,您可以使用 quickfix.MessageCracker 扩展实现quickfix.Application的类。

    添加具有两个参数的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
        }
    }
    

为什么你在错误的地方进行消息处理?如果您检查 Quickfix 的建议,您将看到他们建议在 onMessage 中进行消息处理(您可能尚未实现)。并且应该只存在一个消息破解程序 from App方法。

否则,您的fromApp方法将成为代码的大杂烩,下一个处理您的代码的人不会是一个快乐的灵魂。

最新更新