2017-03-24 33 views
0

我正在嘗試將PartyID組添加到FIX4.4消息中。我找不到PartyID的「組」。所以我按順序添加它們。如何創建FIX partyID組?

NoPartyIDs,成員角色,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

您的代碼不添加組。它將在消息Body的頂層添加4個單獨的標籤。根據FIX規範,正文中字段的順序與重複組之外無關。由於該規範,QF引擎不記錄(非重複組)字段的任何順序。它只是把它們按數字順序排列。

總結:您的整個方法是錯誤的,不會奏效。

我認爲rupweb的答案會起作用,雖然這有點破解,因爲根據DD,Parties組實際上並不屬於MarketDataRequest。對於傳出的消息,引擎不檢查DD,所以它會工作。

爲了做到這一點,我建議您編輯您的DataDictionary以將該組添加到消息中,然後使用此新DD重新生成QF/n源,然後重新構建引擎。這樣,您的MarketDataRequest類將包含這些新字段的更新字段和訪問器。