//@version=5
indicator("EasyAlgo 2.0", overlay=true, precision=0, explicit_plot_zorder=true,
max_labels_count=500)
//---------------- EasyAlgo 2.0 | https://www.easyalgo.io --------------------//
// Get user input
emaCloud     = input.bool(true, "EMA Cloud?")
volCloud     = input.bool(false, "Volatility Cloud?")
volBands     = input.bool(false, "Volatility Bands?")
volSen       = input.float(1.5, "Volatility Sensitivity (1-5 (Half Allowed))", 0.5,
5, 0.5)
signals      = input.bool(true, "Buy/Sell Signals?")
levels       = input.bool(false, "TP/SL Levels?")
suppRes      = input.bool(false, "Support/Resistance?")
atrLen       = input.int(14, "ATR Length", 1)
atrRisk      = input.int(2, "ATR/ Risk", 1)
candlesT     = input.bool(true, "Trending Candles")
volBandsSen = input.int(5, "Vol Bands Sensitivity (Default: 5.0)", 1)
useEma       = input.bool(true, "Use Exponential MA?")
barsLR       = input.int(35, "S/R Looking Period", 1)
// Get Components
ema1         = ta.ema(ohlc4, int(5*volSen*2))
ema2         = ta.ema(ohlc4, int(9*volSen*2))
ema3         = ta.ema(ohlc4, int(13*volSen*2))
ema4         = ta.ema(ohlc4, int(34*volSen*2))
ema5         = ta.ema(ohlc4, int(50*volSen*2))
f_kc(src, len, mult) =>
     float basis = useEma ? ta.ema(src, len) : ta.sma(src, len)
     float span = useEma ? ta.ema(ta.tr, len) : ta.sma(ta.tr, len)
     [basis + span * mult, basis - span * mult]
