//@version=5
strategy("Gold Bot", overlay=true)
// Inputs
a = input(2, title='Key Value (Sensitivity)')
c = input(1, title='ATR Period')
h = input(false, title='Signals from Heikin Ashi Candles')
// EMA Smoothing Inputs
len = input.int(9, minval=1, title="EMA Length")
offset = input.int(title="Offset", defval=0, minval=-500, maxval=500, display=display.data_window)
typeMA = input.string(title="Smoothing Method", defval="SMA", options=["SMA", "EMA", "SMMA (RMA)", "WMA", "VWMA"], group="Smoothing", display=display.data_window)
smoothingLength = input.int(title="Smoothing Length", defval=5, minval=1, maxval=100, group="Smoothing", display=display.data_window)
// ATR Calculation
xATR = ta.atr(c)
nLoss = a * xATR
// Source Selection
src = h ? request.security(ticker.heikinashi(syminfo.tickerid), timeframe.period, close, lookahead=barmerge.lookahead_off) : close
// ATR Trailing Stop Calculation
xATRTrailingStop = 0.0
iff_1 = src > nz(xATRTrailingStop[1], 0) ? src - nLoss : src + nLoss
iff_2 = src < nz(xATRTrailingStop[1], 0) and src[1] < nz(xATRTrailingStop[1], 0) ? math.min(nz(xATRTrailingStop[1]), src + nLoss) : iff_1
xATRTrailingStop := src > nz(xATRTrailingStop[1], 0) and src[1] > nz(xATRTrailingStop[1], 0) ? math.max(nz(xATRTrailingStop[1]), src - nLoss) : iff_2
// Position Calculation
pos = 0
iff_3 = src[1] > nz(xATRTrailingStop[1], 0) and src < nz(xATRTrailingStop[1], 0) ? -1 : nz(pos[1], 0)
pos := src[1] < nz(xATRTrailingStop[1], 0) and src > nz(xATRTrailingStop[1], 0) ? 1 : iff_3
// EMA Calculation
ema = ta.ema(src, len)
// Smoothing Calculation
smoothingLine = switch typeMA
"SMA" => ta.sma(ema, smoothingLength)
"EMA" => ta.ema(ema, smoothingLength)
"SMMA (RMA)" => ta.rma(ema, smoothingLength)
"WMA" => ta.wma(ema, smoothingLength)
"VWMA" => ta.vwma(ema, smoothingLength)
// Buy and Sell Conditions
above = ta.crossover(ema, xATRTrailingStop)
below = ta.crossover(xATRTrailingStop, ema)
buy = src > xATRTrailingStop and above
sell = src < xATRTrailingStop and below
// Stop Loss Calculation
stopLossLevel = ta.lowest(low, 3)
// Strategy Execution
if (buy)
strategy.entry("Long", strategy.long, stop=stopLossLevel)
if (sell)
strategy.close("Long")
// Plotting
plot(ema, title="EMA", color=color.blue, offset=offset)
plot(smoothingLine, title="Smoothing Line", color=#f37f20, offset=offset)
plotshape(buy, title='Buy', text='Buy', style=shape.labelup, location=location.belowbar, color=color.new(color.green, 0), textcolor=color.new(color.white, 0), size=size.tiny)
plotshape(sell, title='Sell', text='Sell', style=shape.labeldown, location=location.abovebar, color=color.new(color.red, 0), textcolor=color.new(color.white, 0), size=size.tiny)
barcolor(src > xATRTrailingStop ? color.green : na)
barcolor(src < xATRTrailingStop ? color.red : na)
// Alerts
alertcondition(buy, 'UT Long', 'UT Long')
alertcondition(sell, 'UT Short', 'UT Short')