Beispiel #1
0
        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");
        }
Beispiel #3
0
        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($"--------------------------------------------------");
        }
Beispiel #4
0
        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);
        }
Beispiel #5
0
        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());
        }
Beispiel #7
0
        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);
        }
Beispiel #8
0
        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);
        }