private void Dispatch(OrderBookModel orderBookModel)
        {
            Asks.Clear();
            Bids.Clear();
            int count     = orderBookModel.Asks.Count;
            int takeCount = 100;

            orderBookModel.Asks.Skip(count - takeCount).Take(takeCount).ToList().ForEach(x => Asks.Add(new OrderBookEntry
            {
                Amount        = x.Amount,
                DateTime      = x.DateTime,
                Price         = x.Price,
                GroupedPrice  = x.GroupedPrice,
                GroupedVolume = x.GroupedVolume
            }));

            orderBookModel.Bids.Take(100).ToList().ForEach(x => Bids.Add(new OrderBookEntry
            {
                Amount        = x.Amount,
                DateTime      = x.DateTime,
                Price         = x.Price,
                GroupedPrice  = x.GroupedPrice,
                GroupedVolume = x.GroupedVolume
            }));
        }
Exemple #2
0
        /// <summary>
        /// Get orderbook for specify markets.
        /// </summary>
        /// <param name="crypto"></param>
        /// <param name="fiat"></param>
        /// <returns></returns>
        public OrderBookModel OrderBook(CryptoCurrency crypto, FiatCurrency fiat)
        {
            IRestRequest   req       = new RestRequest($"/stats/orderbook_{crypto.ToString().ToLower()}{fiat.ToString().ToLower()}.json");
            string         response  = client.Execute(req).Content;
            OrderBookModel orderbook = JsonConvert.DeserializeObject <OrderBookModel>(response);

            return(orderbook);
        }
        public OrderBookModel Transform()
        {
            var firstOrderBook = OrderBooks.Values.First();
            var asks           = new List <OrderBookEntryModel>();
            var bids           = new List <OrderBookEntryModel>();

            firstOrderBook.Asks.ForEach(x => asks.Add(x.Transform()));
            firstOrderBook.Bids.ForEach(x => bids.Add(x.Transform()));

            var result = new OrderBookModel
            {
                Asks = new List <OrderBookEntryModel>(asks),
                Bids = new List <OrderBookEntryModel>(bids)
            };

            return(result);
        }
Exemple #4
0
        /// <summary>
        /// Parses the data from source to datapoints.
        /// </summary>
        /// <param name="data">The data.</param>
        /// <param name="ticker">Associated ticker</param>
        /// <returns></returns>
        public DataPointImpl[] ParseData(string data, string ticker = "")
        {
            //Initial items
            DepthModel     depthupdate     = null;
            TradeModel     treadeupdate    = null;
            OrderBookModel orderbookupdate = null;
            var            toreturn        = new List <DataPointImpl>();

            data = data.Replace(",[]", "");

            //Convert models
            if (data.Contains("depthUpdate"))
            {
                depthupdate = JSON.Deserialize <DepthModel>(data);
            }
            else if (data.Contains("aggTrade"))
            {
                treadeupdate = JSON.Deserialize <TradeModel>(data);
            }
            else if (data.Contains("lastUpdateId"))
            {
                //Check if this contains additional data
                if (data.Contains("|"))
                {
                    var splitted = data.Split('|');
                    ticker = splitted[0];
                    data   = splitted[1];
                }

                //Parse data
                orderbookupdate = JSON.Deserialize <OrderBookModel>(data);
            }

            //Full update order book
            if (orderbookupdate != null && !string.IsNullOrWhiteSpace(ticker))
            {
                //Check data
                if (!_orderbook.TryGetValue(ticker, out var orderbook))
                {
                    //Set order book instance
                    orderbook          = new OrderBook(ticker);
                    _orderbook[ticker] = orderbook;
                }

                //Helper function
                void UpdateBook(bool isBid, PriceModel x) =>
                orderbook.AddQuote(isBid, x.DoubleValue, x.DoubleSize);

                //Clear and refresh
                orderbook.Clear();
                orderbookupdate.Asks.ForEach(u => UpdateBook(false, u));
                orderbookupdate.Bids.ForEach(u => UpdateBook(true, u));
            }
            //Update order book
            else if (depthupdate != null)
            {
                //Check data
                if (!_orderbook.TryGetValue(ticker, out var orderbook))
                {
                    //Set order book instance
                    orderbook          = new OrderBook(ticker);
                    _orderbook[ticker] = orderbook;
                }

                //DateTime occured
                DateTime occuredutc = Time.FromUnixTime(depthupdate.EventTime, true);

                //Check for quote updates in the order book (size == 0 = remove from order book)
                bool update = depthupdate.AskPricesModel.Count(x => orderbook.AddQuote(false, x.DoubleValue, x.DoubleSize)) > 0;
                update = depthupdate.BidPricesModel.Count(x => orderbook.AddQuote(true, x.DoubleValue, x.DoubleSize)) > 0 | update;

                //Check for full quote update
                if (update)
                {
                    toreturn.Add(new Tick(GetQuantlerTicker(depthupdate.Symbol), DataSource)
                    {
                        AskSize  = Convert.ToDecimal(orderbook.AskSize),
                        AskPrice = Convert.ToDecimal(orderbook.BestAsk),
                        BidPrice = Convert.ToDecimal(orderbook.BestBid),
                        BidSize  = Convert.ToDecimal(orderbook.BidSize),
                        Depth    = 0,
                        Occured  = occuredutc,
                        TimeZone = TimeZone.Utc
                    });
                }
            }
            //Send trade
            else if (treadeupdate != null)
            {
                //DateTime occured
                DateTime occuredutc = Time.FromUnixTime(treadeupdate.EventTime, true);

                toreturn.Add(new Tick(GetQuantlerTicker(treadeupdate.Symbol), DataSource)
                {
                    TradePrice = decimal.Parse(treadeupdate.Price, NumberStyles.Any, new CultureInfo("en-US")),
                    Size       = decimal.Parse(treadeupdate.Quantity, NumberStyles.Any, new CultureInfo("en-US")),
                    Occured    = occuredutc,
                    TimeZone   = TimeZone.Utc
                });
            }

            //Return what we have
            return(toreturn.ToArray());
        }
 private void GroupEntries(OrderBookModel model)
 {
     GroupEntries(model.Asks, true);
     GroupEntries(model.Bids, false);
 }