public TickPrice ToTickPrice(OrderBook orderBook)
        {
            if (orderBook.Asks != null && orderBook.Asks.Any() && orderBook.Bids != null && orderBook.Bids.Any())
            {
                return(new TickPrice(new Instrument(IcmExchange.Name, orderBook.Asset),
                                     orderBook.Timestamp,
                                     orderBook.Asks.Select(x => x.Price).Min(),
                                     orderBook.Bids.Select(x => x.Price).Max()
                                     ));
            }

            return(null);
        }
        private async Task HandleOrderBook(OrderBook orderBook)
        {
            if (_instruments.Contains(orderBook.Asset) || _config.UseSupportedCurrencySymbolsAsFilter == false)
            {
                var tickPrice = _modelConverter.ToTickPrice(orderBook);
                if (tickPrice != null)
                {
                    await _tickPriceHandler.Handle(tickPrice);
                }

                await TrySendOrderBook(orderBook);
            }
        }
        private async Task TrySendOrderBook(OrderBook orderBook)
        {
            if ((orderBook.Asks == null || !orderBook.Asks.Any()) && (orderBook.Bids == null || !orderBook.Bids.Any()))
            {
                return;
            }

            var orderBookDto = new Trading.OrderBook(
                IcmExchange.Name,
                orderBook.Asset,
                orderBook.Asks?.Select(e => new VolumePrice(e.Price, e.Volume)).ToArray() ?? new VolumePrice[] { },
                orderBook.Bids?.Select(e => new VolumePrice(e.Price, e.Volume)).ToArray() ?? new VolumePrice[] { },
                orderBook.Timestamp);

            await _orderBookHandler.Handle(orderBookDto);
        }