在通过FIX申请市场数据时,为什么需要重复组?

时间:2012-08-15 07:06:55

标签: quickfix fix-protocol

任何人都可以告诉我,为什么我们需要在市场数据请求中使用重复组。我们应该从接受者那里收到针对市场数据请求的回复/回复。请告诉我们如何在接受方接收市场数据请求?

发送市场数据请求

public void sendMarketDataRequest(SessionID sessionId, String request, int ord){ // request new or old
        String bankName = "HBL";
        String mdReqCcyPair = "EURUSD";
        String mkdreqId = "010qwerty";

        SubscriptionRequestType type = new SubscriptionRequestType('1');
        if(request.equals("new")){
            reqId.put(mkdreqId, mkdreqId);
        }else{
            type.setValue('2');
        }

        quickfix.fix44.MarketDataRequest mdRequest = new quickfix.fix44.MarketDataRequest(new MDReqID(mkdreqId), type, new MarketDepth(1));
        mdRequest.setField(new quickfix.field.Symbol(mdReqCcyPair));
        mdRequest.setField(new Product(2));
        mdRequest.setField(new NoRelatedSym(1));
        mdRequest.setField(new MDUpdateType(0));
        mdRequest.setField(new NoMDEntryTypes(3));
        mdRequest.setField(new StringField(582, "1"));

        quickfix.fix44.MarketDataSnapshotFullRefresh.NoMDEntries group = new quickfix.fix44.MarketDataSnapshotFullRefresh.NoMDEntries();
            group.set(new MDEntryType('0'));
            group.set(new MDEntryPx(12.32));
            group.set(new MDEntrySize(10));
            group.set(new OrderID("OrderId"));
            mdRequest.addGroup(group);

            group.set(new MDEntryType('1'));
            group.set(new MDEntryPx(12.32));
            group.set(new MDEntrySize(10));
            group.set(new OrderID("OrderId"));
            mdRequest.addGroup(group);

        qCcyPair.substring(0, 3);
        mdRequest.setField(new Currency(mdReqDealtCcy));
        mdRequest.setField(new NoPartyIDs(1));
        mdRequest.setField(new PartyID(bankName));

        try{
            boolean re = Session.sendToTarget(mdRequest, sessionId);
            System.out.println(mdRequest);
            System.out.println(re);
        }catch(Exception e){e.printStackTrace();}
    }

收到结束代码

public void onMessage( quickfix.fix44.MarketDataRequest message,  SessionID sessionID )
                  throws FieldNotFound, UnsupportedMessageType, IncorrectTagValue {

                  System.out.println("On Message:   "+message);
}

1 个答案:

答案 0 :(得分:4)

市场数据请求通常不用于单个工具;您通常需要一组仪器的市场数据。重复组中的每个组代表您想要数据的工具。响应将取决于您的对手方以及您上次完成市场数据刷新的时间(通常为每日)。在您的初始请求后,然后按固定的时间表,您将收到完整的市场数据刷新消息。如果您的对手方支持日内更新模型,您将收到快照刷新消息,这些消息是部分数据刷新。快照消息仅提供自上次刷新(全部或部分)以来已更改的市场数据的更新,并且旨在成为较小的消息,因此希望降低延迟。并非所有交易对手都支持部分刷新。如果您在接收方那边接收市场数据请求(显然通常在卖方),您应首先提供完整的市场数据更新,涵盖所有要求的工具详细信息。是否支持增量更新是一项业务决策。