Turning the indicator inside the program on and off.
Turning the indicator inside the program on and off.
26 Feb 2019, 09:05
Hello.
Hello.
Is it possible to turning the indicator inside the program on and off.?
In the following example, the average does not appear at all. There is no problem with the "Clock" object.
using System; using System.Linq; using System.Text; using System.IO; using System.Collections.Generic; using cAlgo.API; using cAlgo.API.Indicators; using cAlgo.API.Internals; using cAlgo.Indicators; namespace cAlgo { [Indicator(IsOverlay = true, TimeZone = TimeZones.UTC, AccessRights = AccessRights.None)] public class TEST2 : Indicator { private bool showSMA; private int i; public int redPeriod = 12; [Output("Red SMA", LineColor = "Red", Thickness = 1)] public IndicatorDataSeries redSMA { get; set; } private MovingAverage _redSMA; protected override void Initialize() { Timer.TimerTick += OnTimerTick; Timer.Start(1); _redSMA = Indicators.MovingAverage(MarketSeries.Close, redPeriod, MovingAverageType.Simple); } public override void Calculate(int index) { if (showSMA) { redSMA[index] = _redSMA.Result[index]; } } private void OnTimerTick() { i++; if (i > 5 && i < 20) { showSMA = true; ChartObjects.DrawText("Clock", Time.ToString("HH:mm:ss"), StaticPosition.TopLeft); } else { showSMA = false; Chart.RemoveObject("Clock"); } } } }
Replies
3010996
26 Feb 2019, 10:44
RE:
Panagiotis Charalampous said:
Hi lw3010996,
The reason you see nothing is because showSMA is always false.
Best Regards,
Panagiotis
After 5 seconds I want to display Clock and SMA for 15 seconds. The clock displays correctly the SMA does not. The "showSMA" condition is true for 15 seconds.
using System; using System.Linq; using System.Text; using System.IO; using System.Collections.Generic; using cAlgo.API; using cAlgo.API.Indicators; using cAlgo.API.Internals; using cAlgo.Indicators; namespace cAlgo { [Indicator(IsOverlay = true, TimeZone = TimeZones.UTC, AccessRights = AccessRights.None)] public class TEST2 : Indicator { private bool showSMA; private int i; public int redPeriod = 12; [Output("Red SMA", LineColor = "Red", Thickness = 1)] public IndicatorDataSeries redSMA { get; set; } private MovingAverage _redSMA; protected override void Initialize() { Timer.TimerTick += OnTimerTick; Timer.Start(1); _redSMA = Indicators.MovingAverage(MarketSeries.Close, redPeriod, MovingAverageType.Simple); } public override void Calculate(int index) { if (showSMA) { ChartObjects.DrawText("Clock", Time.ToString("HH:mm:ss"), StaticPosition.TopLeft); redSMA[index] = _redSMA.Result[index]; } else { Chart.RemoveObject("Clock"); } } private void OnTimerTick() { i++; if (i > 5 && i < 20) { showSMA = true; } else { showSMA = false; } } } }
@3010996
PanagiotisCharalampous
26 Feb 2019, 12:36
Hi lw3010996,
Here is an example
using System; using System.Linq; using System.Text; using System.IO; using System.Collections.Generic; using cAlgo.API; using cAlgo.API.Indicators; using cAlgo.API.Internals; using cAlgo.Indicators; namespace cAlgo { [Indicator(IsOverlay = true, TimeZone = TimeZones.UTC, AccessRights = AccessRights.None)] public class TEST2 : Indicator { private bool showSMA; private int i; public int redPeriod = 12; [Output("Red SMA", LineColor = "Red", Thickness = 1)] public IndicatorDataSeries redSMA { get; set; } private MovingAverage _redSMA; protected override void Initialize() { Timer.TimerTick += OnTimerTick; Timer.Start(2); _redSMA = Indicators.MovingAverage(MarketSeries.Close, redPeriod, MovingAverageType.Simple); } public override void Calculate(int index) { redSMA[index] = _redSMA.Result[index]; } private void OnTimerTick() { showSMA = !showSMA; if (showSMA) { for (int i = 0; i < redSMA.Count; i++) { redSMA[i] = _redSMA.Result[i]; } } else { for (int i = 0; i < redSMA.Count; i++) { redSMA[i] = double.NaN; } } } } }
Best Regards,
Panagiotis
@PanagiotisCharalampous
3010996
26 Feb 2019, 22:51
RE:
Panagiotis Charalampous said:
Hi lw3010996,
Here is an example
using System; using System.Linq; using System.Text; using System.IO; using System.Collections.Generic; using cAlgo.API; using cAlgo.API.Indicators; using cAlgo.API.Internals; using cAlgo.Indicators; namespace cAlgo { [Indicator(IsOverlay = true, TimeZone = TimeZones.UTC, AccessRights = AccessRights.None)] public class TEST2 : Indicator { private bool showSMA; private int i; public int redPeriod = 12; [Output("Red SMA", LineColor = "Red", Thickness = 1)] public IndicatorDataSeries redSMA { get; set; } private MovingAverage _redSMA; protected override void Initialize() { Timer.TimerTick += OnTimerTick; Timer.Start(2); _redSMA = Indicators.MovingAverage(MarketSeries.Close, redPeriod, MovingAverageType.Simple); } public override void Calculate(int index) { redSMA[index] = _redSMA.Result[index]; } private void OnTimerTick() { showSMA = !showSMA; if (showSMA) { for (int i = 0; i < redSMA.Count; i++) { redSMA[i] = _redSMA.Result[i]; } } else { for (int i = 0; i < redSMA.Count; i++) { redSMA[i] = double.NaN; } } } } }Best Regards,
Panagiotis
Thank you, exactly the effect I tried to achieve. Unfortunately, my way was wrong.
@3010996
3010996
05 Mar 2019, 13:08
I have one more question. I'm trying to rewrite the code to show and hide on average from a different time frame. Unfortunately, the average I display shows bad values.
using System; using cAlgo.API; using cAlgo.API.Internals; using cAlgo.API.Indicators; namespace cAlgo { [Indicator(IsOverlay = true, TimeZone = TimeZones.UTC, AccessRights = AccessRights.None, AutoRescale = false)] public class Test2 : Indicator { private bool showSMA; //private int i; public int redPeriod = 12; [Output("Red SMA", LineColor = "Red", Thickness = 1)] public IndicatorDataSeries RedSMA { get; set; } [Output("Red SMA M15", LineColor = "Red", Thickness = 3)] public IndicatorDataSeries RedSMA15 { get; set; } private MovingAverage _redSMA; private MarketSeries seriesM15; private MovingAverage _redSMA15; private int indexM15; protected override void Initialize() { Timer.TimerTick += OnTimerTick; Timer.Start(2); _redSMA = Indicators.MovingAverage(MarketSeries.Close, redPeriod, MovingAverageType.Simple); seriesM15 = MarketData.GetSeries(TimeFrame.Minute15); _redSMA15 = Indicators.MovingAverage(seriesM15.Close, redPeriod, MovingAverageType.Simple); } public override void Calculate(int index) { RedSMA[index] = _redSMA.Result[index]; indexM15 = GetIndexByDate(seriesM15, MarketSeries.OpenTime[index]); if (indexM15 != -1) { RedSMA15[index] = _redSMA15.Result[indexM15]; } } private void OnTimerTick() { // // SMA - current timeframe // showSMA = !showSMA; if (showSMA) { for (int i = 0; i < RedSMA.Count; i++) { RedSMA[i] = _redSMA.Result[i]; } } else { for (int i = 0; i < RedSMA.Count; i++) { RedSMA[i] = double.NaN; } } // // SMA - timeframe 15 min // if (showSMA) { for (int i = 0; i < RedSMA15.Count; i++) { RedSMA15[i] = _redSMA15.Result[i]; } } else { for (int i = 0; i < RedSMA15.Count; i++) { RedSMA15[i] = double.NaN; } } } private int GetIndexByDate(MarketSeries series, DateTime time) { for (int i = series.Close.Count - 1; i > 0; i--) { if (time == series.OpenTime[i]) return i; } return -1; } } }
@3010996
PanagiotisCharalampous
05 Mar 2019, 14:14
Hi lw3010996,
It seems you are using wrong indices in OnTimerTick() while you have implement the logic correclty in Calculate().
Best Regards,
Panagiotis
@PanagiotisCharalampous
3010996
05 Mar 2019, 16:23
Exactly. Unfortunately, I can not understand how to calculate the indexes correctly. Erasing the graph works. However, I can not draw it correctly again. I have been struggling with it for several days.
using System; using cAlgo.API; using cAlgo.API.Internals; using cAlgo.API.Indicators; namespace cAlgo { [Indicator(IsOverlay = true, TimeZone = TimeZones.UTC, AccessRights = AccessRights.None, AutoRescale = false)] public class TEST2 : Indicator { private bool showSMA; public int redPeriod = 12; [Output("Red SMA", LineColor = "Red", Thickness = 1)] public IndicatorDataSeries RedSMA { get; set; } [Output("Red SMA M15", LineColor = "Red", Thickness = 3)] public IndicatorDataSeries RedSMA15 { get; set; } private MovingAverage _redSMA; private MarketSeries seriesM15; private MovingAverage _redSMA15; private int indexM15; protected override void Initialize() { Timer.TimerTick += OnTimerTick; Timer.Start(2); _redSMA = Indicators.MovingAverage(MarketSeries.Close, redPeriod, MovingAverageType.Simple); seriesM15 = MarketData.GetSeries(TimeFrame.Minute15); _redSMA15 = Indicators.MovingAverage(seriesM15.Close, redPeriod, MovingAverageType.Simple); } public override void Calculate(int index) { RedSMA[index] = _redSMA.Result[index]; indexM15 = GetIndexByDate(seriesM15, MarketSeries.OpenTime[index]); if (indexM15 != -1) { RedSMA15[index] = _redSMA15.Result[indexM15]; } } private void OnTimerTick() { // // SMA - current timeframe // showSMA = !showSMA; if (showSMA) { for (int i = 0; i < RedSMA.Count; i++) { RedSMA[i] = _redSMA.Result[i]; } } else { for (int i = 0; i < RedSMA.Count; i++) { RedSMA[i] = double.NaN; } } // // SMA - 15min timeframe // if (showSMA) { for (int i = 0; i < RedSMA15.Count; i++) { RedSMA15[i] = _redSMA15.Result[indexM15]; } } else { for (int i = 0; i < RedSMA15.Count; i++) { RedSMA15[i] = double.NaN; } } } private int GetIndexByDate(MarketSeries series, DateTime time) { for (int i = series.Close.Count - 1; i > 0; i--) { if (time == series.OpenTime[i]) return i; } return -1; } } }
@3010996
3010996
05 Mar 2019, 16:49
I think I succeeded. Panagiotis Charalampous, could you look at the correct code?
using System; using cAlgo.API; using cAlgo.API.Internals; using cAlgo.API.Indicators; namespace cAlgo { [Indicator(IsOverlay = true, TimeZone = TimeZones.UTC, AccessRights = AccessRights.None, AutoRescale = false)] public class MMDForum : Indicator { private bool showSMA; //private int i; public int redPeriod = 12; [Output("Red SMA", LineColor = "Red", Thickness = 1)] public IndicatorDataSeries RedSMA { get; set; } [Output("Red SMA M15", LineColor = "Red", Thickness = 3)] public IndicatorDataSeries RedSMA15 { get; set; } private MovingAverage _redSMA; private MarketSeries seriesM15; private MovingAverage _redSMA15; private int indexM15; protected override void Initialize() { Timer.TimerTick += OnTimerTick; Timer.Start(2); _redSMA = Indicators.MovingAverage(MarketSeries.Close, redPeriod, MovingAverageType.Simple); seriesM15 = MarketData.GetSeries(TimeFrame.Minute15); _redSMA15 = Indicators.MovingAverage(seriesM15.Close, redPeriod, MovingAverageType.Simple); } public override void Calculate(int index) { RedSMA[index] = _redSMA.Result[index]; indexM15 = GetIndexByDate(seriesM15, MarketSeries.OpenTime[index]); if (indexM15 != -1) { RedSMA15[index] = _redSMA15.Result[indexM15]; } // // Current timeframe // if (showSMA) { for (int i = 0; i < RedSMA.Count; i++) { RedSMA[i] = _redSMA.Result[i]; } } else { for (int i = 0; i < RedSMA.Count; i++) { RedSMA[i] = double.NaN; } } // // SMA - 15min timeframe // if (showSMA) { for (int i = 0; i < RedSMA15.Count; i++) { indexM15 = GetIndexByDate(seriesM15, MarketSeries.OpenTime[i]); if (indexM15 != -1) RedSMA15[i] = _redSMA15.Result[indexM15]; } } else { for (int i = 0; i < RedSMA15.Count; i++) { RedSMA15[i] = double.NaN; } } } private void OnTimerTick() { showSMA = !showSMA; } private int GetIndexByDate(MarketSeries series, DateTime time) { for (int i = series.Close.Count - 1; i > 0; i--) { if (time == series.OpenTime[i]) return i; } return -1; } } }
@3010996
PanagiotisCharalampous
05 Mar 2019, 16:54
Hi lw3010996,
It looks that it is working :)
Best Regards,
Panagiotis
@PanagiotisCharalampous
PanagiotisCharalampous
26 Feb 2019, 10:16
Hi lw3010996,
The reason you see nothing is because showSMA is always false.
Best Regards,
Panagiotis
@PanagiotisCharalampous