public void OnMessage(QuickFix.FIX44.MarketDataIncrementalRefresh msg, SessionID s) { var symbols = new HashSet <string>(); var entryType = new HashSet <string>(); for (int idx = 0; idx < msg.NoMDEntries.getValue(); idx++) { var item = new QuickFix.FIX44.MarketDataIncrementalRefresh.NoMDEntriesGroup(); msg.GetGroup(idx + 1, item); symbols.Add(item.Symbol.getValue()); if (MDEntryType.BID == item.MDEntryType.getValue()) { entryType.Add("BID"); } else if (MDEntryType.OFFER == item.MDEntryType.getValue()) { entryType.Add("OFFER"); } else if (MDEntryType.TRADE == item.MDEntryType.getValue()) { entryType.Add("TRADE"); } if (!_seen.Contains(item.Symbol.getValue()) && MDEntryType.TRADE != item.MDEntryType.getValue()) { //throw new Exception("Incremential before snapshot"); } } for (int idx = 0; idx < msg.NoMDEntries.getValue(); idx++) { var item = new QuickFix.FIX44.MarketDataIncrementalRefresh.NoMDEntriesGroup(); msg.GetGroup(idx + 1, item); if (item.Symbol.getValue() == DebugSymbol) { Console.WriteLine($"Received MarketDataIncrementalRefresh {msg.NoMDEntries.getValue()} items for {string.Join(",", symbols)} with {string.Join(",", entryType)} (lag: {(DateTime.UtcNow - msg.Header.GetDateTime(52)).TotalMilliseconds} / {(DateTime.UtcNow - item.MDEntryDate.getValue().Add(item.MDEntryTime.getValue().TimeOfDay)).TotalMilliseconds})."); } return; Console.WriteLine($"{item.MDEntryType} {item.MDUpdateAction} @ {item.Symbol}:"); if (item.IsSetMDEntryID()) { Console.WriteLine($" ID: {item.MDEntryID}"); } Console.WriteLine($" Date: {item.MDEntryDate}"); Console.WriteLine($" Time: {item.MDEntryTime}"); Console.WriteLine($" Px: {item.MDEntryPx}"); Console.WriteLine($" Size: {item.MDEntrySize}"); if (item.IsSetMDEntryOriginator()) { Console.WriteLine($" TakerSide: {item.MDEntryOriginator}"); } } Console.WriteLine($"--------------------------------------------------"); }
public void OnMessage(QuickFix.FIX44.MarketDataIncrementalRefresh m, SessionID s) { QuickFix.FIX44.MarketDataIncrementalRefresh.NoMDEntriesGroup group = new QuickFix.FIX44.MarketDataIncrementalRefresh.NoMDEntriesGroup(); m.GetGroup(1, group); var quote = new { Side = (group.MDEntryType.getValue() == MDEntryType.BID ? "Bid" : "Offer"), LP = group.MDEntryOriginator.getValue(), Security = group.MDEntryOriginator.getValue(), Price = group.MDEntryPx.getValue(), Quantity = group.MDEntrySize.getValue(), UpdateAction = group.MDUpdateAction.getValue() }; var trace = JsonConvert.SerializeObject(quote); Console.WriteLine(trace); System.IO.File.AppendAllText("trace.log", trace + "\r\n"); }
public void OnMessage(QuickFix.FIX44.MarketDataIncrementalRefresh msg, SessionID s) { for (int idx = 0; idx < msg.NoMDEntries.getValue(); idx++) { var trade = new QuickFix.FIX44.MarketDataIncrementalRefresh.NoMDEntriesGroup(); msg.GetGroup(idx + 1, trade); Console.WriteLine($"Trade {trade.MDUpdateAction} @ {trade.Symbol}:"); Console.WriteLine($" ID: {trade.MDEntryID}"); Console.WriteLine($" Date: {trade.MDEntryDate}"); Console.WriteLine($" Time: {trade.MDEntryTime}"); Console.WriteLine($" Px: {trade.MDEntryPx}"); Console.WriteLine($" Size: {trade.MDEntrySize}"); Console.WriteLine($" TakerSide: {trade.MDEntryOriginator}"); } Console.WriteLine($"--------------------------------------------------"); }
public void SendDateOnlyTimeOnlyConvertProblem() { // issue 135 QuickFix.FIX44.MarketDataSnapshotFullRefresh msg = new QuickFix.FIX44.MarketDataSnapshotFullRefresh(); msg.MDReqID = new MDReqID("1b145288-9c9a-4911-a084-7341c69d3e6b"); msg.Symbol = new Symbol("[N/A]"); msg.SecurityIDSource = new SecurityIDSource(SecurityIDSource.ISIN_NUMBER); msg.SecurityID = new SecurityID("BE0932900518"); msg.SecuritySubType = new SecuritySubType("EURO_EUR"); msg.NoMDEntries = new NoMDEntries(2); QuickFix.FIX44.MarketDataIncrementalRefresh.NoMDEntriesGroup grp = new QuickFix.FIX44.MarketDataIncrementalRefresh.NoMDEntriesGroup(); grp.MDEntryType = new MDEntryType(MDEntryType.BID); grp.MDEntryPx = new MDEntryPx((decimal)97.625); grp.Currency = new Currency("EUR"); grp.MDEntrySize = new MDEntrySize(1246000); grp.MDEntryDate = new MDEntryDate(new DateTime(2012, 10, 24)); grp.MDEntryTime = new MDEntryTime(new DateTime(1, 1, 1, 7, 30, 47), false); grp.QuoteCondition = new QuoteCondition(QuoteCondition.NON_FIRM); grp.MDEntryOriginator = new MDEntryOriginator("BEARGB21XXX"); grp.QuoteEntryID = new QuoteEntryID("15478575"); msg.AddGroup(grp); grp = new QuickFix.FIX44.MarketDataIncrementalRefresh.NoMDEntriesGroup(); grp.MDEntryType = new MDEntryType(MDEntryType.OFFER); grp.MDEntryPx = new MDEntryPx((decimal)108.08); grp.Currency = new Currency("EUR"); grp.MDEntrySize = new MDEntrySize(884000); grp.MDEntryDate = new MDEntryDate(new DateTime(2012, 10, 24)); grp.MDEntryTime = new MDEntryTime(new DateTime(1, 1, 1, 7, 30, 47), false); grp.QuoteCondition = new QuoteCondition(QuoteCondition.NON_FIRM); grp.MDEntryOriginator = new MDEntryOriginator("BEARGB21XXX"); grp.QuoteEntryID = new QuoteEntryID("15467902"); msg.AddGroup(grp); string msgString = msg.ToString(); string expected = String.Join(Message.SOH, new string[] { "35=W", "22=4", "48=BE0932900518", "55=[N/A]", "262=1b145288-9c9a-4911-a084-7341c69d3e6b", "762=EURO_EUR", "268=2", "269=0", "270=97.625", "15=EUR", "271=1246000", "272=20121024", "273=07:30:47", "276=I", "282=BEARGB21XXX", "299=15478575", "269=1", "270=108.08", "15=EUR", "271=884000", "272=20121024", "273=07:30:47", "276=I", "282=BEARGB21XXX", "299=15467902" }); StringAssert.Contains(expected, msgString); }
public void DateOnlyTimeOnlyConvertProblem() { // issue 135 var dd = new QuickFix.DataDictionary.DataDictionary(); dd.Load("../../../spec/fix/FIX44.xml"); string[] msgFields = { "8=FIX.4.4", "9=332", "35=W", "34=2", "49=MA", "52=20121024-12:21:42.170", "56=xxxx", "22=4", "48=BE0932900518", "55=[N/A]", "262=1b145288-9c9a-4911-a084-7341c69d3e6b", "762=EURO_EUR", "268=2", "269=0", "270=97.625", "15=EUR", "271=1246000", "272=20121024", "273=07:30:47", "276=I", "282=BEARGB21XXX", "299=15478575", "269=1", "270=108.08", "15=EUR", "271=884000", "272=20121024", "273=07:30:47", "276=I", "282=BEARGB21XXX", "299=15467902", "10=77" }; string msgStr = String.Join(Message.SOH, msgFields) + Message.SOH; QuickFix.FIX44.MarketDataSnapshotFullRefresh msg = new QuickFix.FIX44.MarketDataSnapshotFullRefresh(); msg.FromString(msgStr, true, dd, dd, _defaultMsgFactory); QuickFix.FIX44.MarketDataIncrementalRefresh.NoMDEntriesGroup gentry1 = (QuickFix.FIX44.MarketDataIncrementalRefresh.NoMDEntriesGroup)msg.GetGroup(1, new QuickFix.FIX44.MarketDataIncrementalRefresh.NoMDEntriesGroup()); Assert.AreEqual(new DateTime(2012, 10, 24), gentry1.MDEntryDate.getValue()); Assert.AreEqual(new DateTime(2012, 10, 24, 7, 30, 47).TimeOfDay, gentry1.MDEntryTime.getValue().TimeOfDay); Assert.AreEqual(new DateTime(2012, 10, 24, 7, 30, 47), gentry1.MDEntryDate.getValue() + gentry1.MDEntryTime.getValue().TimeOfDay); }
public void OnMessage(QuickFix.FIX44.MarketDataSnapshotFullRefresh m, SessionID s) { string symbol = m.GetString(Tags.Symbol).ToString(); double bid_price = 0; double ask_price = 0; int entry_count = int.Parse(m.GetString(Tags.NoMDEntries)); for (int i = 1; i <= entry_count; i++) { QuickFix.FIX44.MarketDataIncrementalRefresh.NoMDEntriesGroup group = new QuickFix.FIX44.MarketDataIncrementalRefresh.NoMDEntriesGroup(); m.GetGroup(i, group); string entry_type = group.GetString(Tags.MDEntryType); if (entry_type == "0") { bid_price = double.Parse(group.GetString(Tags.MDEntryPx)); } else if (entry_type == "1") { ask_price = double.Parse(group.GetString(Tags.MDEntryPx)); } } Console.WriteLine("Symbol: " + symbol + " Bid: " + bid_price.ToString() + " Ask: " + ask_price.ToString()); }
public void SendDateOnlyTimeOnlyConvertProblem() { // issue 135 QuickFix.FIX44.MarketDataSnapshotFullRefresh msg = new QuickFix.FIX44.MarketDataSnapshotFullRefresh(); msg.MDReqID = new MDReqID("1b145288-9c9a-4911-a084-7341c69d3e6b"); msg.Symbol = new Symbol("[N/A]"); msg.SecurityIDSource = new SecurityIDSource(SecurityIDSource.ISIN_NUMBER); msg.SecurityID = new SecurityID("BE0932900518"); msg.SecuritySubType = new SecuritySubType("EURO_EUR"); msg.NoMDEntries = new NoMDEntries(2); QuickFix.FIX44.MarketDataIncrementalRefresh.NoMDEntriesGroup grp = new QuickFix.FIX44.MarketDataIncrementalRefresh.NoMDEntriesGroup(); grp.MDEntryType = new MDEntryType(MDEntryType.BID); grp.MDEntryPx = new MDEntryPx((decimal)97.625); grp.Currency = new Currency("EUR"); grp.MDEntrySize = new MDEntrySize(1246000); grp.MDEntryDate = new MDEntryDate(new DateTime(2012, 10, 24)); grp.MDEntryTime = new MDEntryTime(new DateTime(1, 1, 1, 7, 30, 47), false); grp.QuoteCondition = new QuoteCondition(QuoteCondition.NON_FIRM); grp.MDEntryOriginator = new MDEntryOriginator("BEARGB21XXX"); grp.QuoteEntryID = new QuoteEntryID("15478575"); msg.AddGroup(grp); grp = new QuickFix.FIX44.MarketDataIncrementalRefresh.NoMDEntriesGroup(); grp.MDEntryType = new MDEntryType(MDEntryType.OFFER); grp.MDEntryPx = new MDEntryPx((decimal)108.08); grp.Currency = new Currency("EUR"); grp.MDEntrySize = new MDEntrySize(884000); grp.MDEntryDate = new MDEntryDate(new DateTime(2012, 10, 24)); grp.MDEntryTime = new MDEntryTime(new DateTime(1, 1, 1, 7, 30, 47), false); grp.QuoteCondition = new QuoteCondition(QuoteCondition.NON_FIRM); grp.MDEntryOriginator = new MDEntryOriginator("BEARGB21XXX"); grp.QuoteEntryID = new QuoteEntryID("15467902"); msg.AddGroup(grp); string msgString = msg.ToString(); string expected = String.Join(Message.SOH, new string[] { "35=W", "22=4", "48=BE0932900518", "55=[N/A]", "262=1b145288-9c9a-4911-a084-7341c69d3e6b", "762=EURO_EUR", "268=2", "269=0", "270=97.625", "15=EUR", "271=1246000", "272=20121024", "273=07:30:47", "276=I", "282=BEARGB21XXX", "299=15478575", "269=1", "270=108.08", "15=EUR", "271=884000", "272=20121024", "273=07:30:47", "276=I", "282=BEARGB21XXX", "299=15467902" }); StringAssert.Contains(expected, msgString); }
public void DateOnlyTimeOnlyConvertProblem() { // issue 135 var dd = new QuickFix.DataDictionary.DataDictionary(); dd.Load("../../../spec/fix/FIX44.xml"); string[] msgFields = { "8=FIX.4.4", "9=332", "35=W", "34=2", "49=MA", "52=20121024-12:21:42.170", "56=xxxx", "22=4", "48=BE0932900518", "55=[N/A]", "262=1b145288-9c9a-4911-a084-7341c69d3e6b", "762=EURO_EUR", "268=2", "269=0", "270=97.625", "15=EUR", "271=1246000", "272=20121024", "273=07:30:47", "276=I", "282=BEARGB21XXX", "299=15478575", "269=1", "270=108.08", "15=EUR", "271=884000", "272=20121024", "273=07:30:47", "276=I", "282=BEARGB21XXX", "299=15467902", "10=77" }; string msgStr = String.Join(Message.SOH, msgFields) + Message.SOH; QuickFix.FIX44.MarketDataSnapshotFullRefresh msg = new QuickFix.FIX44.MarketDataSnapshotFullRefresh(); msg.FromString(msgStr, true, dd, dd, _defaultMsgFactory); QuickFix.FIX44.MarketDataIncrementalRefresh.NoMDEntriesGroup gentry1 = new QuickFix.FIX44.MarketDataIncrementalRefresh.NoMDEntriesGroup(); msg.GetGroup(1, gentry1); Assert.AreEqual(new DateTime(2012, 10, 24), gentry1.MDEntryDate.getValue()); Assert.AreEqual(new DateTime(2012, 10, 24, 7, 30, 47).TimeOfDay, gentry1.MDEntryTime.getValue().TimeOfDay); Assert.AreEqual(new DateTime(2012, 10, 24, 7, 30, 47), gentry1.MDEntryDate.getValue() + gentry1.MDEntryTime.getValue().TimeOfDay); }