/// <summary> /// Is the timerange and granularity specifies more candles than Oanda can handle in one request? /// </summary> /// <param name="granularity">The granularity to check</param> /// <param name="from">From date time</param> /// <param name="to">To date time</param> /// <returns></returns> public static bool AreMultipleQueriesRequired(this CandlestickGranularity granularity, DateTime from, DateTime to) { // Always convert dates to UTC when working with Oanda from = from.ToUniversalTime(); to = to.ToUniversalTime(); // Check the number of candles return(granularity.GetNumberOfCandlesForTimeRange(from, to) > OANDA_MAX_CANDLES); }
/// <summary> /// Explode a datetime range to multiple to fit in to Oanda API limitation /// </summary> /// <param name="granularity"></param> /// <param name="from"></param> /// <param name="to"></param> /// <returns></returns> public static IEnumerable <DateTimeRange> ExplodeToMultipleCandleRanges(this CandlestickGranularity granularity, DateTime from, DateTime to) { // Always convert dates to UTC when working with Oanda from = from.ToUniversalTime(); to = to.ToUniversalTime(); // Make the timerange calulation var numberOfCandles = granularity.GetNumberOfCandlesForTimeRange(from, to); var numberOfQueries = Math.Ceiling(numberOfCandles / OANDA_MAX_CANDLES); var candleRanges = new List <DateTimeRange>(); for (var i = 0; i <= (numberOfQueries - 1); i++) { candleRanges.Add(new DateTimeRange() { From = from.AddSeconds(i * OANDA_MAX_CANDLES * granularity.GetInSeconds()), To = (i == (numberOfQueries - 1)) ? to : from.AddSeconds(((i + 1) * OANDA_MAX_CANDLES * granularity.GetInSeconds()) - 1) }); } // Return the tim ranges created return(candleRanges); }