protected override void OnMouseMove(ChartMouseEventArgs obj)
        {
            if (_controllerLine == null)
            {
                return;
            }

            _controllerLine.Time2 = obj.TimeValue;
            _controllerLine.Y2    = obj.YValue;

            var startBarIndex = Chart.Bars.GetBarIndex(_controllerLine.Time1, Chart.Symbol);

            var barsNumber = _controllerLine.GetBarsNumber(Chart.Bars, Chart.Symbol);

            foreach (var level in _fibonacciLevels)
            {
                var levelLineName = GetObjectName(string.Format("Level_{0}", level.Percent.ToString(CultureInfo.InvariantCulture)));

                var barsAmount = barsNumber * level.Percent;

                var lineBarIndex = _controllerLine.Time2 > _controllerLine.Time1 ? startBarIndex + barsAmount : startBarIndex - barsAmount;

                var lineTime = Chart.Bars.GetOpenTime(lineBarIndex, Chart.Symbol);

                var levelLine = Chart.DrawVerticalLine(levelLineName, lineTime, level.LineColor, level.Thickness, level.Style);

                levelLine.IsInteractive = true;

                levelLine.IsLocked = true;
            }
        }
Exemplo n.º 2
0
        public static void RefelectOnOtherLine(this ChartTrendLine line, ChartTrendLine otherLine, Bars bars, Symbol symbol)
        {
            var onePercentFirstBarIndex = bars.GetBarIndex(otherLine.Time1, symbol);

            var zeroLineBarsDelta  = line.GetBarsNumber(bars, symbol);
            var zeroLinePriceDelta = line.GetPriceDelta();

            var zeroLineSlope = line.GetSlope();

            double secondBarIndex, secondPrice;

            if (line.Time1 < line.Time2)
            {
                secondBarIndex = onePercentFirstBarIndex + zeroLineBarsDelta;
                secondPrice    = zeroLineSlope > 0 ? otherLine.Y1 + zeroLinePriceDelta : otherLine.Y1 - zeroLinePriceDelta;
            }
            else
            {
                secondBarIndex = onePercentFirstBarIndex - zeroLineBarsDelta;
                secondPrice    = zeroLineSlope > 0 ? otherLine.Y1 - zeroLinePriceDelta : otherLine.Y1 + zeroLinePriceDelta;
            }

            otherLine.Time2 = bars.GetOpenTime(secondBarIndex, symbol);
            otherLine.Y2    = secondPrice;
        }
Exemplo n.º 3
0
        private void UpdateFans(ChartTrendLine mainFan, ChartTrendLine handleLine, Dictionary <double, ChartTrendLine> fans)
        {
            var endBarIndex = Chart.Bars.GetBarIndex(mainFan.Time2, Chart.Symbol);

            var barsDelta  = handleLine.GetBarsNumber(Chart.Bars, Chart.Symbol) / 2;
            var priceDelta = handleLine.GetPriceDelta() / 2;

            var slope = handleLine.GetSlope();

            foreach (var fan in fans)
            {
                var fanSettings = SideFanSettings.FirstOrDefault(iSettings => iSettings.Percent == fan.Key);

                if (fanSettings == null)
                {
                    continue;
                }

                var secondBarIndex = slope > 0 ? endBarIndex + barsDelta * fanSettings.Percent : endBarIndex - barsDelta * fanSettings.Percent;

                var secondTime = Chart.Bars.GetOpenTime(secondBarIndex, Chart.Symbol);

                var secondPrice = mainFan.Y2 + priceDelta * fanSettings.Percent;

                var fanLine = fan.Value;

                fanLine.Time1 = mainFan.Time1;
                fanLine.Time2 = secondTime;

                fanLine.Y1 = mainFan.Y1;
                fanLine.Y2 = secondPrice;
            }
        }
        private void UpdateFibonacciLevels(ChartTrendLine mainLine, ChartTrendLine distanceLine, ChartVerticalLine[] verticalLines)
        {
            var startBarIndex = Chart.Bars.GetBarIndex(distanceLine.Time2, Chart.Symbol);

            var barsNumber = mainLine.GetBarsNumber(Chart.Bars, Chart.Symbol);

            foreach (var verticalLine in verticalLines)
            {
                double lineLevelPercent;

                if (!double.TryParse(verticalLine.Name.Split('_').Last(), NumberStyles.Any, CultureInfo.InvariantCulture, out lineLevelPercent))
                {
                    continue;
                }

                var level = _fibonacciLevels.FirstOrDefault(iLevel => iLevel.Percent == lineLevelPercent);

                if (level == null)
                {
                    continue;
                }

                var barsAmount = barsNumber * level.Percent;

                var lineBarIndex = mainLine.Time2 > mainLine.Time1 ? startBarIndex + barsAmount : startBarIndex - barsAmount;

                verticalLine.Time = Chart.Bars.GetOpenTime(lineBarIndex, Chart.Symbol);
            }
        }
