private async Task FillMarketDataAsync(Dictionary <string, TemporaryAggregatedData> tempDataByLimitOrderAndDtId) { var newMarketData = new Dictionary <string, IMarketData>(); var assetPairs = await _assetsService.AssetPairGetAllAsync(); var tempDataValues = tempDataByLimitOrderAndDtId.Values.OrderBy(x => x.Dt); var marketProfile = await _marketProfileService.ApiMarketProfileGetAsync(); var assetPairsHash = marketProfile.Select(i => i.AssetPair).ToHashSet(); foreach (var record in tempDataValues) { if (record.Volume1 <= 0) { continue; } try { var assetPair = FindPairWithAssets(assetPairs, record.Asset1, record.Asset2); if (assetPair == null || !assetPairsHash.Contains(assetPair.Id)) { continue; } var isInverted = IsInvertedTarget(assetPair, record.Asset1); var volume = isInverted ? record.Volume1 : record.Volume2; if (newMarketData.ContainsKey(assetPair.Id)) { newMarketData[assetPair.Id].LastPrice = record.Price; newMarketData[assetPair.Id].Volume += volume; } else { newMarketData.Add(assetPair.Id, new MarketData { AssetPairId = assetPair.Id, LastPrice = record.Price, Volume = volume, Dt = DateTime.UtcNow }); } } catch (Exception ex) { _log.WriteError("FillMarketDataAsync", record.ToJson(), ex); } } await _marketDataRepository.AddOrMergeMarketData(newMarketData.Values); }
public async Task <IActionResult> Get(string sessionId, int?cacheTimeout) { List <AssertPairRate> cacheEntry; Guid sId; if (!Guid.TryParse(sessionId, out sId)) { sId = Guid.NewGuid(); } if (!_cache.TryGetValue(sId, out cacheEntry)) { var pairsList = await _lykkeMarketProfile.ApiMarketProfileGetAsync(); var dicPairsList = await _assetsServiceWithCache.GetAllAssetPairsAsync(); cacheEntry = new List <AssertPairRate>(from rates in (from apr in pairsList select new AssertPairRate { AssetPair = apr.AssetPair, Bid = (float)apr.BidPrice, Ask = (float)apr.AskPrice }) join dic in dicPairsList on rates.AssetPair equals dic.Id select new AssertPairRate { AssetPair = rates.AssetPair, Bid = rates.Bid, Ask = rates.Ask, Accuracy = dic.Accuracy } ); await StoreAsserts(cacheEntry); var cacheEntryOptions = new MemoryCacheEntryOptions() .SetAbsoluteExpiration(TimeSpan.FromMinutes((cacheTimeout ?? 0) == 0 ? _settings.CacheTimeout : cacheTimeout.Value)); _cache.Set(CacheKeys.Rates, cacheEntry, cacheEntryOptions); } return(Json(new { SessionId = sId, Asserts = cacheEntry })); }
private async Task <List <MarketSlice> > GetMarketProfilesAsync() { var marketData = new List <MarketSlice>(); var marketProfiles = await _marketProfileClient.ApiMarketProfileGetAsync(); marketData.AddRange(marketProfiles .Select(x => new MarketSlice { AssetPairId = x.AssetPair, Ask = x.AskPrice.ToString(CultureInfo.InvariantCulture), Bid = x.BidPrice.ToString(CultureInfo.InvariantCulture) })); return(marketData); }
private async Task Execute(ITimerTrigger timer, TimerTriggeredHandlerArgs args, CancellationToken cancellationToken) { var date = DateTime.UtcNow - _marketDataInterval; double to = date.ToUnixTime(); var assetPairIds = (await _marketProfileClient.ApiMarketProfileGetAsync(cancellationToken)) .Select(x => x.AssetPair) .ToList(); var tasks = new List <Task>(); foreach (var assetPairId in assetPairIds) { tasks.Add(_database.SortedSetRemoveRangeByScoreAsync(RedisService.GetMarketDataBaseVolumeKey(assetPairId), 0, to, Exclude.Stop, CommandFlags.FireAndForget)); tasks.Add(_database.SortedSetRemoveRangeByScoreAsync(RedisService.GetMarketDataQuoteVolumeKey(assetPairId), 0, to, Exclude.Stop, CommandFlags.FireAndForget)); tasks.Add(_database.SortedSetRemoveRangeByScoreAsync(RedisService.GetMarketDataPriceKey(assetPairId), 0, to, Exclude.Stop, CommandFlags.FireAndForget)); } await Task.WhenAll(tasks); }
public async Task <IList <AssetPairModel> > GetAllPairsAsync() { return(await _api.ApiMarketProfileGetAsync()); }
/// <param name='operations'> /// The operations group for this extension method. /// </param> public static IList <AssetPairModel> ApiMarketProfileGet(this ILykkeMarketProfile operations) { return(operations.ApiMarketProfileGetAsync().GetAwaiter().GetResult()); }