private IEnumerable<NoMDEntriesGroup> GetAllNoMDEntries(QuickFix.FIX42.MarketDataSnapshotFullRefresh msg) { int count = message.NoMDEntries.getValue(); QuickFix.FIX42.MarketDataSnapshotFullRefresh.NoMDEntriesGroup repeatingMDItem = new QuickFix.FIX42.MarketDataSnapshotFullRefresh.NoMDEntriesGroup(); for (int i = 1; i <= count; i++) { message.GetGroup(i, repeatingMDItem); yield return new NoMDEntriesGroup { Symbol = repeatingMDItem.GetField(55), TickBandNoDecPlaces = int.Parse(repeatingMDItem.GetField(5071) }; } }
//Receive market data public void OnMessage(QuickFix.FIX42.MarketDataSnapshotFullRefresh message, SessionID session) { decimal _bidPrice = 0.00M; decimal _askPrice = 0.00M; try { QuickFix.Group noMDEntriesGrp = new QuickFix.FIX42.MarketDataSnapshotFullRefresh.NoMDEntriesGroup(); for (int grpIndex = 1; grpIndex <= message.GetInt(QuickFix.Fields.Tags.NoMDEntries); grpIndex += 1) { noMDEntriesGrp = message.GetGroup(grpIndex, QuickFix.Fields.Tags.NoMDEntries); if (noMDEntriesGrp.IsSetField(QuickFix.Fields.Tags.BidPx)) { _bidPrice = QuickFix.Fields.Converters.DecimalConverter.Convert(noMDEntriesGrp.GetField(QuickFix.Fields.Tags.BidPx)); } if (noMDEntriesGrp.IsSetField(QuickFix.Fields.Tags.OfferPx)) { _askPrice = QuickFix.Fields.Converters.DecimalConverter.Convert(noMDEntriesGrp.GetField(QuickFix.Fields.Tags.OfferPx)); } } string SecEx = null; string symbol = null; string secID = null; QuickFix.Fields.SecurityExchange se = new QuickFix.Fields.SecurityExchange(); if (message.IsSetField(se)) { SecEx = message.GetField(se).ToString(); } QuickFix.Fields.Symbol s = new QuickFix.Fields.Symbol(); if (message.IsSetField(s)) { symbol = message.GetField(s).ToString(); } QuickFix.Fields.SecurityID sid = new QuickFix.Fields.SecurityID(); if (message.IsSetField(sid)) { secID = message.GetField(sid).ToString(); } updatePrices(SecEx, symbol, secID, _bidPrice, _askPrice); } catch (Exception ex) { updateDisplay(string.Format("QuickFIX Error: {0}", System.Reflection.MethodBase.GetCurrentMethod().Name)); log.WriteLog(string.Format("{0} : {1}", System.Reflection.MethodBase.GetCurrentMethod().Name, ex.ToString())); } }