public static AssetPairPrice ToAssetPairPrice(this HashEntry[] hashEntry)
        {
            var assetPair = new AssetPairPrice();

            var hashDict = hashEntry.ToDictionary();

            if (hashDict.TryGetValue(nameof(AssetPairPrice.AssetPair), out var assetPairId))
            {
                assetPair.AssetPair = assetPairId;
            }

            if (hashDict.TryGetValue(nameof(AssetPairPrice.BidPrice), out var bidPrice))
            {
                assetPair.BidPrice = (double)bidPrice;
            }

            if (hashDict.TryGetValue(nameof(AssetPairPrice.BidPriceTimestamp), out var bidTimestamp))
            {
                assetPair.BidPriceTimestamp = DateTime.Parse(bidTimestamp).ToUniversalTime();
            }

            if (hashDict.TryGetValue(nameof(AssetPairPrice.AskPrice), out var askPrice))
            {
                assetPair.AskPrice = (double)askPrice;
            }

            if (hashDict.TryGetValue(nameof(AssetPairPrice.AskPriceTimestamp), out var askTimestamp))
            {
                assetPair.AskPriceTimestamp = DateTime.Parse(askTimestamp).ToUniversalTime();
            }

            return(assetPair);
        }
        public Task AddAssetPairPriceAsync(AssetPairPrice assetPair)
        {
            var tasks = new List <Task>
            {
                _database.HashSetAsync(RedisKeys.GetMarketProfileKey(assetPair.AssetPair), assetPair.ToHashEntries()),
                _database.SetAddAsync(RedisKeys.GetAssetPairsKey(), assetPair.AssetPair)
            };

            return(Task.WhenAll(tasks));
        }
예제 #3
0
 public static AssetPairModel ToApiModel(this AssetPairPrice pair)
 {
     return(new AssetPairModel
     {
         AssetPair = pair.AssetPair,
         BidPrice = pair.BidPrice,
         AskPrice = pair.AskPrice,
         BidPriceTimestamp = pair.BidPriceTimestamp,
         AskPriceTimestamp = pair.AskPriceTimestamp
     });
 }
 public static HashEntry[] ToHashEntries(this AssetPairPrice assetPair)
 {
     return(new[]
     {
         new HashEntry(nameof(AssetPairPrice.AssetPair), assetPair.AssetPair),
         new HashEntry(nameof(AssetPairPrice.AskPrice), assetPair.AskPrice),
         new HashEntry(nameof(AssetPairPrice.AskPriceTimestamp), assetPair.AskPriceTimestamp.ToString(DateFormat)),
         new HashEntry(nameof(AssetPairPrice.BidPrice), assetPair.BidPrice),
         new HashEntry(nameof(AssetPairPrice.BidPriceTimestamp), assetPair.BidPriceTimestamp.ToString(DateFormat))
     });
 }
        private AssetPairPrice Create(QuoteMessage quote)
        {
            var pair = new AssetPairPrice
            {
                AssetPair         = quote.AssetPair,
                AskPriceTimestamp = DateTime.MinValue,
                BidPriceTimestamp = DateTime.MinValue
            };

            UpdateAssetPairPrice(pair, quote);

            return(pair);
        }
        private AssetPairPrice UpdateAssetPairPrice(AssetPairPrice pair, QuoteMessage quote)
        {
            if (quote.IsBuy)
            {
                if (pair.BidPriceTimestamp < quote.Timestamp)
                {
                    pair.BidPrice          = quote.Price;
                    pair.BidPriceTimestamp = quote.Timestamp;
                }
            }
            else
            {
                if (pair.AskPriceTimestamp < quote.Timestamp)
                {
                    pair.AskPrice          = quote.Price;
                    pair.AskPriceTimestamp = quote.Timestamp;
                }
            }

            return(pair);
        }