[upperKC1, lowerKC1] = f_kc(close, 35, 0.5236 * volBandsSen)
[upperKC2, lowerKC2] = f_kc(close, 35, 0.6854 * volBandsSen)
[upperKC3, lowerKC3] = f_kc(close, 35, 0.8472 * volBandsSen)
bull = ema3 >= ema3[1] and ema1 >= ema2 and ema1[1] < ema2[1]
bear = ema3 <= ema3[1] and ema1 <= ema2 and ema1[1] > ema2[1]
trigger = bull ? 1 : 0
atrBand = ta.atr(atrLen) * atrRisk
atrStop = trigger == 1 ? low - atrBand : high + atrBand
barsL        = barsLR
barsR        = barsLR
pivotHigh = fixnan(ta.pivothigh(barsL, barsR)[1])
pivotLow = fixnan(ta.pivotlow(barsL, barsR)[1])
// Colors
green =               #00CC00    ,   green5    = volCloud ? color.new(#00CC00, 95) :
na,    green12_5 = volCloud ? color.new(#00CC00, 87.5) : na,    green20 = emaCloud ?
color.new(#00CC00, 80) : na
red     =             #CC0000    ,   red5      = volCloud ? color.new(#CC0000, 95) :
na,    red12_5   = volCloud ? color.new(#CC0000, 87.5) : na,    red20   = emaCloud?
color.new(#CC0000, 80) : na
orange =              #FF9800    ,   orange50 = emaCloud ? color.new(orange, 50) :
na
gray    = volBands ? #787B86 : na,   gray40    = volBands ? color.new(gray, 60) : na,
gray5      = volBands ? color.new(gray, 95) : na,         gray20 = volBands ?
color.new(gray, 80) : na
// Plots
p1 = plot(ema1, "", orange50, editable=false)
p2 = plot(ema2, "", orange50, editable=false)
p3 = plot(ema3, "", orange50, editable=false)
p4 = plot(ema4, "", na, editable=false)
p5 = plot(ema5, "", na, editable=false)
fill(p4, p5, ema4 >= ema5 ? green5 : red5)
fill(p3, p4, ema3 >= ema4 ? green12_5 : red12_5)
fill(p2, p3, ema3 >= ema3[1] ? green20 : red20)
fill(p1, p2, ema1 >= ema3 ? green20 : red20)
barcolor(candlesT ? (ema3 >= ema3[1] ? green : red) : na)
b1 = plot(upperKC1, "", gray40, editable=false)
b2 = plot(upperKC2, "", gray40, editable=false)
b3 = plot(upperKC3, "", gray40, editable=false)
b4 = plot(lowerKC1, "", gray40, editable=false)
b5 = plot(lowerKC2, "", gray40, editable=false)
b6 = plot(lowerKC3, "", gray40, editable=false)
fill(b1, b2, gray5)
fill(b2, b3, gray20)
fill(b4, b5, gray5)
fill(b5, b6, gray20)
plot(pivotHigh, "Resistance", not suppRes or ta.change(pivotHigh) ? na : red, 3,
offset=-(barsR + 1), editable=false)
plot(pivotLow, "Support", not suppRes or ta.change(pivotLow) ? na : green, 3,
offset=-(barsR + 1), editable=false)
y1 = low - (ta.atr(30) * 1.6)
y2 = high + (ta.atr(30) * 1.6)
buy = signals and bull ? label.new(bar_index, y1, ema4 >= ema5 ? "FIRM BUY" :
"BUY", xloc.bar_index, yloc.price, #00CC00, label.style_label_up, #141923,
size.normal) : na
sell = signals and bear ? label.new(bar_index, y2, ema4 <= ema5 ? "FIRM SELL" :
"SELL", xloc.bar_index, yloc.price, #CC0000, label.style_label_down, color.white,
size.normal) : na
lastTrade(src) => ta.valuewhen((ema3 >= ema3[1] and ema1 >= ema2 and ema1[1] <
ema2[1]) or (ema3 <= ema3[1] and ema1 <= ema2 and ema1[1] > ema2[1]), src, 0)
entry = levels ? label.new(time, close, "ENTRY " + str.tostring(lastTrade(close),
"#.##"), xloc.bar_time, yloc.price, color.gray, label.style_label_left,
color.white, size.normal) : na
label.set_y(entry, lastTrade(close))
label.delete(entry[1])
stop_y = lastTrade(atrStop)
stop = levels ? label.new(time, close, "SL " + str.tostring(stop_y, "#.##"),
xloc.bar_time, yloc.price, #CC0000, label.style_label_left, color.white,
size.normal) : na
label.set_y(stop, stop_y)
label.delete(stop[1])
tp1_y = (lastTrade(close)-lastTrade(atrStop))*1 + lastTrade(close)
tp1   = levels ? label.new(time, close, "1:1 TP " + str.tostring(tp1_y, "#.##"),
xloc.bar_time, yloc.price, #00CC00, label.style_label_left, color.white,
size.normal) : na
label.set_y(tp1, tp1_y)
label.delete(tp1[1])
tp2_y = (lastTrade(close)-lastTrade(atrStop))*2 + lastTrade(close)
tp2   = levels ? label.new(time, close, "2:1 TP " + str.tostring(tp2_y, "#.##"),
xloc.bar_time, yloc.price, #00CC00, label.style_label_left, color.white,
size.normal) : na
label.set_y(tp2, tp2_y)
label.delete(tp2[1])
tp3_y = (lastTrade(close)-lastTrade(atrStop))*3 + lastTrade(close)
tp3   = levels ? label.new(time, close, "3:1 TP " + str.tostring(tp3_y, "#.##"),
xloc.bar_time, yloc.price, #00CC00, label.style_label_left, color.white,
size.normal) : na
label.set_y(tp3, tp3_y)
label.delete(tp3[1])
// Alerts
alertcondition(bull, "Buy", "EasyAlgo 2.0\nBuy {{ticker}} @ {{close}}")
alertcondition(bull and ema4 >= ema5, "Firm Buy", "EasyAlgo 2.0\nFirm Buy
{{ticker}} @ {{close}}")
alertcondition(bear and ema4 <= ema5, "Firm Sell", "EasyAlgo 2.0\nFirm Sell
{{ticker}} @ {{close}}")
alertcondition(bear, "Sell", "EasyAlgo 2.0\nSell {{ticker}} @ {{close}}")