private static void Symbol_NewLevel2(Symbol symbol, Level2Quote level2, DOMQuote dom) { // Snapshot level2 update if (dom != null) { List <Level2Quote> bids = dom.Bids; List <Level2Quote> asks = dom.Asks; } // Incremental level2 update if (level2 != null) { QuotePriceType priceType = level2.PriceType; // Bid or Ask double price = level2.Price; double size = level2.Size; if (level2.Closed) { // If level is closed and should be deleted } } // Get market depth info from symbol var depthOfMarket = symbol.DepthOfMarket.GetDepthOfMarketAggregatedCollections(); }
private DOMQuote CreateDOMQuote(List <BitfinexBookItem> bitfinexBook) { DateTime utcNow = Core.Instance.TimeUtils.DateTimeUtcNow; string symbol = bitfinexBook.First().Pair; var bids = bitfinexBook.Where(b => b.Amount > 0).OrderBy(b => b.Price); var asks = bitfinexBook.Where(b => b.Amount < 0).OrderBy(b => b.Price); var dom = new DOMQuote(symbol, utcNow); foreach (var bid in bids) { string id = $"MMID_{bid.Price}"; double price = (double)bid.Price; double size = bid.Count == 0 ? 0 : Math.Abs((double)bid.Amount); dom.Bids.Add(new Level2Quote(QuotePriceType.Bid, symbol, id, price, size, utcNow)); } foreach (var ask in asks) { string id = $"MMID_{ask.Price}"; double price = (double)ask.Price; double size = ask.Count == 0 ? 0 : Math.Abs((double)ask.Amount); dom.Asks.Add(new Level2Quote(QuotePriceType.Ask, symbol, id, price, size, utcNow)); } return(dom); }
private DOMQuote CreateDOMQuote(HitOrderBookData hitOrderBookData) { string symbol = hitOrderBookData.Symbol; var utcNow = Core.Instance.TimeUtils.DateTimeUtcNow; var dom = new DOMQuote(symbol, utcNow); dom.Bids.AddRange(this.CreateLevel2Quotes(QuotePriceType.Bid, hitOrderBookData.Bids, symbol, utcNow)); dom.Asks.AddRange(this.CreateLevel2Quotes(QuotePriceType.Ask, hitOrderBookData.Asks, symbol, utcNow)); return(dom); }