public void AddQuote(ref QuoteBookStruct quote) { if (_quoteFeedBuffers.ContainsKey(quote.InstrumentName)) { _quoteFeedBuffers[quote.InstrumentName].Add(ref quote); } else { return; } }
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); }
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); }
public void AddQuote(ref QuoteBookStruct quote) { _quoteFeed.AddQuote(ref quote); }
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"); } }