Exemple #1
0
        /// <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;
            }
        }
Exemple #2
0
        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());
        }