private void DrawLevels(ChartTrendLine mainLine) { var verticalDelta = mainLine.GetPriceDelta(); var previousLevelPrice = double.NaN; FibonacciLevel previousLevel = null; var startTime = mainLine.GetStartTime(); var endTime = mainLine.GetEndTime(); foreach (var level in _levels) { var levelAmount = level.Percent == 0 ? 0 : verticalDelta * level.Percent; var levelLineName = GetObjectName(string.Format("LevelLine_{0}", level.Percent)); var price = mainLine.Y2 > mainLine.Y1 ? mainLine.Y2 - levelAmount : mainLine.Y2 + levelAmount; var lineColor = level.IsFilled ? level.LineColor : level.FillColor; var levelLine = Chart.DrawTrendLine(levelLineName, startTime, price, endTime, price, lineColor, level.Thickness, level.Style); levelLine.IsInteractive = true; levelLine.IsLocked = true; levelLine.ExtendToInfinity = level.ExtendToInfinity; _levelLines[level.Percent] = levelLine; if (previousLevel == null) { previousLevelPrice = price; previousLevel = level; continue; } var levelRectangleName = GetObjectName(string.Format("LevelRectangle_{0}", level.Percent)); var rectangle = Chart.DrawRectangle(levelRectangleName, startTime, previousLevelPrice, endTime, price, level.FillColor, 0); rectangle.IsFilled = level.IsFilled; rectangle.IsInteractive = true; rectangle.IsLocked = true; if (level.ExtendToInfinity) { rectangle.Time2 = rectangle.Time2.AddMonths(100); } previousLevelPrice = price; previousLevel = level; } }
private void UpdatePattern(ChartTrendLine mainLine, IOrderedEnumerable <KeyValuePair <double, ChartTrendLine> > levelLines, Dictionary <double, ChartRectangle> levelRectangles, ChartObject updatedChartObject) { var verticalDelta = mainLine.GetPriceDelta(); var previousLevelPrice = double.NaN; FibonacciLevel previousLevel = null; var startTime = mainLine.GetStartTime(); var endTime = mainLine.GetEndTime(); foreach (var levelLine in levelLines) { var percent = levelLine.Key; var level = _levels.FirstOrDefault(iLevel => iLevel.Percent == percent); if (level == null) { continue; } var levelAmount = percent == 0 ? 0 : verticalDelta * percent; var price = mainLine.Y2 > mainLine.Y1 ? mainLine.Y2 - levelAmount : mainLine.Y2 + levelAmount; levelLine.Value.Time1 = startTime; levelLine.Value.Time2 = endTime; levelLine.Value.Y1 = price; levelLine.Value.Y2 = price; if (previousLevel == null) { previousLevelPrice = price; previousLevel = level; continue; } ChartRectangle levelRectangle; if (levelRectangles.TryGetValue(level.Percent, out levelRectangle)) { if (levelLine.Value == updatedChartObject) { levelRectangle.Color = Color.FromArgb(level.FillColor.A, levelLine.Value.Color); } else if (levelRectangle == updatedChartObject) { levelLine.Value.Color = Color.FromArgb(level.LineColor.A, levelRectangle.Color); } } ChartRectangle previousLevelRectangle; if (!levelRectangles.TryGetValue(previousLevel.Percent, out previousLevelRectangle)) { continue; } previousLevelRectangle.Time1 = startTime; previousLevelRectangle.Time2 = previousLevel.ExtendToInfinity ? endTime.AddMonths(100) : endTime; previousLevelRectangle.Y1 = previousLevelPrice; previousLevelRectangle.Y2 = price; previousLevelPrice = price; previousLevel = level; } }