2017-02-24 14 views
0

Wenn ich versuche, meine Fix-Nachricht zu analysieren, schlägt es fehl, das "Feld 134 wird nicht gefunden". Aber wenn ich die Nachricht im Debugger sehe, ist das Tag 134 vorhanden. Ich habe mein Datenwörterbuch überprüft und es scheint auch in Ordnung zu sein.Fix-Tag nicht gefunden, wenn bereits vorhanden

Unten ist mein Code.

var QuoteGroup = 
       new QuickFix.FIX44.MassQuote.NoQuoteSetsGroup(); 
      msg.GetGroup(1, QuoteGroup); 
      //bid group 

      bidQty = Int32.Parse(QuoteGroup.GetString(134)); 
      string offerQty1 = QuoteGroup.GetField(135); 

      string bidPriceStr = QuoteGroup.GetField(tag: 188); 
      float.TryParse(bidPriceStr, out bidPrice); 

Fix Nachricht: 20.170.224-20: 55: 27,640: 8 = FIX.4.4 | 9 = 132 | i = 35 | 34 = 2 | = 49 XCD12 | 52 = 20.170.224 bis 20: 55: 30,274 | 56 = Q051 | 117 = 1 | 296 = 1 | 302 = AVG | 295 = 1 | 299 = 0 | 134 = 2000000 | 135 = 2000000 | 188 = 1,24556 | 190 = 1,24561 | 10 = 027 |

Unten ist die DD:

<message name="MassQuote" msgtype="i" msgcat="app"> 
    <field name="QuoteReqID" required="N" /> 
    <field name="QuoteID" required="N" /> 
    <field name="QuoteType" required="N" /> 
    <field name="QuoteResponseLevel" required="N" /> 
    <component name="Parties" required="N" /> 
    <field name="Account" required="N" /> 
    <field name="AcctIDSource" required="N" /> 
    <field name="AccountType" required="N" /> 
    <field name="DefBidSize" required="N" /> 
    <field name="DefOfferSize" required="N" /> 
    <group name="NoQuoteSets" required="Y"> 
    <field name="QuoteSetID" required="Y" /> 
    <component name="UnderlyingInstrument" required="N" /> 
    <field name="QuoteSetValidUntilTime" required="N" /> 
    <field name="TotNoQuoteEntries" required="Y" /> 
    <field name="LastFragment" required="N" /> 
    <group name="NoQuoteEntries" required="Y"> 
     <field name="QuoteEntryID" required="Y" /> 
     <component name="Instrument" required="N" /> 
     <group name="NoLegs" required="N"> 
     <component name="InstrumentLeg" required="N" /> 
     </group> 
     <field name="BidPx" required="N" /> 
     <field name="OfferPx" required="N" /> 
     <field name="BidSize" required="N" /> 
     <field name="OfferSize" required="N" /> 
     <field name="ValidUntilTime" required="N" /> 
     <field name="BidSpotRate" required="N" /> 
     <field name="OfferSpotRate" required="N" /> 
     <field name="BidForwardPoints" required="N" /> 
     <field name="OfferForwardPoints" required="N" /> 
     <field name="MidPx" required="N" /> 
     <field name="BidYield" required="N" /> 
     <field name="MidYield" required="N" /> 
     <field name="OfferYield" required="N" /> 
     <field name="TransactTime" required="N" /> 
     <field name="TradingSessionID" required="N" /> 
     <field name="TradingSessionSubID" required="N" /> 
     <field name="SettlDate" required="N" /> 
     <field name="OrdType" required="N" /> 
     <field name="SettlDate2" required="N" /> 
     <field name="OrderQty2" required="N" /> 
     <field name="BidForwardPoints2" required="N" /> 
     <field name="OfferForwardPoints2" required="N" /> 
     <field name="Currency" required="N" /> 
    </group> 
    </group> 

Bitte lassen Sie mich wissen, wenn Sie weitere Informationen benötigen.

Antwort

2

Sie versuchen, 134 aus der QuoteSet-Gruppe zu extrahieren, statt der QuoteEntry-Gruppe, die darin verschachtelt ist.

Ihre Nachricht, eingekerbt nach Gruppen:

 var QuoteGroup = 
      new QuickFix.FIX44.MassQuote.NoQuoteSetsGroup(); 
     msg.GetGroup(1, QuoteGroup); 

     var QuoteEntry = 
      new QuickFix.FIX44.MassQuote.NoQuoteSetsGroup.NoQuoteEntriesGroup(); 
     QuoteEntry.GetGroup(1, QuoteEntry); 

     bidQty = Int32.Parse(QuoteEntry.GetString(134)); 
:

296=1 NoQuoteSets 
    302=AVG 
    295=1 NoQuoteEntries 
    299=0 
    134=2000000 
    135=2000000 
    188=1.24556 
    190=1.24561 

Der Code sollte so etwas wie dieses

Verwandte Themen