2

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

发送市场数据请求

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);
}
4

1 回答 1

4

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

于 2012-08-15T08:05:36.240 回答