2017-03-24 6 views
0

FIX4.4 메시지에 PartyID 그룹을 추가하려고합니다.FIX partyID 그룹은 어떻게 만듭니 까?

PartyID에 "그룹"을 찾을 수 없습니다. 그래서 순차적으로 추가하고 있습니다.

NoPartyIDs, PartyRole, PartyIDSource는, 그러나

을 PartyID, 내가 추가 어느 방법, 수정 엔진은 그 순서를 나타납니다.

어떻게해야합니까? 아니면 주문을 지정하는 방법이 있습니까?

public QuickFix.FIX44.MarketDataRequest QueryMarketDataRequest44(string symbol) 
    { 
     MDReqID mdReqID = new MDReqID("RqID"+symbol); 
     SubscriptionRequestType subType = new SubscriptionRequestType(SubscriptionRequestType.SNAPSHOT_PLUS_UPDATES); 
     MarketDepth marketDepth = new MarketDepth(1); 

     QuickFix.FIX44.MarketDataRequest.NoMDEntryTypesGroup marketDataEntryGroup = new QuickFix.FIX44.MarketDataRequest.NoMDEntryTypesGroup(); 

     QuickFix.FIX44.MarketDataRequest.NoRelatedSymGroup symbolGroup = new QuickFix.FIX44.MarketDataRequest.NoRelatedSymGroup(); 
     symbolGroup.Set(new Symbol(symbol)); 


     QuickFix.FIX44.MarketDataRequest message = new QuickFix.FIX44.MarketDataRequest(mdReqID, subType, marketDepth); 
     message.Set(new MDUpdateType(0)); 
     message.AddGroup(symbolGroup); 

     QuickFix.Fields.NoPartyIDs noPartyIDs = new QuickFix.Fields.NoPartyIDs(1); 
     QuickFix.Fields.PartyID partyID = new QuickFix.Fields.PartyID("XXXX"); 
     QuickFix.Fields.PartyIDSource partyIDSource = new QuickFix.Fields.PartyIDSource('D'); 
     QuickFix.Fields.PartyRole partyRole = new QuickFix.Fields.PartyRole(35); 

     message.SetField(noPartyIDs); 
     message.SetField(partyRole); 
     message.SetField(partyIDSource); 
     message.SetField(partyID);    

     return message; 
    } 

답변

0

이것은 나를 위해 일했습니다. Quote.NoPartyIDsGroup을 사용했습니다. 그와 같은 그룹이 MarketDataRequest에 없다는 것은 이상합니다.

QuickFix.Fields.NoPartyIDs noPartyIDs = new QuickFix.Fields.NoPartyIDs(1); 
      QuickFix.Fields.PartyID partyID = new QuickFix.Fields.PartyID(lp); 
      QuickFix.Fields.PartyIDSource partyIDSource = new QuickFix.Fields.PartyIDSource('D'); 
      QuickFix.Fields.PartyRole partyRole = new QuickFix.Fields.PartyRole(35); 

      QuickFix.FIX44.Quote.NoPartyIDsGroup group = new Quote.NoPartyIDsGroup(); 

      group.SetField(noPartyIDs); 
      group.SetField(partyRole); 
      group.SetField(partyIDSource); 
      group.SetField(partyID); 

      message.AddGroup(group); 
0

내가 이런 걸 사용 : 내 데이터 사전에 다음

NoPartyIDs noPartyIDs = new NoPartyIDs(); 
noPartyIDs.setTag(new PartyID()); 
noPartyIDs.setTag(new PartyIDSource()); 
noPartyIDs.setTag(new PartyRole()); 
m.addGroup(noPartyIDs); 

와 나는 순서가 데이터 사전에 설정되어 생각

<component name="Parties"> 
    <group name="NoPartyIDs" required="N"> 
    <field name="PartyID" required="N" /> 
    <field name="PartyIDSource" required="N" /> 
    <field name="PartyRole" required="N" /> 
    <group name="NoPartySubIDs" required="N"> 
     <field name="PartySubID" required="N" /> 
     <field name="PartySubIDType" required="N" /> 
    </group> 
    </group> 
</component> 

...

+1

그래,이게 효과가 있다고 생각합니다. –

+0

나는 그것을 시도 할 것이다 - 그러나 나는 나의 자신의 해결책을 발견했다. – ManInMoon

0

코드가 그룹을 추가하지 않습니다. 메시지 본문의 최상위 레벨에 4 개의 개별 태그를 메시지에 추가합니다. FIX 사양에 따라 본문의 필드 순서는 반복되는 그룹 외부와는 관련이 없습니다. 이 스펙 때문에 QF 엔진은 (반복 그룹이 아닌) 필드의 순서를 기록하지 않습니다. 숫자 순서대로 표시합니다.

요약하면 전체 접근 방식이 잘못되어 작동하지 않습니다.

Parties 그룹이 실제로 DD에 따라 MarketDataRequest에 속하지 않기 때문에 rupweb의 대답이 작동 할 것이라고 생각합니다. 나가는 메시지의 경우 엔진이 DD에 대해 확인하지 않으므로 작동합니다.

제대로하려면 DataDictionary를 편집하여 메시지에 그룹을 추가 한 다음이 새 DD로 QF/n 소스를 다시 생성 한 다음 엔진을 다시 작성하는 것이 좋습니다. 이렇게하면 MarketDataRequest 클래스에는 이러한 새 필드에 대한 업데이트 된 필드와 접근자가 포함됩니다.