public async Task <OhlcDataResponse> GetOhlcAsync(OhlcContext context) { var api = GdaxApiProvider.GetApi(context); var currencyCode = context.Pair.ToTicker(this); var ohlc = new OhlcDataResponse(context.Resolution); var seriesId = OhlcUtilities.GetHash(context.Pair, context.Resolution, Network); var granularitySeconds = GetSeconds(context.Resolution); var maxNumberOfCandles = 200; var tsFrom = (long)context.Range.UtcFrom.ToUnixTimeStamp(); var tsTo = (long)context.Range.UtcTo.ToUnixTimeStamp(); var tsStep = maxNumberOfCandles * granularitySeconds; var currTsTo = tsTo; var currTsFrom = tsTo - tsStep; while (currTsTo > tsFrom) { var candles = await api.GetCandlesAsync(currencyCode, currTsFrom.ToUtcDateTime(), currTsTo.ToUtcDateTime(), granularitySeconds).ConfigureAwait(false); foreach (var candle in candles) { var dateTime = ((long)candle[0]).ToUtcDateTime(); ohlc.Add(new OhlcEntry(seriesId, dateTime, this) { Low = candle[1], High = candle[2], Open = candle[3], Close = candle[4], VolumeTo = candle[5], VolumeFrom = candle[5], WeightedAverage = 0 // Is not provided by API. }); } currTsTo = currTsFrom; if (currTsTo - tsStep >= tsFrom) { currTsFrom -= tsStep; } else { currTsFrom = tsFrom; } ApiHelpers.EnterRate(this, context); } return(ohlc); }