private void OnSnapshot(string data) { try { var message = JsonConvert.DeserializeObject <Messages.Snapshot>(data); var symbol = _symbolMapper.GetLeanSymbol(message.ProductId, SecurityType.Crypto, Market.GDAX); DefaultOrderBook orderBook; if (!_orderBooks.TryGetValue(symbol, out orderBook)) { orderBook = new DefaultOrderBook(symbol); _orderBooks[symbol] = orderBook; } else { orderBook.BestBidAskUpdated -= OnBestBidAskUpdated; orderBook.Clear(); } foreach (var row in message.Bids) { var price = decimal.Parse(row[0], NumberStyles.Float, CultureInfo.InvariantCulture); var size = decimal.Parse(row[1], NumberStyles.Float, CultureInfo.InvariantCulture); orderBook.UpdateBidRow(price, size); } foreach (var row in message.Asks) { var price = decimal.Parse(row[0], NumberStyles.Float, CultureInfo.InvariantCulture); var size = decimal.Parse(row[1], NumberStyles.Float, CultureInfo.InvariantCulture); orderBook.UpdateAskRow(price, size); } orderBook.BestBidAskUpdated += OnBestBidAskUpdated; if (_isDataQueueHandler) { EmitQuoteTick(symbol, orderBook.BestBidPrice, orderBook.BestBidSize, orderBook.BestAskPrice, orderBook.BestAskSize); } } catch (Exception e) { Log.Error(e); throw; } }
private void ProcessOrderBookSnapshot(Channel channel, string[][] entries) { try { var symbol = channel.Symbol; DefaultOrderBook orderBook; if (!_orderBooks.TryGetValue(symbol, out orderBook)) { orderBook = new DefaultOrderBook(symbol); _orderBooks[symbol] = orderBook; } else { orderBook.BestBidAskUpdated -= OnBestBidAskUpdated; orderBook.Clear(); } foreach (var entry in entries) { var price = decimal.Parse(entry[0], NumberStyles.Float, CultureInfo.InvariantCulture); var amount = decimal.Parse(entry[2], NumberStyles.Float, CultureInfo.InvariantCulture); if (amount > 0) { orderBook.UpdateBidRow(price, amount); } else { orderBook.UpdateAskRow(price, Math.Abs(amount)); } } orderBook.BestBidAskUpdated += OnBestBidAskUpdated; EmitQuoteTick(symbol, orderBook.BestBidPrice, orderBook.BestBidSize, orderBook.BestAskPrice, orderBook.BestAskSize); } catch (Exception e) { Log.Error(e); throw; } }