コード例 #1
0
        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);
        }