コード例 #1
0
        private Task ProcessMessageAsync(OrderBookSnapshotEvent message)
        {
            try
            {
                var brokerId    = message.OrderBook.BrokerId;
                var symbol      = message.OrderBook.Asset;
                var timestamp   = message.OrderBook.Timestamp.ToDateTime();
                var limitOrders = message.OrderBook.Levels
                                  .Select(level => new LimitOrder
                {
                    Id       = Guid.Parse(level.OrderId),
                    Price    = decimal.Parse(level.Price),
                    Volume   = Math.Abs(decimal.Parse(level.Volume)),
                    WalletId = level.WalletId,
                    Type     = message.OrderBook.IsBuy
                            ? LimitOrderType.Buy
                            : LimitOrderType.Sell
                })
                                  .ToList();

                _orderBooksHandler.Handle(brokerId, symbol, message.OrderBook.IsBuy, timestamp, limitOrders);

                _logger.LogInformation("Received an Order Book. {@OrderBook}", message);
            }
            catch (Exception exception)
            {
                _logger.LogError(exception, "An error occurred during processing order book. {@Message}", message);
            }

            return(Task.CompletedTask);
        }
コード例 #2
0
        private async Task ProcessMessageAsync(OrderBookSnapshotEvent message)
        {
            if (message.OrderBook.IsBuy && _priceType == PriceType.Ask)
            {
                return;
            }

            if (!message.OrderBook.IsBuy && _priceType == PriceType.Bid)
            {
                return;
            }

            if (!message.OrderBook.Levels.Any())
            {
                return;
            }

            try
            {
                string priceValue;

                if (_priceType == PriceType.Ask)
                {
                    priceValue = message.OrderBook.Levels
                                 .OrderBy(level => level.Price)
                                 .First()
                                 .Price;
                }
                else if (_priceType == PriceType.Bid)
                {
                    priceValue = message.OrderBook.Levels
                                 .OrderByDescending(level => level.Price)
                                 .First()
                                 .Price;
                }
                else
                {
                    return;
                }

                var assetPairId = message.OrderBook.Asset;
                var time        = message.OrderBook.Timestamp.ToDateTime();
                var price       = decimal.Parse(priceValue);

                await _pricesHandler.HandleAsync(assetPairId, time, (double)price);
            }
            catch (Exception exception)
            {
                _logger.LogError(exception, "An error occurred during processing order book. {@Message}",
                                 message);
            }
        }