//@version=4 // Copyright (c) 2019-present, Alex Orekhov (everget) // SuperTrend script may be freely distributed under the terms of the GPL-3.0 license. study("SuperTrend", overlay=true) length = input(title="ATR Period", type=input.integer, defval=5) mult = input(title="ATR Multiplier", type=input.float, step=0.1, defval=6) src = input(title="Source", type=input.source, defval=hl2) wicks = input(title="Take Wicks into Account ?", type=input.bool, defval=true) showLabels = input(title="Show Buy/Sell Labels ?", type=input.bool, defval=true) highlightState = input(title="Highlight State ?", type=input.bool, defval=true) atr = mult * atr(length) highPrice = wicks ? high : close lowPrice = wicks ? low : close doji4price = open == close and open == low and open == high longStop = src - atr longStopPrev = nz(longStop[1], longStop) if longStop > 0 if doji4price longStop := longStopPrev else longStop := (lowPrice[1] > longStopPrev ? max(longStop, longStopPrev) : longStop) else longStop := longStopPrev shortStop = src + atr shortStopPrev = nz(shortStop[1], shortStop) if shortStop > 0 if doji4price shortStop := shortStopPrev else shortStop := (highPrice[1] < shortStopPrev ? min(shortStop, shortStopPrev) : shortStop) else shortStop := shortStopPrev var int dir = 1 dir := dir == -1 and highPrice > shortStopPrev ? 1 : dir == 1 and lowPrice < longStopPrev ? -1 : dir var color longColor = color.green var color shortColor = color.red longStopPlot = plot(dir == 1 ? longStop : na, title="Long Stop", style=plot.style_linebr, linewidth=2, color=longColor) buySignal = dir == 1 and dir[1] == -1 plotshape(buySignal ? longStop : na, title="Long Stop Start", location=location.absolute, style=shape.circle, size=size.tiny, color=longColor, transp=0) plotshape(buySignal and showLabels ? longStop : na, title="Buy Label", text="Long", location=location.absolute, style=shape.labelup, size=size.tiny, color=longColor, textcolor=color.white, transp=0) shortStopPlot = plot(dir == 1 ? na : shortStop, title="Short Stop", style=plot.style_linebr, linewidth=2, color=shortColor) sellSignal = dir == -1 and dir[1] == 1 plotshape(sellSignal ? shortStop : na, title="Short Stop Start", location=location.absolute, style=shape.circle, size=size.tiny, color=shortColor, transp=0) plotshape(sellSignal and showLabels ? shortStop : na, title="Sell Label", text="Short", location=location.absolute, style=shape.labeldown, size=size.tiny, color=shortColor, textcolor=color.white, transp=0) midPricePlot = plot(ohlc4, title="", style=plot.style_circles, linewidth=0, display=display.none, editable=false) longFillColor = highlightState ? (dir == 1 ? longColor : na) : na shortFillColor = highlightState ? (dir == -1 ? shortColor : na) : na fill(midPricePlot, longStopPlot, title="Long State Filling", color=longFillColor) fill(midPricePlot, shortStopPlot, title="Short State Filling", color=shortFillColor) changeCond = dir != dir[1] alertcondition(changeCond, title="Alert: SuperTrend Direction Change", message="SuperTrend has changed direction!\nSymbol: {{exchange}}:{{ticker}}\nPrice: {{close}}") alertcondition(buySignal, title="Alert: SuperTrend Buy", message="SuperTrend Buy!\nSymbol: {{exchange}}:{{ticker}}\nPrice: {{close}}") alertcondition(sellSignal, title="Alert: SuperTrend Sell", message="SuperTrend Sell!\nSymbol: {{exchange}}:{{ticker}}\nPrice: {{close}}")