Example #1
0
 public void AddQuote(ref QuoteBookStruct quote)
 {
     if (_quoteFeedBuffers.ContainsKey(quote.InstrumentName))
     {
         _quoteFeedBuffers[quote.InstrumentName].Add(ref quote);
     }
     else
     {
         return;
     }
 }
Example #2
0
        private QuoteBookStruct mergeQuoteBooks()
        {
            QuoteBookStruct _mergedQuoteBook = new QuoteBookStruct();

            if (_quoteBookReceived && !_impliedBookReceived)
            {
                lock (_lastQuoteBook)
                {
                    _mergedQuoteBook = new QuoteBookStruct(_lastQuoteBook);
                }
            }
            else if (!_quoteBookReceived && _impliedBookReceived)
            {
                lock (_impliedQuoteBook)
                {
                    _mergedQuoteBook = new QuoteBookStruct(_impliedQuoteBook);
                }
            }
            else if (_quoteBookReceived && _impliedBookReceived)
            {
                QuoteBookStruct lastQuoteStruct;
                QuoteBookStruct lastImpliedStruct;
                lock (_lastQuoteBook)
                {
                    lastQuoteStruct = new QuoteBookStruct(_lastQuoteBook);
                }
                lock (_impliedQuoteBook)
                {
                    lastImpliedStruct = new QuoteBookStruct(_impliedQuoteBook);
                }

                _mergedQuoteBook        = new QuoteBookStruct();
                _mergedQuoteBook.Instr  = lastQuoteStruct.Instr;
                _mergedQuoteBook.TS     = lastQuoteStruct.TS;
                _mergedQuoteBook.PartID = lastQuoteStruct.PartID;
                _mergedQuoteBook.Mod    = lastQuoteStruct.Mod;

                if (lastImpliedStruct.NumBid > 0)
                {
                    _mergedQuoteBook.BidExch = lastQuoteStruct.BidExch == null ? lastImpliedStruct.BidExch : lastQuoteStruct.BidExch.Concat(lastImpliedStruct.BidExch).ToArray();
                    _mergedQuoteBook.BidBk   = lastQuoteStruct.BidBk == null ? lastImpliedStruct.BidBk : lastQuoteStruct.BidBk.Concat(lastImpliedStruct.BidBk).ToArray();
                    _mergedQuoteBook.NumBid  = (byte)(lastQuoteStruct.NumBid + lastImpliedStruct.NumBid);
                }
                if (lastImpliedStruct.NumAsk > 0)
                {
                    _mergedQuoteBook.AskExch = lastQuoteStruct.AskExch == null ? lastImpliedStruct.AskExch : lastQuoteStruct.AskExch.Concat(lastImpliedStruct.AskExch).ToArray();
                    _mergedQuoteBook.AskBk   = lastQuoteStruct.AskBk == null ? lastImpliedStruct.AskBk : lastQuoteStruct.AskBk.Concat(lastImpliedStruct.AskBk).ToArray();
                    _mergedQuoteBook.NumAsk  = (byte)(lastQuoteStruct.NumAsk + lastImpliedStruct.NumAsk);
                }
            }
            return(_mergedQuoteBook);
        }
Example #3
0
        private List <OrderBook> ConvertQuoteBookToOrders(QuoteBookStruct book)
        {
            List <OrderBook> bookList = new List <OrderBook>();
            int bookLength            = _buy ? book.NumBid : book.NumAsk;

            for (int i = 0; i < bookLength; i++)
            {
                OrderBook ob = new OrderBook();
                ob._exch   = _buy ? book.BidExch[i] : book.AskExch[i];
                ob._instr  = (InstrInfo[])book.Instr.Clone();
                ob._ordID  = book.PartID;
                ob._ordprc = _buy ? book.BidBk[i].prc : book.AskBk[i].prc;
                ob._ordsz  = _buy ? book.BidBk[i].sz : book.AskBk[i].sz;
                bookList.Add(ob);
            }
            return(bookList);
        }
Example #4
0
 public void AddQuote(ref QuoteBookStruct quote)
 {
     _quoteFeed.AddQuote(ref quote);
 }
Example #5
0
        private void RepopulateGrid()
        {
            QuoteBookStruct book = mergeQuoteBooks();

            //if the book is empty, remove all exchange quotes (can't just clear list or our orders will be removes as well)
            if ((_buy && book.NumBid == 0 || (!_buy && book.NumAsk == 0)))
            {
                foreach (byte key in _exchBookDict.Keys)
                {
                    Lvl2TableObj obj;
                    _exchBookDict.TryRemove(key, out obj);
                    lock (_bindingList)
                    {
                        _bindingList.Remove(obj);
                    }
                }
            }
            else
            {
                //if any exchange has a quote in our dictionary, but not the latest quotebook, it doesn't exist anymore, so remove it
                foreach (byte key in _exchBookDict.Keys)
                {
                    if ((_buy && !book.BidExch.Contains(key)) ||
                        (!_buy && !book.AskExch.Contains(key)))
                    {
                        Lvl2TableObj obj;
                        _exchBookDict.TryRemove(key, out obj);
                        lock (_bindingList)
                        {
                            _bindingList.Remove(obj);
                        }
                    }
                }
            }

            if (_perfEnabled)
            {
                PerfAnalyzer.startTime(_perfLabel + "_SetAllOrdersTime");
            }
            _priceLevels.Clear();
            List <OrderBook> books = ConvertQuoteBookToOrders(book);

            foreach (OrderBook b in books)
            {
                _priceLevels.Add(b._ordprc);
                if (_exchBookDict.ContainsKey(b._exch))
                {
                    _exchBookDict[b._exch].UpdateQuote(b);
                }
                else
                {
                    Lvl2TableObj obj = new Lvl2TableObj(b);
                    _exchBookDict.TryAdd(b._exch, obj);
                    lock (_bindingList)
                    {
                        _bindingList.Add(obj);
                    }
                }
            }
            _sortedPriceLvls = _buy ? _priceLevels.Reverse().ToArray() : _priceLevels.ToArray();
            if (_perfEnabled)
            {
                PerfAnalyzer.endTime(_perfLabel + "_SetAllOrdersTime");
            }
        }