SuperTrend ATR Experto free
Description
This indicator is known as SuperTrend or ATR Stop. The Calculation is based on the ATR to better identify a trend change.
You can find me by joyining this Telegram Group http://t.me/cTraderCoders
Grupo de Telegram Para Brasileiros, Portugueses e todos aqueles que falam portugues:http://t.me/ComunidadeCtrader
Grupo CTrader en Español para Latinos: http://t.me/ComunidadCtrader
Notification Publishing copyrighted material is strictly prohibited. If you believe there is copyrighted material in this section you may use the Copyright Infringement Notification form to submit a claim.
Formula / Source Code
using System; using cAlgo.API; using cAlgo.API.Internals; using cAlgo.API.Indicators; using cAlgo.Indicators; namespace cAlgo { [Cloud("Close Up", "Bull Line", Opacity = 0.2, FirstColor = "FF7CFC00")] [Cloud("Bear Line", "Close Down", Opacity = 0.2, FirstColor = "Red")] [Indicator(IsOverlay = true, TimeZone = TimeZones.UTC, AccessRights = AccessRights.None)] public class SuperTrendExperto : Indicator { [Parameter("ATR Period", DefaultValue = 13)] public int Period { get; set; } [Parameter("ATR Multiplier", DefaultValue = 2)] public double atrMulti { get; set; } [Parameter("ATR Source", DefaultValue = MovingAverageType.Exponential)] public MovingAverageType AtrSource { get; set; } [Output("Bear Line", LineColor = "A8FF0000", PlotType = PlotType.DiscontinuousLine, LineStyle = LineStyle.Solid, Thickness = 1)] public IndicatorDataSeries HighLine { get; set; } [Output("Bull Line", LineColor = "877CFC00", PlotType = PlotType.DiscontinuousLine, LineStyle = LineStyle.Solid, Thickness = 1)] public IndicatorDataSeries LowLine { get; set; } [Output("Close Up", PlotType = PlotType.DiscontinuousLine, LineColor = "Transparent")] public IndicatorDataSeries UpClose { get; set; } [Output("Close Down", PlotType = PlotType.DiscontinuousLine, LineColor = "Transparent")] public IndicatorDataSeries DownClose { get; set; } public AverageTrueRange atr; public double AtrDistance; public IndicatorDataSeries Direction; protected override void Initialize() { atr = Indicators.AverageTrueRange(Period, AtrSource); Direction = CreateDataSeries(); } public override void Calculate(int index) { AtrDistance = atr.Result[index] * atrMulti; if (index == 0 && Bars.ClosePrices[index] >= Bars.OpenPrices[index]) { Direction[index] = 1; LowLine[index] = Bars.LowPrices[index] - AtrDistance; HighLine[index] = double.NaN; UpClose[index] = Bars.ClosePrices[index]; DownClose[index] = double.NaN; } else if (index == 0 && Bars.ClosePrices[index] < Bars.OpenPrices[index]) { Direction[index] = -1; HighLine[index] = Bars.HighPrices[index] + AtrDistance; LowLine[index] = double.NaN; DownClose[index] = Bars.ClosePrices[index]; UpClose[index] = double.NaN; } //***************************************************************************************** if (Direction[index - 1] == 1) { if (Bars.ClosePrices[index] < LowLine[index - 1]) { LowLine[index] = Bars.LowPrices[index] - AtrDistance; Direction[index] = -1; UpClose[index] = Bars.ClosePrices[index]; DownClose[index] = double.NaN; } else { Direction[index] = 1; } } //********************************* Bear Trend ************************************** else if (Direction[index - 1] == -1) { if (Bars.ClosePrices[index] > HighLine[index - 1]) { HighLine[index] = Bars.HighPrices[index] + AtrDistance; Direction[index] = 1; DownClose[index] = Bars.ClosePrices[index]; UpClose[index] = double.NaN; } else { Direction[index] = -1; } } if (Direction[index] == 1) { Direction[index] = 1; if (LowLine[index - 1] > Bars.LowPrices[index] - AtrDistance) { LowLine[index] = LowLine[index - 1]; HighLine[index] = double.NaN; UpClose[index] = Bars.ClosePrices[index]; DownClose[index] = double.NaN; } else { LowLine[index] = Bars.LowPrices[index] - AtrDistance; HighLine[index] = double.NaN; UpClose[index] = Bars.ClosePrices[index]; DownClose[index] = double.NaN; } } //********************************* Bear Trend ************************************** else if (Direction[index] == -1) { Direction[index] = -1; if (HighLine[index - 1] < Bars.HighPrices[index] + AtrDistance) { HighLine[index] = HighLine[index - 1]; LowLine[index] = double.NaN; DownClose[index] = Bars.ClosePrices[index]; UpClose[index] = double.NaN; } else { HighLine[index] = Bars.HighPrices[index] + AtrDistance; LowLine[index] = double.NaN; DownClose[index] = Bars.ClosePrices[index]; UpClose[index] = double.NaN; } } } } }
Comments

Hi, your supertrend indicator has a parameter for ATR source (moving average type). How is ATR source used in calculation of supertrend?
I am asking because default supertrend available on ctrader platform doesn't have ATR source (moving average type). Thanks