Example #1
0
        private static void ProcessEvent(WebSocketMessage msg)
        {
            if (msg is ClientLoginResponse)
            {
                ClientLoginResponse loginResp = (ClientLoginResponse)msg;

                if (loginResp.JsonWebToken != null)
                {
                    ClientLoginResponse = loginResp;
                }

                Thread publishOrderBookThread = new Thread(PublishOrderBookThread);
                publishOrderBookThread.Start();

                DoLog(string.Format("Client successfully logged with token {0}", loginResp.JsonWebToken));
                SubscribeOrderBook();
            }
            if (msg is DepthOfBook)
            {
                DepthOfBook depthOfBookDelta = (DepthOfBook)msg;
                ProcessDepthOfBook(depthOfBookDelta);
            }
        }
Example #2
0
        private static void ProcessEvent(WebSocketMessage msg)
        {
            if (msg is ClientLoginResponse)
            {
                ClientLoginResponse loginResp = (ClientLoginResponse)msg;

                if (loginResp.JsonWebToken != null)
                {
                    ClientLoginResponse = loginResp;
                }

                Thread publishOrderBookThread = new Thread(PublishOrderBookThread);
                publishOrderBookThread.Start();

                DoLog(string.Format("Client successfully logged with token {0}", loginResp.JsonWebToken));
                SubscribeLastSales();
                SubscribeQuotes();
                Thread.Sleep(1000);
                SubscribeOrderBook();
            }
            else if (msg is DepthOfBook)
            {
                DepthOfBook depthOfBookDelta = (DepthOfBook)msg;
                ProcessDepthOfBook(depthOfBookDelta);
            }
            else if (msg is LastSale)
            {
                LastSale lastSale = (LastSale)msg;
                DoLog(string.Format("Received last sale for symbol {1}: {0}", lastSale.LastPrice, lastSale.Symbol));
            }
            else if (msg is Quote)
            {
                Quote quote = (Quote)msg;
                DoLog(string.Format("Received quote for symbol {4}: Bid {0}-{1} -- Ask {2}-{3}",
                                    quote.BidSize, quote.Bid, quote.AskSize, quote.Ask, quote.Symbol));
            }
        }
Example #3
0
        private static void ProcessDepthOfBook(DepthOfBook depthOfBookDelta)
        {
            lock (Security)
            {
                if (depthOfBookDelta.cAction == DepthOfBook._ACTION_INSERT)
                {
                    InitialSnapshotReceived = true;
                    // If the price level existed, we create the price level but a HUGE warning (WARNING3) should be logged
                    PriceLevel pl = Security.MarketData.OrderBook.Where(x => x.Price == depthOfBookDelta.Price &&
                                                                        x.IsBidOrAsk(depthOfBookDelta.IsBid()))
                                    .FirstOrDefault();
                    if (pl != null)
                    {
                        pl.Size = depthOfBookDelta.Size;
                        DoLog(string.Format("WARNING3 - Received ADD DepthOfBook message for a price level that existed. Price Level = {0}",
                                            depthOfBookDelta.Price.ToString("0.##")));
                    }
                    else
                    {
                        PriceLevel newPl = new PriceLevel()
                        {
                            Price = depthOfBookDelta.Price,
                            Size  = depthOfBookDelta.Size,
                            OrderBookEntryType = depthOfBookDelta.IsBid() ? OrderBookEntryType.Bid : OrderBookEntryType.Ask
                        };

                        Security.MarketData.OrderBook.Add(newPl);
                    }
                }
                else if (depthOfBookDelta.cAction == DepthOfBook._ACTION_CHANGE)
                {
                    PriceLevel pl = Security.MarketData.OrderBook.Where(x => x.Price == depthOfBookDelta.Price &&
                                                                        x.IsBidOrAsk(depthOfBookDelta.IsBid()))
                                    .FirstOrDefault();
                    if (pl != null)
                    {
                        pl.Size = depthOfBookDelta.Size;
                    }
                    else
                    {
                        //This is not ok, we receive a PriceLevel for a Price that didn't exist.
                        //We create the price level, but we log a HUGE warning (WARNING4)
                        PriceLevel newPl = new PriceLevel()
                        {
                            Price = depthOfBookDelta.Price,
                            Size  = depthOfBookDelta.Size,
                            OrderBookEntryType = depthOfBookDelta.IsBid() ? OrderBookEntryType.Bid : OrderBookEntryType.Ask
                        };
                        Security.MarketData.OrderBook.Add(newPl);

                        DoLog(string.Format("WARNING4 - Received CHANGE DepthOfBook message for a price level that did not exist. Price Level = {0}",
                                            depthOfBookDelta.Price.ToString("0.##")));
                    }
                }
                else if (depthOfBookDelta.cAction == DepthOfBook._ACTION_REMOVE)
                {
                    PriceLevel pl = Security.MarketData.OrderBook.Where(x => x.Price == depthOfBookDelta.Price &&
                                                                        x.IsBidOrAsk(depthOfBookDelta.IsBid()))
                                    .FirstOrDefault();

                    if (pl != null)
                    {
                        Security.MarketData.OrderBook.Remove(pl);
                    }
                    else
                    {
                        //Another HUGE warning. We receive a message to delete a price level that didn't exist
                        //We have to log another HUGE warning (WARNING5)
                        DoLog(string.Format("WARNING5 - Received REMOVE DepthOfBook message for a price level that did not exist. Price Level = {0}",
                                            depthOfBookDelta.Price.ToString("0.##")));
                    }
                }
            }
        }