public static TrendIndex CreateSectorIndex(string sectorName, List <Security> securities, PriceBarSize priceBarSize) { var trendIndex = IndexManager.Instance.Database.GetTrendIndex(sectorName, priceBarSize, Settings.Instance.Sector_Trend_Bar_Count); var usedSecurities = ApplyDefaultStaticFilters(securities). Where(x => x.Sector == sectorName); if (usedSecurities.Count() == 0) { return(trendIndex); } var currentDate = EarliestDate(usedSecurities, Settings.Instance.Sector_Trend_Bar_Size); var latestDate = LatestDate(usedSecurities, Settings.Instance.Sector_Trend_Bar_Size); foreach (Security security in usedSecurities) { security.SetSwingPointsAndTrends(Settings.Instance.Sector_Trend_Bar_Count, Settings.Instance.Sector_Trend_Bar_Size); } while (currentDate <= latestDate) { TrendIndexDay indexDay = trendIndex.GetIndexDay(currentDate, true); var dailySecurityList = ApplyDefaultAsOfFilters(usedSecurities, currentDate); if (dailySecurityList.Count() > 0) { foreach (TrendQualification trend in Enum.GetValues(typeof(TrendQualification))) { if (trend == TrendQualification.NotSet) { continue; } var totalTrending = dailySecurityList.Where(x => x.GetPriceBar(currentDate, Settings.Instance.Sector_Trend_Bar_Size). GetTrendType(Settings.Instance.Sector_Trend_Bar_Count) == trend).Count(); indexDay.AddTrendEntry(trend, totalTrending.ToDecimal() / dailySecurityList.Count().ToDecimal()); } indexDay.SecurityCount = dailySecurityList.Count(); } switch (Settings.Instance.Sector_Trend_Bar_Size) { case PriceBarSize.Daily: currentDate = NextTradingDay(currentDate); break; case PriceBarSize.Weekly: currentDate = NextTradingWeekStart(currentDate); break; case PriceBarSize.Monthly: currentDate = NextTradingMonthStart(currentDate); break; case PriceBarSize.Quarterly: currentDate = NextTradingQuarterStart(currentDate); break; } } return(trendIndex); }