private async Task UpdateTicker(MarketTicker marketTicker, DateTime updateDate) { var frames = await framesManager.GetPriceHistory(0, marketTicker.Market, period); var fromDate = DateTime.UtcNow.AddDays(-1); var framesFor24Hours = frames.frames.TakeWhile(f => f.StartTime >= fromDate); if (framesFor24Hours.Count() < 1) { return; } marketTicker.Open = framesFor24Hours.Last().Open; marketTicker.Close = framesFor24Hours.First().Close; marketTicker.High = framesFor24Hours.Select(f => f.High).Max(); marketTicker.Low = framesFor24Hours.Select(f => f.Low).Min(); marketTicker.BaseVolume = framesFor24Hours.Sum(f => f.BaseVolume); marketTicker.CounterVolume = framesFor24Hours.Sum(f => f.CounterVolume); marketTicker.UpdatedAt = updateDate; }
public async Task Update() { try { var updateDate = DateTime.UtcNow; await syncRoot.WaitAsync(); foreach (var market in markets) { if (!tickers.TryGetValue(market, out var currentTicker)) { currentTicker = new MarketTicker(market); tickers.Add(market, currentTicker); } await UpdateTicker(currentTicker, updateDate); } } finally { syncRoot.Release(); } }