Ejemplo n.º 1
0
        private async Task ProcessMessageAsync(OrderbookMessage orderbookMessage)
        {
            OrderbookEntity orderbook = null;

            try
            {
                orderbook = await _orderbookWriter.GetAsync(OrderbookEntity.GetPk(), orderbookMessage.AssetPair);
            }
            catch (Exception ex)
            {
                _log.Warning($"Can't get orderbook from mynosql for assetPair = {orderbookMessage.AssetPair}", ex);
            }

            var entity = orderbook ?? new OrderbookEntity(orderbookMessage.AssetPair)
            {
                CreatedAt = orderbookMessage.Timestamp
            };

            entity.CreatedAt = orderbookMessage.Timestamp;
            var prices = orderbookMessage.IsBuy ? entity.Bids : entity.Asks;

            prices.Clear();

            foreach (var price in orderbookMessage.Prices)
            {
                prices.Add(new VolumePriceEntity((decimal)price.Volume, (decimal)price.Price));
            }

            await _orderbookWriter.InsertOrReplaceAsync(entity);
        }
        private async Task ProcessMessageAsync(OrderbookMessage orderbookMessage)
        {
            var entity = await _orderbookWriter.GetAsync(OrderbookEntity.GetPk(), orderbookMessage.AssetPair)
                         ?? new OrderbookEntity(orderbookMessage.AssetPair)
            {
                CreatedAt = orderbookMessage.Timestamp,
            };

            entity.CreatedAt = orderbookMessage.Timestamp;
            var prices = orderbookMessage.IsBuy ? entity.Bids : entity.Asks;

            prices.Clear();

            foreach (var price in orderbookMessage.Prices)
            {
                prices.Add(new VolumePriceEntity((decimal)price.Volume, (decimal)price.Price));
            }

            await _orderbookWriter.InsertOrReplaceAsync(entity);
        }
Ejemplo n.º 3
0
        private async Task <Orderbook> GetOrderbookAsync(string assetPairId)
        {
            var orderbookEntity = _orderbooksReader.Get(OrderbookEntity.GetPk(), assetPairId);

            if (orderbookEntity != null)
            {
                var orderbook = _mapper.Map <Orderbook>(orderbookEntity);
                orderbook.Bids.AddRange(_mapper.Map <List <Orderbook.Types.PriceVolume> >(orderbookEntity.Bids));
                orderbook.Asks.AddRange(_mapper.Map <List <Orderbook.Types.PriceVolume> >(orderbookEntity.Asks));
                return(orderbook);
            }

            var buyBook  = GetOrderbook(assetPairId, true);
            var sellBook = GetOrderbook(assetPairId, false);

            await Task.WhenAll(buyBook, sellBook);

            var result = new Orderbook
            {
                AssetPairId = assetPairId,
                Timestamp   = buyBook.Result.Timestamp > sellBook.Result.Timestamp
                    ? Timestamp.FromDateTime(buyBook.Result.Timestamp.ToUniversalTime())
                    : Timestamp.FromDateTime(sellBook.Result.Timestamp.ToUniversalTime()),
            };

            result.Bids.AddRange(buyBook.Result.Prices.Select(x => new Orderbook.Types.PriceVolume
            {
                V = Math.Abs(x.Volume).ToString(CultureInfo.InvariantCulture),
                P = x.Price.ToString(CultureInfo.InvariantCulture)
            }));

            result.Asks.AddRange(sellBook.Result.Prices.Select(x => new Orderbook.Types.PriceVolume
            {
                V = Math.Abs(x.Volume).ToString(CultureInfo.InvariantCulture),
                P = x.Price.ToString(CultureInfo.InvariantCulture)
            }));

            return(result);
        }
Ejemplo n.º 4
0
        private async Task <Orderbook> GetOrderbookAsync(string assetPairId)
        {
            var orderbookEntity = _orderbooksReader.Get(OrderbookEntity.GetPk(), assetPairId);

            if (orderbookEntity != null)
            {
                return(_mapper.Map <Orderbook>(orderbookEntity));
            }

            var buyBook  = GetOrderbook(assetPairId, true);
            var sellBook = GetOrderbook(assetPairId, false);

            await Task.WhenAll(buyBook, sellBook);

            return(new Orderbook
            {
                AssetPairId = assetPairId,
                Timestamp = buyBook.Result.Timestamp > sellBook.Result.Timestamp
                    ? buyBook.Result.Timestamp
                    : sellBook.Result.Timestamp,
                Bids = buyBook.Result.Prices.Select(x => new VolumePrice(Math.Abs(x.Volume), x.Price)).ToList(),
                Asks = sellBook.Result.Prices.Select(x => new VolumePrice(Math.Abs(x.Volume), x.Price)).ToList()
            });
        }