Exemplo n.º 5
0
        private void UpdateMedianLine(ChartTrendLine medianLine, ChartTrendLine handleLine)
        {
            var handleLineStartBarIndex = handleLine.GetStartBarIndex(Chart.Bars, Chart.Symbol);
            var handleLineBarsNumber    = handleLine.GetBarsNumber(Chart.Bars, Chart.Symbol);

            medianLine.Time2 = Chart.Bars.GetOpenTime(handleLineStartBarIndex + handleLineBarsNumber / 2, Chart.Symbol);
            medianLine.Y2    = handleLine.GetBottomPrice() + handleLine.GetPriceDelta() / 2;
        }
Exemplo n.º 6
0
        private void UpdateMainFan(ChartTrendLine handleLine, ChartTrendLine mainFan)
        {
            var handleLineBarsNumber = handleLine.GetBarsNumber(Chart.Bars, Chart.Symbol);

            var mainFanLineSecondBarIndex = handleLine.GetStartBarIndex(Chart.Bars, Chart.Symbol) + handleLineBarsNumber / 2;

            mainFan.Time2 = Chart.Bars.GetOpenTime(mainFanLineSecondBarIndex, Chart.Symbol);
            mainFan.Y2    = handleLine.GetBottomPrice() + handleLine.GetPriceDelta() / 2;
        }
Exemplo n.º 7
0
        protected override void OnMouseMove(ChartMouseEventArgs obj)
        {
            if (MouseUpNumber < 2 || _handleLine == null)
            {
                base.OnMouseMove(obj);

                return;
            }

            _handleLine.Time2 = obj.TimeValue;
            _handleLine.Y2    = obj.YValue;

            var handleLineBarsNumber = _handleLine.GetBarsNumber(Chart.Bars, Chart.Symbol);

            var mainFanLineSecondBarIndex = _handleLine.GetStartBarIndex(Chart.Bars, Chart.Symbol) + handleLineBarsNumber / 2;

            MainFanLine.Time2 = Chart.Bars.GetOpenTime(mainFanLineSecondBarIndex, Chart.Symbol);
            MainFanLine.Y2    = _handleLine.GetBottomPrice() + _handleLine.GetPriceDelta() / 2;

            DrawSideFans(MainFanLine);
        }
Exemplo n.º 8
0
        private void DrawOrUpdateVerticalLines(ChartTrendLine mainFan, Dictionary <double, ChartTrendLine> verticalLines)
        {
            var startBarIndex = mainFan.GetStartBarIndex(Chart.Bars, Chart.Symbol);
            var endBarIndex   = mainFan.GetEndBarIndex(Chart.Bars, Chart.Symbol);

            var barsNumber = mainFan.GetBarsNumber(Chart.Bars, Chart.Symbol);

            var rectangleEndTime = mainFan.GetEndTime();

            for (int i = 0; i < _settings.SideFanSettings.Length; i++)
            {
                var fanSettings = _settings.SideFanSettings[i];

                if (fanSettings.Percent < 0)
                {
                    continue;
                }

                var lineLevel = fanSettings.Percent * barsNumber;

                var barIndex = mainFan.Time1 > mainFan.Time2 ? startBarIndex + lineLevel : endBarIndex - lineLevel;

                var time = Chart.Bars.GetOpenTime(barIndex, Chart.Symbol);

                if (time > rectangleEndTime)
                {
                    time = rectangleEndTime;
                }

                ChartTrendLine line;

                if (verticalLines.TryGetValue(fanSettings.Percent, out line))
                {
                    line.Time1 = time;
                    line.Time2 = time;

                    line.Y1 = mainFan.Y1;
                    line.Y2 = mainFan.Y2;
                }
                else if (_settings.ShowTimeLevels)
                {
                    var objectName = GetObjectName(string.Format("VerticalLine_{0}", fanSettings.Percent.ToString(CultureInfo.InvariantCulture)));

                    line = Chart.DrawTrendLine(objectName, time, mainFan.Y1, time, mainFan.Y2, _settings.TimeLevelsColor, _settings.TimeLevelsThickness, _settings.TimeLevelsStyle);

                    line.IsInteractive = true;
                    line.IsLocked      = true;

                    verticalLines.Add(fanSettings.Percent, line);
                }
            }
        }
