Пример #1
0
        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);
                }
            }
        }