/// <summary> /// Sets StartTime and EndTime of a target range /// </summary> /// <param name="range">Target range</param> public void Convert(ITimeRange range) { DateTime now = DateTime.UtcNow; try { range.StartTime = DateTimeExtension.Max(MinValue, ConvertStartTime(now)); } catch (ArgumentOutOfRangeException) { range.StartTime = MinValue; } try { range.EndTime = DateTimeExtension.Min(MaxValue, ConvertEndTime(now)); } catch (ArgumentOutOfRangeException) { range.EndTime = MaxValue; } }
public static OandaCandle[] LoadCandles(string instrument, string granularity, DateTime from) { List <OandaCandle> result = new List <OandaCandle>(); DateTimeOffset date = from.ToUniversalTime().Date; while (date.Date < DateTimeOffset.Now.AddDays(-1).Date) { Console.Write($"Loading {date.Date}"); string filename = $"{instrument}{granularity}{date.Year}{date.Month.ToString("D2")}{date.Day.ToString("D2")}.csv"; if (!File.Exists(filename)) { DateTimeOffset iterator = date; if (date.Date.DayOfWeek == DayOfWeek.Sunday || date.Date.DayOfWeek == DayOfWeek.Saturday) { Console.WriteLine($" SKIPED"); date = date.AddDays(1); continue; } //date = date.AddSeconds(1); List <OandaCandle> daycandles = new List <OandaCandle>(); do { var candles = GetCandles(instrument, granularity, iterator.DateTime); daycandles.AddRange(candles.Candles); Console.WriteLine($" receive {candles.Candles.Count()} from {candles.Candles.Min(c => c.Time)} to {candles.Candles.Max(c => c.Time)}"); var max = daycandles.Max(c => c.Time); Console.WriteLine($"max date {max}"); iterator = DateTimeExtension.Max(date, candles.Candles.Max(c => c.Time)); } while (iterator.Date < date.Date.AddDays(1)); daycandles = daycandles.Where(c => c.Time.Date == date.Date).ToList(); if (daycandles.Count() > 0) { Console.WriteLine($" loaded {daycandles.Count} from {daycandles.Min(c => c.Time)} to {daycandles.Max(c => c.Time)}"); using (var writer = new StreamWriter(filename)) using (var csv = new CsvWriter(writer)) { csv.WriteRecords(daycandles); } result.AddRange(daycandles); } } else { using (var reader = new StreamReader(filename)) using (var csv = new CsvReader(reader)) { var records = csv.GetRecords <OandaCandle>(); result.AddRange(records); } } Console.WriteLine($" OK"); date = date.AddDays(1); } return(result.ToArray()); }