Exemplo n.º 9
0
        protected virtual void UpdateSideFans(ChartTrendLine mainFan, Dictionary <double, ChartTrendLine> sideFans)
        {
            var startBarIndex = mainFan.GetStartBarIndex(Chart.Bars, Chart.Symbol);
            var endBarIndex   = mainFan.GetEndBarIndex(Chart.Bars, Chart.Symbol);

            var barsNumber = mainFan.GetBarsNumber(Chart.Bars, Chart.Symbol);

            var mainFanPriceDelta = mainFan.GetPriceDelta();

            for (var iFan = 0; iFan < SideFanSettings.Length; iFan++)
            {
                var fanSettings = SideFanSettings[iFan];

                double   y2;
                DateTime time2;

                if (fanSettings.Percent < 0)
                {
                    var yAmount = mainFanPriceDelta * Math.Abs(fanSettings.Percent);

                    y2 = mainFan.Y2 > mainFan.Y1 ? mainFan.Y2 - yAmount : mainFan.Y2 + yAmount;

                    time2 = mainFan.Time2;
                }
                else
                {
                    y2 = mainFan.Y2;

                    var barsPercent = barsNumber * fanSettings.Percent;

                    var barIndex = mainFan.Time2 > mainFan.Time1 ? endBarIndex - barsPercent : startBarIndex + barsPercent;

                    time2 = Chart.Bars.GetOpenTime(barIndex, Chart.Symbol);
                }

                ChartTrendLine fanLine;

                if (!sideFans.TryGetValue(fanSettings.Percent, out fanLine))
                {
                    continue;
                }

                fanLine.Time1 = mainFan.Time1;
                fanLine.Time2 = time2;

                fanLine.Y1 = mainFan.Y1;
                fanLine.Y2 = y2;
            }
        }
Exemplo n.º 10
0
        protected virtual void DrawSideFans(ChartTrendLine mainFan)
        {
            var startBarIndex = mainFan.GetStartBarIndex(Chart.Bars, Chart.Symbol);
            var endBarIndex   = mainFan.GetEndBarIndex(Chart.Bars, Chart.Symbol);

            var barsNumber = mainFan.GetBarsNumber(Chart.Bars, Chart.Symbol);

            var mainFanPriceDelta = mainFan.GetPriceDelta();

            for (var iFan = 0; iFan < SideFanSettings.Length; iFan++)
            {
                var fanSettings = SideFanSettings[iFan];

                double   y2;
                DateTime time2;

                if (fanSettings.Percent < 0)
                {
                    var yAmount = mainFanPriceDelta * Math.Abs(fanSettings.Percent);

                    y2 = mainFan.Y2 > mainFan.Y1 ? mainFan.Y2 - yAmount : mainFan.Y2 + yAmount;

                    time2 = mainFan.Time2;
                }
                else
                {
                    y2 = mainFan.Y2;

                    var barsPercent = barsNumber * fanSettings.Percent;

                    var barIndex = mainFan.Time2 > mainFan.Time1 ? endBarIndex - barsPercent : startBarIndex + barsPercent;

                    time2 = Chart.Bars.GetOpenTime(barIndex, Chart.Symbol);
                }

                var objectName = GetObjectName(string.Format("SideFan_{0}", fanSettings.Percent));

                var trendLine = Chart.DrawTrendLine(objectName, mainFan.Time1, mainFan.Y1, time2, y2, fanSettings.Color, fanSettings.Thickness, fanSettings.Style);

                trendLine.IsInteractive    = true;
                trendLine.IsLocked         = true;
                trendLine.ExtendToInfinity = true;

                SideFanLines[fanSettings.Percent] = trendLine;
            }
        }
