Exemple #1
0
        public override void Calculate(int index)
        {
            // Calculate value at specified index
            UpSignal[index]   = double.NaN;
            DownSignal[index] = double.NaN;

            var differenceShort = _short.Result[index] - _short2.Result[index];
            var zeroLagShort    = _short.Result[index] + differenceShort;

            var differenceLong = _long.Result[index] - _long2.Result[index];
            var zeroLagLong    = _long.Result[index] + differenceLong;

            ZeroLagMacd[index] = zeroLagShort - zeroLagLong;

            Signal1[index] = Indicators.ExponentialMovingAverage(ZeroLagMacd, Signal).Result[index];
            Signal2[index] = Indicators.ExponentialMovingAverage(Signal1, Signal).Result[index];

            var difference2     = Signal1[index] - Signal2[index];
            var difference2Prev = Signal1[index - 1] - Signal2[index - 1];

            var signalMACD     = Signal1[index] + difference2;
            var signalMACDPrev = Signal1[index - 1] + difference2Prev;

            if (signalMACD >= ZeroLagMacd[index])
            {
                UpSignal[index] = 1.0;
                IndicatorArea.DrawIcon("bearsignal" + index, ChartIconType.Circle, index, signalMACD, Color.DodgerBlue);
            }
            else if (signalMACD <= ZeroLagMacd[index])
            {
                DownSignal[index] = 1.0;
            }

            /*
             * if signalMACD&gt;=zerolagMACD then
             * r=255
             * g=69
             * b=0
             * else
             * r=54
             * g=224
             * b=208
             * endif
             *
             * drawbarchart(signalMACD,zerolagMACD,signalMACD,zerolagMACD) coloured(r,g,b)
             *
             * if zerolagMACD crosses over signalMACD or zerolagMACD crosses under signalMACD then
             * drawtext("●",barindex,signalMACD,Dialog,Bold,12) coloured(r,g,b)
             * endif
             */
        }
        private void DrawLabel(string CrossLabel, double CrossPrice)
        {
            if (_canDraw())
            {
                CrossLabel = CrossLabel.Trim();

                if (CrossLabel.Length > 0)
                {
                    var       myOutputLabel = this.GetAttributeFrom <OutputAttribute>(CrossLabel);
                    ChartText myTextLabel   = IndicatorArea.DrawText(CrossLabel, CrossLabel + " » " + CrossPrice.ToString("N2"), Bars.OpenTimes.LastValue, CrossPrice, Color.FromName(myOutputLabel.LineColor));
                    myTextLabel.IsInteractive     = false;
                    myTextLabel.FontSize          = 12;
                    myTextLabel.VerticalAlignment = VerticalAlignment.Center;
                }
            }
        }
Exemple #3
0
        public string CreateArea(string nameArea, int height)
        {
            if (all_areas.Exists(x => (string)x.Tag == nameArea))
            {
                return(nameArea);
            }

            if (nameArea == "Prime" || all_areas.Exists(x => (string)x.Tag == nameArea))
            {
                return(nameArea);
            }

            var indicator_chart = new IndicatorArea(new OxyAreaSettings()
            {
                cursor_X_is_active = true,
                cursor_Y_is_active = true,
                Tag                = nameArea,
                AbsoluteMinimum    = double.MinValue,
                Y_Axies_is_visible = true,
                X_Axies_is_visible = true,
                brush_background   = "#111721"
            }, all_areas, nameArea, this);

            indicator_chart.indicator_name = nameArea.Replace("Area", ";").Split(';')[0];
            indicator_chart.bot_tab        = this.bot_tab;

            indicator_chart.plot_model.Axes[0].TextColor          = OxyColors.Transparent;
            indicator_chart.plot_model.Axes[0].TicklineColor      = OxyColors.Transparent;
            indicator_chart.plot_model.Axes[0].AxisDistance       = -50;
            indicator_chart.plot_model.Axes[1].IntervalLength     = 10;
            indicator_chart.plot_model.Axes[1].MinorGridlineStyle = LineStyle.None;
            indicator_chart.plot_model.PlotMargins = new OxyThickness(0, indicator_chart.plot_model.PlotMargins.Top, indicator_chart.plot_model.PlotMargins.Right, indicator_chart.plot_model.PlotMargins.Bottom);
            indicator_chart.plot_model.Padding     = new OxyThickness(0, 0, indicator_chart.plot_model.Padding.Right, 0);
            indicator_chart.plot_model.PlotMargins = new OxyThickness(0, 0, indicator_chart.plot_model.PlotMargins.Right, 0);
            indicator_chart.plot_view.Padding      = new System.Windows.Thickness(0, 0, indicator_chart.plot_view.Padding.Right, 0);
            indicator_chart.plot_view.Margin       = new System.Windows.Thickness(0, 0, indicator_chart.plot_view.Margin.Right, 0);

            all_areas.Add(indicator_chart);
            mediator.AddOxyArea(indicator_chart);

            return(nameArea);
        }
