private static List <ExtremaGroup> MergeGroups(List <Extrema> extremePoints, int minCount = 0)
        {
            extremePoints = extremePoints.OrderByDescending(c => c.CurrentPrice.StartTime).ToList();

            var extremaGroups = new List <ExtremaGroup>();

            for (var i = 0; i < extremePoints.Count; i++)
            {
                var pointI = extremePoints[i];

                var group = new ExtremaGroup()
                {
                    pointI.CurrentPrice
                };

                var newIndex = i;
                for (var j = i + 1; j < extremePoints.Count; j++)
                {
                    var pointJ = extremePoints[j];

                    var valJ = extremePoints[j].CurrentPrice.Close;

                    if (valJ < pointI.UpperZone && valJ > pointI.LowerZone)
                    {
                        @group.Add(pointJ.CurrentPrice);
                        newIndex = j;
                    }
                    else
                    {
                        break;
                    }
                }

                i = newIndex;
                extremaGroups.Add(@group);
            }

            extremaGroups = extremaGroups.Where(g => g.Count > minCount).ToList();
            return(extremaGroups);
        }
Exemple #2
0
 public static void Print(this ExtremaGroup extremaGroup)
 {
     Console.WriteLine($"AVG: {extremaGroup.Average}, ({extremaGroup.MinValue}, {extremaGroup.MaxValue}), Rank: {extremaGroup.Count}");
 }