2017-03-24 8 views
0

FIX4.4メッセージにPartyIDグループを追加しようとしています。FIXパーティIDグループを作成するにはどうすればいいですか?

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クラスには、これらの新しいフィールドの更新されたフィールドとアクセサが含まれます。

関連する問題