Exemplo n.º 11
0
        private void UpdateHandleLine(ChartTrendLine handleLine, ChartTrendLine mainFan)
        {
            var mainFanSecondBarIndex    = Chart.Bars.GetBarIndex(mainFan.Time2, Chart.Symbol);
            var handleLineHalfBarsNumber = handleLine.GetBarsNumber(Chart.Bars, Chart.Symbol) / 2;

            var firstBarIndex  = mainFanSecondBarIndex - handleLineHalfBarsNumber;
            var secondBarIndex = mainFanSecondBarIndex + handleLineHalfBarsNumber;

            handleLine.Time1 = Chart.Bars.GetOpenTime(firstBarIndex, Chart.Symbol);
            handleLine.Time2 = Chart.Bars.GetOpenTime(secondBarIndex, Chart.Symbol);

            var handleLineHalfPriceDelta = handleLine.GetPriceDelta() / 2;

            var handleLineSlope = handleLine.GetSlope();

            handleLine.Y1 = handleLineSlope > 0 ? mainFan.Y2 - handleLineHalfPriceDelta : mainFan.Y2 + handleLineHalfPriceDelta;
            handleLine.Y2 = handleLineSlope > 0 ? mainFan.Y2 + handleLineHalfPriceDelta : mainFan.Y2 - handleLineHalfPriceDelta;
        }
        protected override void OnMouseMove(ChartMouseEventArgs obj)
        {
            if (MouseUpNumber == 1)
            {
                _zeroLine.Time2 = obj.TimeValue;
                _zeroLine.Y2    = obj.YValue;
            }
            else if (MouseUpNumber == 2 && _zeroLine != null)
            {
                var onePercentLineName = GetObjectName("OnePercentLine");

                var onePercentFirstBarIndex = Chart.Bars.GetBarIndex(obj.TimeValue, Chart.Symbol);

                var zeroLineBarsDelta  = _zeroLine.GetBarsNumber(Chart.Bars, Chart.Symbol);
                var zeroLinePriceDelta = _zeroLine.GetPriceDelta();

                var zeroLineSlope = _zeroLine.GetSlope();

                double secondBarIndex, secondPrice;

                if (_zeroLine.Time1 < _zeroLine.Time2)
                {
                    secondBarIndex = onePercentFirstBarIndex + zeroLineBarsDelta;
                    secondPrice    = zeroLineSlope > 0 ? obj.YValue + zeroLinePriceDelta : obj.YValue - zeroLinePriceDelta;
                }
                else
                {
                    secondBarIndex = onePercentFirstBarIndex - zeroLineBarsDelta;
                    secondPrice    = zeroLineSlope > 0 ? obj.YValue - zeroLinePriceDelta : obj.YValue + zeroLinePriceDelta;
                }

                _onePercentLine = Chart.DrawTrendLine(onePercentLineName, obj.TimeValue, obj.YValue, Chart.Bars.GetOpenTime(secondBarIndex, Chart.Symbol), secondPrice, Color, 1, LineStyle.Dots);

                _onePercentLine.IsInteractive = true;

                var levellines = DrawFibonacciLevels(_zeroLine, _onePercentLine, zeroLineSlope, Id);

                foreach (var levelLine in levellines)
                {
                    _otherLevelLines[levelLine.Key] = levelLine.Value;
                }
            }
        }
        private void DrawFibonacciLevels()
        {
            var startBarIndex = Chart.Bars.GetBarIndex(_distanceLine.Time2, Chart.Symbol);

            var barsNumber = _mainLine.GetBarsNumber(Chart.Bars, Chart.Symbol);

            foreach (var level in _fibonacciLevels)
            {
                var levelLineName = GetObjectName(string.Format("Level_{0}", level.Percent.ToString(CultureInfo.InvariantCulture)));

                var barsAmount = barsNumber * level.Percent;

                var lineBarIndex = _mainLine.Time2 > _mainLine.Time1 ? startBarIndex + barsAmount : startBarIndex - barsAmount;

                var lineTime = Chart.Bars.GetOpenTime(lineBarIndex, Chart.Symbol);

                var levelLine = Chart.DrawVerticalLine(levelLineName, lineTime, level.LineColor, level.Thickness, level.Style);

                levelLine.IsInteractive = true;

                levelLine.IsLocked = true;
            }
        }
        private Dictionary <double, ChartTrendLine> DrawFibonacciLevels(ChartTrendLine zeroLine, ChartTrendLine onePercentLine, double zeroLineSlope, long id, bool updateMainLineStlyes = true)
        {
            var zeroFirstBarIndex  = Chart.Bars.GetBarIndex(zeroLine.Time1, Chart.Symbol);
            var zeroSecondBarIndex = Chart.Bars.GetBarIndex(zeroLine.Time2, Chart.Symbol);

            var onePercentFirstBarIndex = Chart.Bars.GetBarIndex(onePercentLine.Time1, Chart.Symbol);

            var barsDelta  = Math.Abs(zeroFirstBarIndex - onePercentFirstBarIndex);
            var priceDelta = Math.Abs(zeroLine.Y1 - onePercentLine.Y1);

            var zeroLineBarsDelta  = zeroLine.GetBarsNumber(Chart.Bars, Chart.Symbol);
            var zeroLinePriceDelta = zeroLine.GetPriceDelta();

            var result = new Dictionary <double, ChartTrendLine>();

            foreach (var level in _fibonacciLevels)
            {
                if (level.Percent == 0 && updateMainLineStlyes)
                {
                    zeroLine.Color     = level.LineColor;
                    zeroLine.Thickness = level.Thickness;
                    zeroLine.LineStyle = level.Style;
                }
                else if (level.Percent == 1 && updateMainLineStlyes)
                {
                    onePercentLine.Color     = level.LineColor;
                    onePercentLine.Thickness = level.Thickness;
                    onePercentLine.LineStyle = level.Style;
                }
                else
                {
                    var levelName = GetObjectName(string.Format("Level_{0}", level.Percent.ToString(CultureInfo.InvariantCulture)), id);

                    var barsAmount  = barsDelta * level.Percent;
                    var priceAmount = priceDelta * level.Percent;

                    double firstBarIndex, secondBarIndex, firstPrice, secondPrice;

                    if (onePercentLine.Time1 < zeroLine.Time1)
                    {
                        firstPrice = onePercentLine.Y1 > zeroLine.Y1 ? zeroLine.Y1 + priceAmount : zeroLine.Y1 - priceAmount;

                        if (zeroLine.Time1 < zeroLine.Time2)
                        {
                            firstBarIndex  = zeroFirstBarIndex - barsAmount;
                            secondBarIndex = firstBarIndex + zeroLineBarsDelta;

                            secondPrice = zeroLineSlope > 0 ? firstPrice + zeroLinePriceDelta : firstPrice - zeroLinePriceDelta;
                        }
                        else
                        {
                            firstBarIndex  = zeroFirstBarIndex - barsAmount;
                            secondBarIndex = firstBarIndex - zeroLineBarsDelta;

                            secondPrice = zeroLineSlope > 0 ? firstPrice - zeroLinePriceDelta : firstPrice + zeroLinePriceDelta;
                        }
                    }
                    else
                    {
                        firstPrice = onePercentLine.Y1 > zeroLine.Y1 ? zeroLine.Y1 + priceAmount : zeroLine.Y1 - priceAmount;

                        if (zeroLine.Time1 < zeroLine.Time2)
                        {
                            firstBarIndex  = zeroFirstBarIndex + barsAmount;
                            secondBarIndex = firstBarIndex + zeroLineBarsDelta;

                            secondPrice = zeroLineSlope > 0 ? firstPrice + zeroLinePriceDelta : firstPrice - zeroLinePriceDelta;
                        }
                        else
                        {
                            firstBarIndex  = zeroFirstBarIndex + barsAmount;
                            secondBarIndex = firstBarIndex - zeroLineBarsDelta;

                            secondPrice = zeroLineSlope > 0 ? firstPrice - zeroLinePriceDelta : firstPrice + zeroLinePriceDelta;
                        }
                    }

                    var firstTime  = Chart.Bars.GetOpenTime(firstBarIndex, Chart.Symbol);
                    var secondTime = Chart.Bars.GetOpenTime(secondBarIndex, Chart.Symbol);

                    var levelLine = Chart.Objects.FirstOrDefault(iObject => iObject.Name.Equals(levelName, StringComparison.OrdinalIgnoreCase)) as ChartTrendLine;

                    if (levelLine != null)
                    {
                        levelLine.Time1 = firstTime;
                        levelLine.Time2 = secondTime;

                        levelLine.Y1 = firstPrice;
                        levelLine.Y2 = secondPrice;
                    }
                    else
                    {
                        levelLine = Chart.DrawTrendLine(levelName, firstTime, firstPrice, secondTime, secondPrice, level.LineColor, level.Thickness, level.Style);
                    }

                    levelLine.IsInteractive = true;
                    levelLine.IsLocked      = true;

                    result.Add(level.Percent, levelLine);
                }
            }

            return(result);
        }