コード例 #1
0
        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);
            }
        }
コード例 #2
0
        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);
        }