2012-08-15 45 views
2

谁能告诉我,为什么我们需要在市场数据请求中使用重复组。我们应该根据市场数据请求从接受方收到什么回复/答复。请告诉我们如何在接受方一方收到市场数据请求?为什么在通过FIX请求市场数据时需要重复组?

发送市场数据请求

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); 
} 
+0

呃,上下文是什么?谁说你需要在市场数据请求中使用重复组,以及你在谈论什么请求? – 2012-08-15 07:46:08

+0

他正在谈论FIX重复组我只是通过推理,一旦我的咖啡已经到达我的大脑,他会回到他身边 – 2012-08-15 07:54:38

+0

删除'java'标签,因为这不一定与Java有任何关系。 – maba 2012-08-15 08:17:21

回答

4

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

+0

你能告诉我怎样才能接收/读取受让方的mkd请求。 – 2012-08-15 08:17:34

+0

这是我的代码。 '公共无效的onMessage(quickfix.fix44.MarketDataIncrementalRefresh消息,会话ID的sessionID) \t \t抛出FieldNotFound,UnsupportedMessageType,IncorrectTagValue { \t \t \t \t \t的System.out.println( “开消息:\t” +消息); \t}使用了错误的onMessage功能 \t' – 2012-08-15 08:19:09

+0

您选择 - 如果您收到一个市场数据请求需要使用的onMessage overlaod – 2012-08-15 08:32:13

相关问题