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>=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; } } }
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); }
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); } }