private void LoadNews(IStrategyLogger stategyLogger) { List <string> currencyList = GetCurrenciesFromSymbol(Symbol); List <News> allNewsCollection = News.Load(NewsPath, stategyLogger); if (stategyLogger != null) { stategyLogger.AddMessage("{0} news were loaded.", allNewsCollection.Count); } List <TimeRange> timeRangeNewsCollection = new List <TimeRange>(); List <TimeRange> timeRangeHolidayCollection = new List <TimeRange>(); int gmt = IsCacheNews ? 0 : this.GMT; foreach (News currNews in allNewsCollection) { //if (stategyLogger != null) // stategyLogger.AddMessage("{0}, {1}", currNews.currency.ToLower(), currNews.Importance.ToString()); if (currencyList.Contains(currNews.currency.ToLower()) && currNews.Importance == NewsImportance.High) { timeRangeNewsCollection.Add(new TimeRange(currNews.DateTime.AddMinutes(-MinutesBefore), currNews.DateTime.AddMinutes(MinutesAfter), currNews.Desription)); } } DateTime firstDate = timeRangeNewsCollection.Count > 0 ? timeRangeNewsCollection[0].StartDateTime.Date : DateTime.Now.Date.AddYears(-1); DateTime lastDate = timeRangeNewsCollection.Count > 0 ? timeRangeNewsCollection[timeRangeNewsCollection.Count - 1].EndDateTime.Date : DateTime.Now.Date.AddYears(-1).AddDays(1); while (firstDate.DayOfWeek != DayOfWeek.Saturday) { firstDate = firstDate.AddDays(-1); } while (lastDate.DayOfWeek != DayOfWeek.Saturday) { lastDate = lastDate.AddDays(1); } DateTime iteratorDateTime = firstDate; while (iteratorDateTime <= lastDate) { if (iteratorDateTime.DayOfWeek == DayOfWeek.Saturday) { timeRangeHolidayCollection.Add(new TimeRange(iteratorDateTime.AddHours(-gmt).AddMinutes(-MinutesBefore), iteratorDateTime.AddHours(-gmt).AddMinutes(MinutesAfter), "DayOfWeek.Saturday")); } if (iteratorDateTime.DayOfWeek == DayOfWeek.Sunday) { timeRangeHolidayCollection.Add(new TimeRange(iteratorDateTime.AddDays(1).AddHours(-gmt).AddMinutes(-MinutesBefore), iteratorDateTime.AddDays(1).AddHours(-gmt).AddMinutes(MinutesAfter), "DayOfWeek.Sunday")); } iteratorDateTime = iteratorDateTime.AddDays(1); } int iterNews = 0; int iterHolidays = 0; for (int i = 0; i < timeRangeHolidayCollection.Count + timeRangeNewsCollection.Count; i++) { if (iterNews >= timeRangeNewsCollection.Count) { timeRangeCollection.Add(timeRangeHolidayCollection[iterHolidays++]); continue; } if (iterHolidays >= timeRangeHolidayCollection.Count) { timeRangeCollection.Add(timeRangeNewsCollection[iterNews++]); continue; } if (timeRangeHolidayCollection[iterHolidays].StartDateTime < timeRangeNewsCollection[iterNews].StartDateTime) { timeRangeCollection.Add(timeRangeHolidayCollection[iterHolidays++]); } else { timeRangeCollection.Add(timeRangeNewsCollection[iterNews++]); } } if (stategyLogger != null) { foreach (TimeRange currTimeRange in timeRangeCollection) { stategyLogger.AddMessage("{0} - {1}, {2}", currTimeRange.StartDateTime, currTimeRange.EndDateTime, currTimeRange.Description); } } }