Esempio n. 1
0
        public static TrendIndex UpdateSectorIndex(TrendIndex indexToUpdate, List <Security> securities)
        {
            if (securities.Count == 0)
            {
                return(null);
            }

            var usedSecurities = securities.
                                 Where(x => x.Sector == indexToUpdate.IndexName).
                                 Where(x => x.DailyPriceBarData.Count > 0).
                                 Where(x => !x.MissingData && !x.Excluded).ToList();

            DateTime currentDate = indexToUpdate.LatestDate ??
                                   (from sec in usedSecurities select sec.GetFirstBar(indexToUpdate.TrendPriceBarSize).BarDateTime).Min();

            var priceBarSize = indexToUpdate.TrendPriceBarSize;
            var barCount     = indexToUpdate.IndexSwingpointBarCount;

            foreach (Security security in usedSecurities)
            {
                security.SetSwingPointsAndTrends(barCount, priceBarSize);
            }

            while (currentDate <= LatestDate(usedSecurities, priceBarSize))
            {
                TrendIndexDay indexDay = indexToUpdate.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, priceBarSize).GetTrendType(barCount) == trend).Count();
                        indexDay.AddTrendEntry(trend, totalTrending.ToDecimal() / dailySecurityList.Count().ToDecimal());
                    }
                }

                switch (priceBarSize)
                {
                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(indexToUpdate);
        }
Esempio n. 2
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);
        }