Exemple #4
0
        public void RePaintIndicator(IIndicator indicatorCandle)
        {
            if (isPaint == false || can_draw == false)
            {
                return;
            }

            if (indicatorCandle == null)
            {
                return;
            }

            if (indicatorCandle.NameSeries != null)
            {
                if (!indicatorCandle.PaintOn)
                {
                    return;
                }

                if (!all_areas.Exists(x => (string)x.Tag == indicatorCandle.NameArea) && indicatorCandle.NameArea != "Prime")
                {
                    var indicator_chart = new IndicatorArea(new OxyAreaSettings()
                    {
                        cursor_X_is_active = true,
                        cursor_Y_is_active = true,
                        Tag                = indicatorCandle.NameArea,
                        AbsoluteMinimum    = double.MinValue,
                        Y_Axies_is_visible = true,
                        X_Axies_is_visible = true,
                        brush_background   = "#111721"
                    }, all_areas, indicatorCandle.NameArea, this);

                    indicator_chart.indicator_name = indicatorCandle.NameArea.Replace("Area", ";").Split(';')[0];
                    indicator_chart.bot_tab        = this.bot_tab;
                    indicator_chart.bot_name       = this.bot_name;

                    indicator_chart.plot_model.Axes[0].TextColor          = OxyColors.Transparent;
                    indicator_chart.plot_model.Axes[0].TicklineColor      = OxyColors.Transparent;
                    indicator_chart.plot_model.Axes[0].AxisDistance       = -50;
                    indicator_chart.plot_model.Axes[1].IntervalLength     = 10;
                    indicator_chart.plot_model.Axes[1].MinorGridlineStyle = LineStyle.None;
                    indicator_chart.plot_model.PlotMargins = new OxyThickness(0, indicator_chart.plot_model.PlotMargins.Top, indicator_chart.plot_model.PlotMargins.Right, indicator_chart.plot_model.PlotMargins.Bottom);
                    indicator_chart.plot_model.Padding     = new OxyThickness(0, 0, indicator_chart.plot_model.Padding.Right, 0);
                    indicator_chart.plot_model.PlotMargins = new OxyThickness(0, 0, indicator_chart.plot_model.PlotMargins.Right, 0);
                    indicator_chart.plot_view.Padding      = new System.Windows.Thickness(0, 0, indicator_chart.plot_view.Padding.Right, 0);
                    indicator_chart.plot_view.Margin       = new System.Windows.Thickness(0, 0, indicator_chart.plot_view.Margin.Right, 0);

                    all_areas.Add(indicator_chart);
                    mediator.AddOxyArea(indicator_chart);
                }

                if (!series.Exists(x => x.SeriaName == indicatorCandle.NameSeries && x.AreaName == indicatorCandle.NameArea))
                {
                    var indi_area = all_areas.FindLast(x => (string)x.Tag == indicatorCandle.NameArea);

                    if (indi_area == null)
                    {
                        return;
                    }

                    if (!indicatorCandle.NameSeries.StartsWith(this.bot_name))
                    {
                        return;
                    }

                    var new_seria = new IndicatorSeria()
                    {
                        AreaName      = indicatorCandle.NameArea,
                        IndicatorType = indicatorCandle.TypeIndicator,
                        SeriaName     = indicatorCandle.NameSeries,
                        BotTab        = this.bot_tab
                    };

                    if (!series.Contains(new_seria))
                    {
                        series.Add(new IndicatorSeria()
                        {
                            AreaName      = indicatorCandle.NameArea,
                            IndicatorType = indicatorCandle.TypeIndicator,
                            SeriaName     = indicatorCandle.NameSeries,
                            BotTab        = this.bot_tab
                        });
                    }
                }
            }
            else
            {
                foreach (var ser_name in ((Aindicator)indicatorCandle).DataSeries)
                {
                    if (!ser_name.IsPaint)
                    {
                        continue;
                    }

                    string seria_name = ser_name.NameSeries;

                    if (!all_areas.Exists(x => (string)x.Tag == indicatorCandle.NameArea) && indicatorCandle.NameArea != "Prime")
                    {
                        var indicator_chart = new IndicatorArea(new OxyAreaSettings()
                        {
                            cursor_X_is_active = true,
                            cursor_Y_is_active = true,
                            Tag                = indicatorCandle.NameArea,
                            AbsoluteMinimum    = double.MinValue,
                            Y_Axies_is_visible = true,
                            X_Axies_is_visible = true,
                            brush_background   = "#111721"
                        }, all_areas, indicatorCandle.NameArea, this);

                        indicator_chart.indicator_name = indicatorCandle.NameArea.Replace("Area", ";").Split(';')[0];
                        indicator_chart.bot_tab        = this.bot_tab;
                        indicator_chart.bot_name       = this.bot_name;

                        indicator_chart.plot_model.Axes[0].TextColor          = OxyColors.Transparent;
                        indicator_chart.plot_model.Axes[0].TicklineColor      = OxyColors.Transparent;
                        indicator_chart.plot_model.Axes[0].AxisDistance       = -50;
                        indicator_chart.plot_model.Axes[1].IntervalLength     = 10;
                        indicator_chart.plot_model.Axes[1].MinorGridlineStyle = LineStyle.None;
                        indicator_chart.plot_model.PlotMargins = new OxyThickness(0, indicator_chart.plot_model.PlotMargins.Top, indicator_chart.plot_model.PlotMargins.Right, indicator_chart.plot_model.PlotMargins.Bottom);
                        indicator_chart.plot_model.Padding     = new OxyThickness(0, 0, indicator_chart.plot_model.Padding.Right, 0);
                        indicator_chart.plot_model.PlotMargins = new OxyThickness(0, 0, indicator_chart.plot_model.PlotMargins.Right, 0);
                        indicator_chart.plot_view.Padding      = new System.Windows.Thickness(0, 0, indicator_chart.plot_view.Padding.Right, 0);
                        indicator_chart.plot_view.Margin       = new System.Windows.Thickness(0, 0, indicator_chart.plot_view.Margin.Right, 0);

                        all_areas.Add(indicator_chart);
                        mediator.AddOxyArea(indicator_chart);
                    }

                    if (!series.Exists(x => x.SeriaName == seria_name && x.AreaName == indicatorCandle.NameArea))
                    {
                        var indi_area = all_areas.FindLast(x => (string)x.Tag == indicatorCandle.NameArea);

                        if (indi_area == null)
                        {
                            return;
                        }

                        if (!seria_name.StartsWith(this.bot_name))
                        {
                            return;
                        }

                        var new_seria = new IndicatorSeria()
                        {
                            AreaName      = indicatorCandle.NameArea,
                            IndicatorType = indicatorCandle.TypeIndicator,
                            SeriaName     = seria_name,
                            BotTab        = this.bot_tab
                        };

                        if (!series.Contains(new_seria))
                        {
                            series.Add(new IndicatorSeria()
                            {
                                AreaName      = indicatorCandle.NameArea,
                                IndicatorType = indicatorCandle.TypeIndicator,
                                SeriaName     = seria_name,
                                BotTab        = this.bot_tab
                            });
                        }
                    }
                }
            }

            if (main_grid_chart != null)
            {
                main_grid_chart.Children.Clear();
                main_grid_chart.RowDefinitions.Clear();

                MakeChart(main_grid_chart);
            }
        }