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); }
public static void Print(this ExtremaGroup extremaGroup) { Console.WriteLine($"AVG: {extremaGroup.Average}, ({extremaGroup.MinValue}, {extremaGroup.MaxValue}), Rank: {extremaGroup.Count}"); }