private void ProcessUpdate(IEnumerable <BitfinexOrderBookEntry> entries) { if (!bookSet) { var askEntries = entries.Where(e => e.Quantity < 0).ToList(); var bidEntries = entries.Where(e => e.Quantity > 0).ToList(); foreach (var entry in askEntries) { entry.Quantity = -entry.Quantity; // Bitfinex sends the asks as negative numbers, invert them } SetInitialOrderBook(DateTime.UtcNow.Ticks, bidEntries, askEntries); } else { var askEntries = new List <ISymbolOrderBookEntry>(); var bidEntries = new List <ISymbolOrderBookEntry>(); foreach (var entry in entries) { if (entry.Count == 0) { var bookEntry = new BitfinexOrderBookEntry() { Price = entry.Price, Quantity = 0 }; if (entry.Quantity == -1) { askEntries.Add(bookEntry); } else { bidEntries.Add(bookEntry); } } else { if (entry.Quantity < 0) { askEntries.Add(new BitfinexOrderBookEntry() { Price = entry.Price, Quantity = -entry.Quantity }); } else { bidEntries.Add(entry); } } } UpdateOrderBook(DateTime.UtcNow.Ticks, bidEntries, askEntries); } }
private static BitfinexOrderBookEntry ParseEntry(JArray data) { JToken price; JToken count; JToken quantity; if (data.Count == 3) { price = data[0]; count = data[1]; quantity = data[2]; } else { price = data[0]; count = data[2]; quantity = data[3]; } var result = new BitfinexOrderBookEntry() { Count = (int)count, Price = (decimal)price, Quantity = (decimal)quantity, }; var priceWithExp = ((JValue)price).ToString(CultureInfo.InvariantCulture); if (priceWithExp.Contains("E-07") || priceWithExp.Contains("E-08")) { result.RawPrice = priceWithExp.Replace('E', 'e').Replace("-07", "-7").Replace("-08", "-8"); } else { result.RawPrice = ((JValue)price).ToString("F8", CultureInfo.InvariantCulture).TrimEnd('0').TrimEnd('.'); } var quantityWithExp = ((JValue)quantity).ToString(CultureInfo.InvariantCulture); if (quantityWithExp.Contains("E-07") || quantityWithExp.Contains("E-08")) { result.RawQuantity = quantityWithExp.Replace('E', 'e').Replace("-07", "-7").Replace("-08", "-8"); } else { result.RawQuantity = ((JValue)quantity).ToString("F8", CultureInfo.InvariantCulture).TrimEnd('0').TrimEnd('.'); } return(result); }