//@version=6
indicator('Elite Algo v22', overlay = true, max_lines_count = 500, max_labels_count
= 500, max_boxes_count = 350)
//Freemium indicators >> https://t.me/eyop
// Get user input
enableDashboard = input(true, 'Enable Dashboard', group = 'DASHBOARD SETTINGS')
locationDashboard = input.string('Middle right', 'Location', ['Top right', 'Top
left', 'Middle right', 'Middle left', 'Bottom right', 'Bottom left'], group =
'DASHBOARD SETTINGS')
sizeDashboard = input.string('Normal', 'Size', ['Tiny', 'Small', 'Normal'], group =
'DASHBOARD SETTINGS')
colorBackground = input(#2A2E39, 'Bg color', group = 'DASHBOARD SETTINGS')
colorFrame = input(#2A2E39, 'Frame color', group = 'DASHBOARD SETTINGS')
colorBorder = input(#363A45, 'Border color', group = 'DASHBOARD SETTINGS')
showSignals = input(true, 'Show signals', group = 'BUY AND SELL SIGNALS SETTINGS')
strategy = input.string('Normal', 'Strategy', ['Normal', 'Confirmed', 'Trend
scalper'], group = 'BUY AND SELL SIGNALS SETTINGS')
sensitivity = input.float(6.29, 'Sensitivity', 0.1, step = 0.1, group = 'BUY AND
SELL SIGNALS SETTINGS')
consSignalsFilter = input(false, 'Consolidation signals filter', group = 'BUY AND
SELL SIGNALS SETTINGS')
smartSignalsOnly = input(false, 'Smart signals only', group = 'BUY AND SELL SIGNALS
SETTINGS')
candleColors = input(false, 'Candle colors', group = 'BUY AND SELL SIGNALS
SETTINGS')
momentumCandles = input(false, 'Momentum candles', group = 'BUY AND SELL SIGNALS
SETTINGS')
highVolSignals = input(false, 'High volume signals only', group = 'BUY AND SELL
SIGNALS SETTINGS')
enableTrailingSL = input(false, 'Enable trailing stop-loss', group = 'RISK
MANAGEMENT SETTINGS')
usePercSL = input(false, '% Trailing sl', inline = '2', group = 'RISK MANAGEMENT
SETTINGS')
percTrailingSL = input.float(1, '', 0, step = 0.1, inline = '2', group =
'RISKMANAGEMENT SETTINGS')
enableSwings = input(false, 'Enable Swing High\'s & Swing\'s Low\'s', inline = '3',
group = 'RISK MANAGEMENT SETTINGS')
periodSwings = input.int(10, '', 2, inline = '3', group = 'RISK MANAGEMENT
SETTINGS')
enableTpSlAreas = input(false, 'Enable take profit/stop-loss areas', group = 'RISK
MANAGEMENT SETTINGS')
useTP1 = input(true, '', inline = '4', group = 'RISK MANAGEMENT SETTINGS')
multTP1 = input.float(1, 'TP 1', 0, inline = '4', group = 'RISK MANAGEMENT
SETTINGS')
useTP2 = input(true, '', inline = '5', group = 'RISK MANAGEMENT SETTINGS')
multTP2 = input.float(2, 'TP 2', 0, inline = '5', group = 'RISK MANAGEMENT
SETTINGS')
useTP3 = input(true, '', inline = '6', group = 'RISK MANAGEMENT SETTINGS')
multTP3 = input.float(3, 'TP 3', 0, inline = '6', group = 'RISK MANAGEMENT
SETTINGS')
tpLabels = input(true, 'Take profit labels', group = 'RISK MANAGEMENT SETTINGS')
showTrendCloud = input(true, 'Show Trend cloud', group = 'TREND CLOUD SETTINGS')
periodTrendCloud = input.string('New', 'Trend cloud period', ['Short term', 'Long
term', 'New'], group = 'TREND CLOUD SETTINGS')
signalsTrendCloud = input(false, 'Trend only signals', group = 'TREND
CLOUDSETTINGS')
fastTrendCloud = input(false, 'Fast trend cloud', group = 'TREND CLOUD SETTINGS')
fastTrendCloudLen = input.int(55, 'Fast trend cloud', 2, group = 'TREND CLOUD
SETTINGS')
enableAutoTrend = input(false, 'Enable Auto Trendlines', group = 'AUTO TRENDLINES
SETTINGS')
srcTrendChannel = input(close, 'Trend channel source', group = 'AUTO TRENDLINES
SETTINGS')
lenTrendChannel = input.int(200, 'Trend channel loopback', 2, group = 'AUTO
TRENDLINES SETTINGS')
enableSR = input(false, 'Enable support and resistance', group = 'AUTO SUPPORT AND
RESISTANCE SETTINGS')
lineSrStyle = input.string('Dashed', 'Line Style', ['Solid', 'Dotted', 'Dashed'],
group = 'AUTO SUPPORT AND RESISTANCE SETTINGS')
lineSrWidth = input.int(2, 'Line Width', 1, 4, group = 'AUTO SUPPORT AND RESISTANCE
SETTINGS')
showCons = input(false, 'Consolidation Zones', group = 'CONSOLIDATION ZONES')
lbPeriod = input.int(10, 'Loopback Period', 2, 50, group = 'CONSOLIDATION ZONES')
lenCons = input.int(5, 'Min Consolidation Length', 2, 20, group = 'CONSOLIDATION
ZONES')
paintCons = input(true, 'Paint Consolidation Area', group = 'CONSOLIDATION ZONES')
colorZone = input(color.new(color.blue, 70), 'Zone Color', group = 'CONSOLIDATION
ZONES')
box_ob = input.bool(false, 'Toggle Order Block', group = 'ORDER BLOCK')
box_hide_gray = input.bool(false, 'Hide gray boxes', group = 'ORDER BLOCK')
bos_type = input.string('High and Low', 'MSB trigger', ['High and Low', 'Close and
Open'], group = 'ORDER BLOCK')
box_sv = input.bool(true, 'Plot demand boxes', group = 'ORDER BLOCK')
box_test_delay = input.int(3, 'Delay to count test of demand box', 1, group =
'ORDER BLOCK')
box_fill_delay = input.int(3, 'Delay to count fill of demand box', 1, group =
'ORDER BLOCK')
box_test_sv = input.bool(true, 'Dim tested demand boxes', group = 'ORDER BLOCK')
box_stop_sv = input.bool(true, 'Stop plotting filled demand boxes', group = 'ORDER
BLOCK')
eliteVP = input(false, 'Elite volume profile', group = 'ELITE VOLUME PROFILE')
colorBorderVP = input(color.new(color.black, 80), 'Border color', group = 'ELITE
VOLUME PROFILE')
colorBuyVP = input(#7F1623, 'Buy volume', group = 'ELITE VOLUME PROFILE')
colorSellVP = input(#00DD00, 'Sell volume', group = 'ELITE VOLUME PROFILE')
offset = input.int(2, 'Offset', 2, 20, group = 'ELITE VOLUME PROFILE')
lookback = input.int(100, 'Lookback', 14, 365, group = 'ELITE VOLUME PROFILE')
levelNum = input.int(100, 'Number of levels', 10, 100, group = 'ELITE VOLUME
PROFILE')
levelWidth = input.int(50, 'Level width', 20, 100, group = 'ELITE VOLUME PROFILE')
// Functions
f_chartTfInMinutes() =>
    float _resInMinutes = timeframe.multiplier * (timeframe.isseconds ? 1. / 60 :
timeframe.isminutes ? 1. : timeframe.isdaily ? 60. * 24 : timeframe.isweekly ? 60.
* 24 * 7 : timeframe.ismonthly ? 60. * 24 * 30.4375 : na)
    _resInMinutes
atr(len) =>
    tr = ta.tr
    atrVal = 0.0
    atrVal := nz(atrVal[1] + (tr - atrVal[1]) / len, tr)
    atrVal
supertrend(src, factor, len) =>
    atrVal = ta.atr(len) // Rename atr to avoid conflicts
    upperBand = src + factor * atrVal
    lowerBand = src - factor * atrVal
    prevLowerBand = nz(lowerBand[1])
    prevUpperBand = nz(upperBand[1])
    lowerBand := lowerBand > prevLowerBand or close[1] < prevLowerBand ?
lowerBand : prevLowerBand
    upperBand := upperBand < prevUpperBand or close[1] > prevUpperBand ?
upperBand : prevUpperBand
    var int direction = na
    var float superTrend = na
    prevSuperTrend = superTrend[1]
    if prevSuperTrend == prevUpperBand
         direction := close > upperBand ? 1 : -1
         direction
    else
         direction := close < lowerBand ? -1 : 1
         direction
    superTrend := direction == 1 ? lowerBand : direction == -1 ? upperBand : na
    superTrend
dchannel(len) =>
    hh = ta.highest(len)
    ll = ta.lowest(len)
    trend = 0
    trend := close > hh[1] ? 1 : close < ll[1] ? -1 : nz(trend[1])
    trend
trendScalper(show, len1, len2, len3, colorBull, colorBear, colorBarBull,
colorBarBear) =>
    avgOC = math.avg(open, close)
    ha_o = 0.0
    ha_o := na(ha_o[1]) ? avgOC : (ha_o[1] + ohlc4[1]) / 2
    ema1 = ta.ema(ha_o, len1)
    ema2 = ta.ema(ha_o, len2)
    ema3 = ta.ema(ha_o, len3)
    ris1 = ema1 > ema1[1]
    ris2 = ema2 > ema2[1]
    ris3 = ema3 > ema3[1]
    fal1 = ema1 < ema1[1]
    fal2 = ema2 < ema2[1]
    fal3 = ema3 < ema3[1]
    colorEma1 = ris1 ? colorBull : fal1 ? colorBear : na
    colorEma2 = ris2 ? colorBull : fal2 ? colorBear : na
    colorEma3 = ris3 ? colorBull : fal3 ? colorBear : na
    fillEma1 = avgOC > ema1 ? colorBull : avgOC < ema1 ? colorBear : na
    fillEma2 = ema1 > ema2 ? colorBull : ema1 < ema2 ? colorBear : na
    fillEma3 = ema2 > ema3 ? colorBull : ema2 < ema3 ? colorBear : na
    colorBar = close < ema1 and close < ema2 ? colorBarBear : colorBarBull
    [avgOC, show ? ema1 : na, show ? ema2 : na, show ? ema3 : na,
color.new(colorEma1, 55), color.new(colorEma2, 45), color.new(colorEma3, 35),
color.new(fillEma1, 85), color.new(fillEma2, 80), color.new(fillEma3, 75),
colorBar]
candlesMom() =>
    [_, _, macd] = ta.macd(close, 12, 26, 9) // Correct destructuring
    macd > 0 and macd > macd[1] or macd < 0 and macd < macd[1] // Correct return
statement
trailingSL(buy, sell, factor, len, usePerc, perc) =>
    atrVal = ta.atr(len) // Use built-in ATR function
    upperBand = high + (usePerc ? high * (perc / 100) : factor * atrVal)
    lowerBand = low - (usePerc ? low * (perc / 100) : factor * atrVal)
    prevLowerBand = nz(lowerBand[1])
    prevUpperBand = nz(upperBand[1])
    lowerBand := lowerBand > prevLowerBand or buy ? lowerBand : prevLowerBand
    upperBand := upperBand < prevUpperBand or sell ? upperBand : prevUpperBand
    var int direction = na
    var float stop = na
    prevSuperTrend = stop[1]
    if prevSuperTrend == prevUpperBand
         direction := buy ? 1 : -1
         direction
    else
         direction := sell ? -1 : 1
         direction
    stop := direction == 1 ? lowerBand : direction == -1 ? upperBand : na
    stop
add_to_zz(zz, val, bi) =>
    array.unshift(zz, bi)
    array.unshift(zz, val)
    if array.size(zz) > 12
         array.pop(zz)
    val // Add a return value
update_zz(zz, val, bi, dir) =>
    if array.size(zz) == 0
         add_to_zz(zz, val, bi)
    else
         if dir == 1 and val > array.get(zz, 0) or dir == -1 and val < array.get(zz,
0)
             array.set(zz, 0, val)
             array.set(zz, 1, bi)
    val // Add a return value
float ph = ta.pivothigh(high, 10, 10)
float pl = ta.pivotlow(low, 10, 10)
LSRstyle = lineSrStyle == 'Dashed' ? line.style_dashed : lineSrStyle == 'Solid' ?
line.style_solid : line.style_dotted
prdhighest = ta.highest(300)
prdlowest = ta.lowest(300)
cwidth = (prdhighest - prdlowest) * 10 / 100
var pivotvals = array.new_float(0)
if bool(ph) or bool(pl)
    array.unshift(pivotvals, bool(ph) ? ph : pl)
    if array.size(pivotvals) > 20
         array.pop(pivotvals)
get_sr_vals(ind) =>
    float lo = array.get(pivotvals, ind)
    float hi = lo
    int numpp = 0
    for y = 0 to array.size(pivotvals) - 1 by 1
        float cpp = array.get(pivotvals, y)
        float wdth = cpp <= lo ? hi - cpp : cpp - lo
        if wdth <= cwidth
            lo := cpp <= lo ? cpp : lo
            hi := cpp > lo ? cpp : hi
            numpp := numpp + 1
            numpp
    [hi, lo, numpp] // Ensure proper return of values
var sr_up_level = array.new_float(0)
var sr_dn_level = array.new_float(0)
sr_strength = array.new_float(0)
find_loc(strength) =>
    ret = array.size(sr_strength) // Start from array size
    if ret > 0
        for i = array.size(sr_strength) - 1 to 0 by 1
            if strength <= array.get(sr_strength, i)
                break
            ret := i // Update return value
            ret
    ret // Return the final value
check_sr(hi, lo, strength) =>
    ret = true
    // Ensure the loop runs only if sr_up_level is not empty
    if array.size(sr_up_level) > 0
        for i = 0 to array.size(sr_up_level) - 1 by 1
            if array.get(sr_up_level, i) >= lo and array.get(sr_up_level, i) <= hi
or array.get(sr_dn_level, i) >= lo and array.get(sr_dn_level, i) <= hi
                if strength >= array.get(sr_strength, i)
                     array.remove(sr_strength, i)
                     array.remove(sr_up_level, i)
                     array.remove(sr_dn_level, i)
                else
                     ret := false
                     ret
                break // Exit loop early if a match is found
    ret // Properly return the final result
// Get components
rsi = ta.rsi(close, 14)
vosc = ta.obv - ta.ema(ta.obv, 20)
bs = ta.ema(nz(math.abs((open - close) / (high - low) * 100)), 3)
ema = ta.ema(close, 200)
emaBull = close > ema
equal_tf(res) =>
     str.tonumber(res) == f_chartTfInMinutes()
higher_tf(res) =>
     str.tonumber(res) > f_chartTfInMinutes()
too_small_tf(res) =>
     timeframe.isweekly and res == '1' or timeframe.ismonthly and str.tonumber(res)
< 10
securityNoRep(sym, res, src) =>
     var bool bull = false // Use `var` to retain value across bars
    bull := equal_tf(res) ? src : bull
    bull := higher_tf(res) ? request.security(sym, res, src, barmerge.gaps_off,
barmerge.lookahead_on) : bull
    bull_array = request.security_lower_tf(syminfo.tickerid, higher_tf(res) ?
str.tostring(f_chartTfInMinutes()) : too_small_tf(res) ? timeframe.isweekly ? '3' :
'10' : res, src)
    if array.size(bull_array) > 1 and not equal_tf(res) and not higher_tf(res)
        bull := array.pop(bull_array) // Ensure proper array handling
        bull
    array.clear(bull_array) // Clear array safely
    bull // Return final value
TF1Bull = securityNoRep(syminfo.tickerid, '1', emaBull)
TF3Bull = securityNoRep(syminfo.tickerid, '3', emaBull)
TF5Bull = securityNoRep(syminfo.tickerid, '5', emaBull)
TF10Bull = securityNoRep(syminfo.tickerid, '10', emaBull)
TF15Bull = securityNoRep(syminfo.tickerid, '15', emaBull)
TF30Bull = securityNoRep(syminfo.tickerid, '30', emaBull)
TF60Bull = securityNoRep(syminfo.tickerid, '60', emaBull)
TF120Bull = securityNoRep(syminfo.tickerid, '120', emaBull)
TF240Bull = securityNoRep(syminfo.tickerid, '240', emaBull)
TF720Bull = securityNoRep(syminfo.tickerid, '720', emaBull)
TFDBull = securityNoRep(syminfo.tickerid, '1440', emaBull)
ema150 = ta.ema(close, 150)
ema250 = ta.ema(close, 250)
hma55 = ta.hma(close, 55)
[_, _, macd] = ta.macd(close, 12, 26, 9)
supertrend = supertrend(ohlc4, sensitivity, 10)
maintrend = dchannel(30)
confBull = (ta.crossover(close, supertrend) or ta.crossover(close, supertrend)[1]
and maintrend[1] < 0) and macd > 0 and macd > macd[1] and ema150 > ema250 and hma55
> hma55[2] and maintrend > 0
confBear = (ta.crossunder(close, supertrend) or ta.crossunder(close, supertrend)[1]
and maintrend[1] > 0) and macd < 0 and macd < macd[1] and ema150 < ema250 and hma55
< hma55[2] and maintrend < 0
trendcloud = supertrend(ohlc4, periodTrendCloud == 'Long term' ? 7 : 4, 10)
hma = fastTrendCloud ? ta.hma(close, fastTrendCloudLen) : na
none = close > 0
[_, _, adx] = ta.dmi(14, 14)
consFilter = adx > 20
smartFilter = ta.ema(close, 200)
volFilter = (ta.ema(volume, 25) - ta.ema(volume, 26)) / ta.ema(volume, 26) > 0
trendFilter = trendcloud
bull = (strategy == 'Normal' ? ta.crossover(close, supertrend) : confBull and not
confBull[1]) and strategy != 'Trend scalper' and (smartSignalsOnly ? close >
smartFilter : none) and (consSignalsFilter ? consFilter : none) and (highVolSignals
? volFilter : none) and (signalsTrendCloud ? periodTrendCloud == 'New' ? ema150 >
ema250 : close > trendFilter : none)
bear = (strategy == 'Normal' ? ta.crossunder(close, supertrend) : confBear and not
confBear[1]) and strategy != 'Trend scalper' and (smartSignalsOnly ? close <
smartFilter : none) and (consSignalsFilter ? consFilter : none) and (highVolSignals
? volFilter : none) and (signalsTrendCloud ? periodTrendCloud == 'New' ? ema150 <
ema250 : close < trendFilter : none)
countBull = ta.barssince(bull)
countBear = ta.barssince(bear)
trigger = nz(countBull, bar_index) < nz(countBear, bar_index) ? 1 : 0
[avgOC, ema5, ema9, ema21, colorEma5, colorEma9, colorEma21, fillEma5, fillEma9,
fillEma21, colorBar] = trendScalper(strategy == 'Trend scalper' ? true : false, 5,
9, 21, color.green, color.red, #00DD00, #DD0000)
trailingStop = trailingSL(bull, bear, 2.2, 14, usePercSL, percTrailingSL)
float _ph = ta.highestbars(high, periodSwings) == 0 ? high : na
float _pl = ta.lowestbars(low, periodSwings) == 0 ? low : na
var _dir = 0
dir_ = bool(_pl) and na(_ph) ? -1 : _dir
_dir := bool(_ph) and na(_pl) ? 1 : dir_
dirChg = ta.change(_dir)
var zz = array.new_float(0)
zzOld = array.copy(zz)
float zzLive = bool(_ph) or bool(_pl) ? bool(dirChg) ? add_to_zz(zz, _dir == 1 ?
_ph : _pl, bar_index) : update_zz(zz, _dir == 1 ? _ph : _pl, bar_index, _dir) : na
a = ta.wma(srcTrendChannel, lenTrendChannel)
b = ta.sma(srcTrendChannel, lenTrendChannel)
A = 4 * b - 3 * a
B = 3 * a - 2 * b
m = (A - B) / (lenTrendChannel - 1)
d = 0.0 // Ensure correct float initialization
for i = 0 to lenTrendChannel - 1 by 1
    l = B + m * i // Correct indentation inside loop
    d := d + math.pow(srcTrendChannel[i] - l, 2) // Correct placement inside loop
    d
float hb_ = ta.highestbars(lbPeriod) == 0 ? high : na
float lb_ = ta.lowestbars(lbPeriod) == 0 ? low : na
var int dir = 0
float zz_ = na
float pp = na
var int consCnt = 0
var float condHi = na
var float condLo = na
float H_ = ta.highest(lenCons)
float L_ = ta.lowest(lenCons)
var line lineUp = na
var line lineDn = na
bool breakUp = false
bool breakDn = false
var array<float> pvh1_price = array.new_float(1000, na)
var array<int> pvh1_time = array.new_int(1000, na)
var array<float> pvl1_price = array.new_float(1000, na)
var array<int> pvl1_time = array.new_int(1000, na)
var array<float> pvh2_price = array.new_float(1000, na)
var array<int> pvh2_time = array.new_int(1000, na)
var array<float> pvl2_price = array.new_float(1000, na)
var array<int> pvl2_time = array.new_int(1000, na)
var float htcmrll_price = na
var int htcmrll_time = na
var float ltcmrhh_price = na
var int ltcmrhh_time = na
var array<box> long_boxes = array.new_box()
var array<box> short_boxes = array.new_box()
var float temp_pv_0 = na
var float temp_pv_1 = na
var float temp_pv_2 = na
bool pvh = high < high[1] and high[1] > high[2]
bool pvl = low > low[1] and low[1] < low[2]
int pv1_time = bar_index[1]
float pv1_high = high[1]
float pv1_low = low[1]
float trigger_high = bos_type == 'High and Low' ? high : math.max(open, close)
float trigger_low = bos_type == 'High and Low' ? low : math.min(open, close)
rangeHigh = ta.highest(high, lookback)
rangeLow = ta.lowest(low, lookback)
rangeHeight = rangeHigh - rangeLow
histogramHeight = rangeHeight / levelNum
histogramLowList = array.new_float(levelNum, na)
histogramHighList = array.new_float(levelNum, na)
histogramBuyVolumeList = array.new_float(levelNum, 0.0)
histogramSellVolumeList = array.new_float(levelNum, 0.0)
var buyBars = array.new_box(365, na)
for i = 0 to 364 by 1
    box.delete(array.get(buyBars, i)) // Corrected for loop syntax
var sellBars = array.new_box(365, na)
for i = 0 to 364 by 1 // Added 'by 1' to fix the loop syntax
    box.delete(array.get(sellBars, i)) // Ensure 'sellBars' is initialized
    // Colors
green = #00DD00
green50 = color.new(green, 50)
green20 = color.new(green, 80)
red = #DD0000
red50 = color.new(red, 50)
red20 = color.new(red, 80)
silver = #B2B5BE
silver50 = color.new(silver, 50)
silver20 = color.new(silver, 80)
// Plots
atrBand = usePercSL ? ((trigger != 0 ? low : high) * (percTrailingSL / 100)) :
(ta.atr(14) * 2.2)
atrStop = bool(trigger) ? low - atrBand : high + atrBand // ✅ Converts `trigger`
to `bool`
lastTrade(src) =>
    ta.valuewhen(bull or bear, src, 0)
entry_y = lastTrade(close)
stop_y = lastTrade(atrStop)
tp1_y = (entry_y - lastTrade(atrStop)) * multTP1 + entry_y
tp2_y = (entry_y - lastTrade(atrStop)) * multTP2 + entry_y
tp3_y = (entry_y - lastTrade(atrStop)) * multTP3 + entry_y
labelTpSl(cond, y, txt, color) =>
    var label lbl = na // Declare a variable to store the label
    if enableTpSlAreas and cond
        lbl := label.new(bar_index + 1, y, txt, xloc.bar_index, yloc.price, color,
label.style_label_left, color.white, size.normal)
        lbl
    if not na(lbl[1]) // Ensure previous label exists before deleting
        label.delete(lbl[1])
labelTpSl(none, entry_y, 'Entry : ' + str.tostring(math.round_to_mintick(entry_y)),
color.orange)
labelTpSl(none, stop_y, 'Stop loss : ' +
str.tostring(math.round_to_mintick(atrStop)), color.red)
labelTpSl(useTP1 and multTP1 != 0, tp1_y, 'TP 1 : ' +
str.tostring(math.round_to_mintick(tp1_y)), color.green)
labelTpSl(useTP2 and multTP2 != 0, tp2_y, 'TP 2 : ' +
str.tostring(math.round_to_mintick(tp2_y)), color.green)
labelTpSl(useTP3 and multTP3 != 0, tp3_y, 'TP 3 : ' +
str.tostring(math.round_to_mintick(tp3_y)), color.green)
lineTpSl(cond, y, color, style) =>
    line lineTpSl = enableTpSlAreas and cond ? line.new(bar_index -
(bool(trigger) ? countBull : countBear), y, bar_index + 1, y, xloc.bar_index,
extend.none, color, style) : na
    line.delete(lineTpSl[1])
lineTpSl(none, entry_y, color.orange, line.style_dashed)
lineTpSl(none, stop_y, color.red, line.style_solid)
lineTpSl(useTP1 and multTP1 != 0, tp1_y, color.green, line.style_dotted)
lineTpSl(useTP2 and multTP2 != 0, tp2_y, color.green, line.style_dotted)
lineTpSl(useTP3 and multTP3 != 0, tp3_y, color.green, line.style_dotted)
var dashboard_loc = locationDashboard == 'Top right' ? position.top_right :
locationDashboard == 'Top left' ? position.top_left : locationDashboard == 'Middle
right' ? position.middle_right : locationDashboard == 'Middle left' ?
position.middle_left : locationDashboard == 'Bottom right' ?
position.bottom_right : position.bottom_left
var dashboard_size = sizeDashboard == 'Tiny' ? size.tiny : sizeDashboard == 'Small'
? size.small : size.normal
var dashboard = table.new(dashboard_loc, 2, 20, colorBackground, colorFrame, 3,
colorBorder, 3)
dashboard_cell(column, row, txt) =>
    table.cell(dashboard, column, row, txt, 0, 0, color.white, text_size =
dashboard_size)
dashboard_cell_bg(column, row, col) =>
    table.cell_set_bgcolor(dashboard, column, row, col)
if barstate.islast and enableDashboard
    dashboard_cell(0, 0, 'Current strategy')
    dashboard_cell(0, 1, 'Current sensitivity')
    dashboard_cell(0, 2, 'Current Position')
    dashboard_cell(0, 3, 'Current trend')
    dashboard_cell(0, 4, 'Trend strength')
    dashboard_cell(0, 5, 'Volume')
    dashboard_cell(0, 6, 'Volatility')
    dashboard_cell(0, 7, 'Momentum')
    dashboard_cell(0, 8, 'Timeframe trends📊')
    table.merge_cells(dashboard, 0, 8, 1, 8)
    dashboard_cell(0, 9, '1 min')
    dashboard_cell(0, 10, '3 min')
    dashboard_cell(0, 11, '5 min')
    dashboard_cell(0, 12, '10 min')
    dashboard_cell(0, 13, '15 min')
    dashboard_cell(0, 14, '30 min')
    dashboard_cell(0, 15, '1 Hour')
    dashboard_cell(0, 16, '2 Hour')
    dashboard_cell(0, 17, '4 Hour')
    dashboard_cell(0, 18, '12 Hour')
    dashboard_cell(0, 19, 'Daily')
    dashboard_cell(1, 0, strategy)
    dashboard_cell(1, 1, str.tostring(sensitivity))
    dashboard_cell(1, 2, strategy != 'Trend scalper' ? (bool(trigger) ? 'Buy' :
'Sell') : '')
    dashboard_cell_bg(1, 2, strategy != 'Trend scalper' ? (bool(trigger) ?
color.green : color.red) : colorBackground)
    dashboard_cell(1, 3, emaBull ? 'Bullish' : 'Bearish')
    dashboard_cell_bg(1, 3, emaBull ? color.green : color.red)
    dashboard_cell(1, 4, str.tostring(bs, '0.0') + ' %')
    dashboard_cell(1, 5, vosc > 0 ? 'Bullish' : 'Bearish')
    dashboard_cell_bg(1, 5, vosc > 0 ? color.green : color.red)
    dashboard_cell(1, 6, adx > 20 ? 'Trending ' : 'Ranging ⚠️ ')
dashboard_cell_bg(1, 6, adx > 20 ? color.green : color.orange)
dashboard_cell(1, 7, rsi > 50 ? 'Bullish' : 'Bearish')
dashboard_cell_bg(1, 7, rsi > 50 ? color.green : color.red)
dashboard_cell(1, 9, TF1Bull ? 'Bullish' : 'Bearish')
dashboard_cell_bg(1, 9, TF1Bull ? color.green : color.red)
dashboard_cell(1, 10, TF3Bull ? 'Bullish' : 'Bearish')
dashboard_cell_bg(1, 10, TF3Bull ? color.green : color.red)
dashboard_cell(1, 11, TF5Bull ? 'Bullish' : 'Bearish')
dashboard_cell_bg(1, 11, TF5Bull ? color.green : color.red)
dashboard_cell(1, 12, TF10Bull ? 'Bullish' : 'Bearish')
dashboard_cell_bg(1, 12, TF10Bull ? color.green : color.red)
dashboard_cell(1, 13, TF15Bull ? 'Bullish' : 'Bearish')
dashboard_cell_bg(1, 13, TF15Bull ? color.green : color.red)
dashboard_cell(1, 14, TF30Bull ? 'Bullish' : 'Bearish')
dashboard_cell_bg(1, 14, TF30Bull ? color.green : color.red)
dashboard_cell(1, 15, TF60Bull ? 'Bullish' : 'Bearish')
dashboard_cell_bg(1, 15, TF60Bull ? color.green : color.red)
dashboard_cell(1, 16, TF120Bull ? 'Bullish' : 'Bearish')
dashboard_cell_bg(1, 16, TF120Bull ? color.green : color.red)
dashboard_cell(1, 17, TF240Bull ? 'Bullish' : 'Bearish')
dashboard_cell_bg(1, 17, TF240Bull ? color.green : color.red)
dashboard_cell(1, 18, TF720Bull ? 'Bullish' : 'Bearish')
dashboard_cell_bg(1, 18, TF720Bull ? color.green : color.red)
dashboard_cell(1, 19, TFDBull ? 'Bullish' : 'Bearish')
dashboard_cell_bg(1, 19, TFDBull ? color.green : color.red)
l(css, k) =>
    line lr = enableAutoTrend ? line.new(bar_index - lenTrendChannel + 1, A + k,
bar_index, B + k, extend = extend.right, color = css) : na
    line.delete(lr[1])
var float rmse = 0 // ✅ Declare `rmse` with a default value
l(color.blue, rmse)
l(color.blue, 0)
l(color.blue, -rmse)
buy = showSignals and bull ? label.new(bar_index, low, close > smartFilter ?
'Smart\nBuy' : 'Buy', xloc.bar_index, yloc.belowbar, color.green,
label.style_label_up, color.white, size.normal) : na
sell = showSignals and bear ? label.new(bar_index, high, close < smartFilter ?
'Smart\nSell' : 'Sell', xloc.bar_index, yloc.abovebar, color.red,
label.style_label_down, color.white, size.normal) : na
tpLabels(tp) =>
    tp1Bull = ta.crossover(rsi, 70)
    tp2Bull = ta.crossover(rsi, 75)
    tp3Bull = ta.crossover(rsi, 80)
    tp1Bear = ta.crossunder(rsi, 30)
    tp2Bear = ta.crossunder(rsi, 25)
    tp3Bear = ta.crossunder(rsi, 20)
    tp1Bull := tp1Bull and nz(ta.barssince(tp1Bull)[1], 9999) > countBull
    tp2Bull := tp2Bull and ta.barssince(tp1Bull)[1] <= countBull
    tp2Bull := tp2Bull and nz(ta.barssince(tp2Bull)[1], 9999) > countBull
    tp3Bull := tp3Bull and ta.barssince(tp2Bull)[1] <= countBull
    tp3Bull := tp3Bull and nz(ta.barssince(tp3Bull)[1], 9999) > countBull
    tp1Bear := tp1Bear and nz(ta.barssince(tp1Bear)[1], 9999) > countBear
    tp2Bear := tp2Bear and ta.barssince(tp1Bear)[1] <= countBear
    tp2Bear := tp2Bear and nz(ta.barssince(tp2Bear)[1], 9999) > countBear
    tp3Bear := tp3Bear and ta.barssince(tp2Bear)[1] <= countBear
    tp3Bear := tp3Bear and nz(ta.barssince(tp3Bear)[1], 9999) > countBear
    tp3Bear
if strategy != 'Trend scalper' and tpLabels
    var int tp = 0 // ✅ Declare `tp` before using it
    var float tp1Bull = 1.5
    var float tp2Bull = 2.0
    var float tp3Bull = 2.5
    var float tp1Bear = -1.5
    var float tp2Bear = -2.0
    var float tp3Bear = -2.5
    result = bool(trigger) ? (tp == 1 ? tp1Bull : tp == 2 ? tp2Bull : tp3Bull) :
                         (tp == 1 ? tp1Bear : tp == 2 ? tp2Bear : tp3Bear)
plotshape(tpLabels(1), '', shape.cross, location.abovebar, bool(trigger) ?   green :
na, 0, 'TP 1', bool(trigger) ? green : na, false)
plotshape(tpLabels(2), '', shape.cross, location.abovebar, bool(trigger) ?   green :
na, 0, 'TP 2', bool(trigger) ? green : na, false)
plotshape(tpLabels(3), '', shape.cross, location.abovebar, bool(trigger) ?   green :
na, 0, 'TP 3', bool(trigger) ? green : na, false)
plotshape(tpLabels(1), '', shape.cross, location.belowbar, bool(trigger) ?   na :
red, 0, 'TP 1', bool(trigger) ? na : red, false)
plotshape(tpLabels(2), '', shape.cross, location.belowbar, bool(trigger) ?   na :
red, 0, 'TP 2', bool(trigger) ? na : red, false)
plotshape(tpLabels(3), '', shape.cross, location.belowbar, bool(trigger) ?   na :
red, 0, 'TP 3', bool(trigger) ? na : red, false)
var label zzLabel = na
if array.size(zz) > 12 and enableSwings
    if array.get(zz, 0) != array.get(zzOld, 0) or array.get(zz, 1) !=
array.get(zzOld, 1)
        if array.get(zz, 2) == array.get(zzOld, 2) and array.get(zz, 3) ==
array.get(zzOld, 3)
            label.delete(zzLabel) // Correct indentation
        labelText = _dir == 1 ? array.get(zz, 0) > array.get(zz, 4) ? array.get(zz,
4) < array.get(zz, 8) ? 'High' : 'HH' : 'LH' : array.get(zz, 0) < array.get(zz,
4) ? array.get(zz, 4) > array.get(zz, 8) ? 'Low' : 'LL' : 'HL'
        zzLabel := label.new(math.round(array.get(zz, 1)), array.get(zz, 0),
labelText, xloc.bar_index, yloc.price, color.new(color.white, 100), _dir == 1 ?
label.style_label_down : label.style_label_up, _dir == 1 ? color.green : color.red)
        zzLabel
var sr_lines = array.new_line(11, na) // Ensured it's on a new line
for x = 1 to 10 by 1
    line.set_color(array.get(sr_lines, x), color = line.get_y1(array.get(sr_lines,
x)) >= close ? color.red : color.lime)
if bool(ph) or bool(pl)
    array.clear(sr_up_level)
    array.clear(sr_dn_level)
    array.clear(sr_strength)
    for x = 0 to array.size(pivotvals) - 1 by 1
        [hi, lo, strength] = get_sr_vals(x)
        if check_sr(hi, lo, strength)
            loc = find_loc(strength)
            if loc < 5 and strength >= 2
                array.insert(sr_strength, loc, strength)
                array.insert(sr_up_level, loc, hi)
                array.insert(sr_dn_level, loc, lo)
        if enableSR and array.size(sr_strength) > 5 // Fixed condition
            array.pop(sr_strength)
            array.pop(sr_up_level)
            array.pop(sr_dn_level)
    for x = 1 to 10 by 1
        line.delete(array.get(sr_lines, x))
    for x = 0 to array.size(sr_up_level) > 0 ? array.size(sr_up_level) - 1 : na by
1
        float mid = math.round_to_mintick((array.get(sr_up_level, x) +
array.get(sr_dn_level, x)) / 2)
        rate = 100 * (mid - close) / close
        array.set(sr_lines, x + 1, line.new(x1 = bar_index, y1 = mid, x2 =
bar_index - 1, y2 = mid, extend = extend.both, color = mid >= close ? color.red :
color.lime, style = LSRstyle, width = lineSrWidth))
if showCons and barstate.isconfirmed
    dir := bool(hb_) and na(lb_) ? 1 : bool(lb_) and na(hb_) ? -1 : dir
    if bool(hb_) and bool(lb_)
        if bool(hb_) and bool(lb_)
             if dir == 1
                  zz_ = hb_ // Use '=' instead of ':='
                  zz_
             else
                  zz_ = lb_ // Use '=' instead of ':='
                  zz_
        else
             zz_ := bool(hb_) ? hb_ : bool(lb_) ? lb_ : na
             zz_
for x = 0 to 1000 by 1 // Ensure correct loop syntax
    if na(close) or dir != dir[x]
        break // Properly indented inside the loop
    if bool(zz_[x])
        if na(pp)
             pp := zz_[x]
             pp
        else
             if dir[x] == 1 and zz_[x] > pp
                 pp := zz_[x]
                 pp
             if dir[x] == -1 and zz_[x] < pp
                 pp := zz_[x]
                 pp
    if pp != pp[1]
        if consCnt > lenCons
            if pp > condHi
                breakUp := true
                breakUp
            if pp < condLo
                breakDn := true
                breakDn
        if consCnt > 0 and pp <= condHi and pp >= condLo
             consCnt := consCnt + 1
             consCnt
        else
             consCnt := 0
             consCnt
    else
        consCnt := consCnt + 1 // Ensure this is properly indented
        consCnt
if consCnt >= lenCons
    if consCnt == lenCons
        condHi := H_
        condLo := L_
        condLo
    else
        line.delete(lineUp)
        line.delete(lineDn)
        condHi := math.max(condHi, high)
        condLo := math.min(condLo, low)
        condLo
    lineUp := line.new(bar_index, condHi, bar_index - consCnt, condHi, color =
color.red, style = line.style_dashed)
    lineDn := line.new(bar_index, condLo, bar_index - consCnt, condLo, color =
color.lime, style = line.style_dashed)
    lineDn
fill(plot(condHi, '', na, 1, plot.style_stepline, editable = false), plot(condLo,
'', na, 1, plot.style_stepline, editable = false), paintCons and consCnt >
lenCons ? colorZone : na, '', false)
if box_ob and barstate.isconfirmed
    if pvh
        array.pop(pvh1_price)
    array.pop(pvh1_time)
    array.unshift(pvh1_price, pv1_high)
    array.unshift(pvh1_time, pv1_time)
    if array.size(pvh1_price) > 2
        temp_pv_0 = array.get(pvh1_price, 0)
        temp_pv_1 = array.get(pvh1_price, 1)
        temp_pv_2 = array.get(pvh1_price, 2)
        if temp_pv_0 > temp_pv_1
            for i = 0 to array.size(pvl1_time) - 1 by 1
                temp_ltcmrhh_time = array.get(pvl1_time, i)
                if temp_ltcmrhh_time < array.get(pvh1_time, 0)
                    ltcmrhh_price := array.get(pvl1_price, i)
                    ltcmrhh_time := temp_ltcmrhh_time
                    break
        if temp_pv_0 < temp_pv_1 and temp_pv_1 > temp_pv_2
            array.pop(pvh2_price)
            array.pop(pvh2_time)
            array.unshift(pvh2_price, temp_pv_1)
            array.unshift(pvh2_time, array.get(pvh1_time, 1)) // Corrected
indentation
    if pvl
        array.pop(pvl1_price)
        array.pop(pvl1_time)
        array.unshift(pvl1_price, pv1_low)
        array.unshift(pvl1_time, pv1_time)
        if array.size(pvl1_price) > 2
            temp_pv_0 := array.get(pvl1_price, 0)
            temp_pv_1 := array.get(pvl1_price, 1)
            temp_pv_2 := array.get(pvl1_price, 2)
            temp_pv_2
    if temp_pv_0 < temp_pv_1
        var int temp_htcmrll_time = na // Declare variable before using it (outside
loop)
        for i = 0 to array.size(pvh1_time) - 1 by 1
            temp_htcmrll_time := array.get(pvh1_time, i) // Use ':=' for
reassignment
            if temp_htcmrll_time < array.get(pvl1_time, 0)
                htcmrll_price := array.get(pvh1_price, i)
                htcmrll_time := temp_htcmrll_time
                break // Exit loop once condition is met
    if temp_pv_0 > temp_pv_1 and temp_pv_1 < temp_pv_2
        array.pop(pvl2_price)
        array.pop(pvl2_time)
        array.unshift(pvl2_price, temp_pv_1)
        array.unshift(pvl2_time, array.get(pvl1_time, 1))
    if trigger_high > htcmrll_price
        if box_sv
            loBox = box.new(left = array.get(pvl1_time, 0), top =
math.min(high[bar_index - array.get(pvl1_time, 0)], high[bar_index -
array.get(pvl1_time, 0) + 1]), right = bar_index, bottom = array.get(pvl1_price,
0), bgcolor = color.rgb(0, 255, 0, 80), border_color = color.rgb(0, 255, 0, 80),
extend = extend.right)
            if array.size(long_boxes) >= 25
                box.delete(array.shift(long_boxes))
            array.push(long_boxes, loBox)
        htcmrll_price := na
        htcmrll_price
    if trigger_low < ltcmrhh_price
        if box_sv
            hiBox = box.new(left = array.get(pvh1_time, 0), top =
array.get(pvh1_price, 0), right = bar_index, bottom = math.max(low[bar_index -
array.get(pvh1_time, 0)], low[bar_index - array.get(pvh1_time, 0) + 1]), bgcolor =
color.rgb(255, 0, 0, 80), border_color = color.rgb(255, 0, 0, 80), extend =
extend.right)
            if array.size(short_boxes) >= 25
                box.delete(array.shift(short_boxes))
            array.push(short_boxes, hiBox)
        ltcmrhh_price := na
        ltcmrhh_price
    if array.size(short_boxes) > 0
        for i = array.size(short_boxes) - 1 to 0 by 1
            tbox = array.get(short_boxes, i)
            top = box.get_top(tbox)
            bottom = box.get_bottom(tbox)
            if trigger_high > bottom and box.get_left(tbox) + box_test_delay <
bar_index and box_test_sv
                if box_hide_gray // Fixed missing 'if
                    box.set_bgcolor(tbox, #00000000)
                    box.set_border_color(tbox, #00000000)
                else
                    box.set_bgcolor(tbox, color.rgb(192, 192, 192, 80))
                    box.set_border_color(tbox, color.rgb(192, 192, 192, 80))
            if trigger_high > top and box.get_left(tbox) + box_fill_delay <
bar_index
                if box_stop_sv
                    box.set_right(tbox, bar_index)
                    box.set_extend(tbox, extend.none)
                    array.remove(short_boxes, i)
    if array.size(long_boxes) > 0
        for i = array.size(long_boxes) - 1 to 0 by 1
            lbox = array.get(long_boxes, i)
            top = box.get_top(lbox)
            bottom = box.get_bottom(lbox)
            if trigger_low < top and box.get_left(lbox) + box_test_delay <
bar_index and box_test_sv
                 if box_hide_gray
                      box.set_bgcolor(lbox, #00000000)
                      box.set_border_color(lbox, #00000000)
                 else
                      box.set_bgcolor(lbox, color.rgb(192, 192, 192, 80))
                      box.set_border_color(lbox, color.rgb(192, 192, 192, 80))
            if trigger_low < bottom and box.get_left(lbox) + box_fill_delay <
bar_index
                 if box_stop_sv
                      box.set_right(lbox, bar_index)
                      box.set_extend(lbox, extend.none)
                      array.remove(long_boxes, i)
if barstate.islast and eliteVP
    for i = 0 to levelNum - 1 by 1
        histogramLow = rangeLow + histogramHeight * i
        histogramHigh = rangeLow + histogramHeight * (i + 1)
        array.set(histogramLowList, i, histogramLow)
        array.set(histogramHighList, i, histogramHigh)
    for i = 0 to lookback - 1 by 1
        currentBarHeight = high[i] - low[i]
        currentBuyVolume = high[i] == low[i] ? 0 : volume[i] * (close[i] -
low[i]) / currentBarHeight
        currentSellVolume = high[i] == low[i] ? 0 : volume[i] * (high[i] -
close[i]) / currentBarHeight
        for j = 0 to levelNum - 1 by 1
            histogramLow = array.get(histogramLowList, j)
            histogramHigh = array.get(histogramHighList, j)
            target = math.max(histogramHigh, high[i]) - math.min(histogramLow,
low[i]) - (math.max(histogramHigh, high[i]) - math.min(histogramHigh, high[i])) -
(math.max(histogramLow, low[i]) - math.min(histogramLow, low[i]))
            histogramVolumePercentage = target / currentBarHeight
            histogramBuyVolume = array.get(histogramBuyVolumeList, j)
            histogramSellVolume = array.get(histogramSellVolumeList, j)
            if histogramVolumePercentage > 0
                 array.set(histogramBuyVolumeList, j, histogramBuyVolume +
currentBuyVolume * histogramVolumePercentage)
                 array.set(histogramSellVolumeList, j, histogramSellVolume +
currentSellVolume * histogramVolumePercentage)
    highestHistogramVolume = 0.0
    for i = 0 to levelNum - 1 by 1
        histogramBuyVolume = array.get(histogramBuyVolumeList, i)
        histogramSellVolume = array.get(histogramSellVolumeList, i)
        histogramVolume = histogramBuyVolume + histogramSellVolume
        highestHistogramVolume := math.max(highestHistogramVolume, histogramVolume)
        highestHistogramVolume
    for i = 0 to levelNum - 1 by 1
        histogramLow = array.get(histogramLowList, i)
        histogramHigh = array.get(histogramHighList, i)
        histogramBuyVolume = array.get(histogramBuyVolumeList, i)
        histogramSellVolume = array.get(histogramSellVolumeList, i)
        histogramVolume = histogramBuyVolume + histogramSellVolume
        histogramWidth = levelWidth * histogramVolume / highestHistogramVolume
        histogramBuyWidth = math.floor(histogramWidth * histogramBuyVolume /
histogramVolume)
        histogramSellWidth = math.floor(histogramWidth * histogramSellVolume /
histogramVolume)
        array.set(buyBars, i, box.new(bar_index + offset + levelWidth - 1 -
histogramBuyWidth, histogramHigh, bar_index + offset + levelWidth - 1,
histogramLow, colorBorderVP, bgcolor = colorBuyVP))
        array.set(sellBars, i, box.new(bar_index + offset + levelWidth - 1 -
histogramBuyWidth, histogramHigh, bar_index + offset + levelWidth - 1 -
histogramBuyWidth - histogramSellWidth, histogramLow, colorBorderVP, bgcolor =
colorSellVP))
barcolor(momentumCandles and candlesMom() ? color.purple : candleColors ? strategy
== 'Trend scalper' ? colorBar : na(countBull) and na(countBear) ? color.gray :
bool(trigger) ? green : red : na, editable = false)
fill(plot(showTrendCloud and periodTrendCloud == 'New' ? ema150 : na, '', na,
editable = false), plot(showTrendCloud and periodTrendCloud == 'New' ? ema250 : na,
'', na, editable = false), ema150 > ema250 ? color.new(color.green, 70) : ema150 <
ema250 ? color.new(color.red, 70) : na)
plot(enableTrailingSL and bool(trigger) and nz(ta.barssince(low < trailingStop),
bar_index) > countBull ? trailingStop : na, '', green, 1, plot.style_linebr,
editable = false)
plot(enableTrailingSL and not bool(trigger) and nz(ta.barssince(high >
trailingStop), bar_index) > countBear ? trailingStop : na, '', red, 1,
plot.style_linebr, editable = false)
p0 = plot(avgOC, '', na, editable = false)
p1 = plot(ema5, '', colorEma5, editable = false)
p2 = plot(ema9, '', colorEma9, editable = false)
p3 = plot(ema21, '', colorEma21, editable = false)
fill(p0, p1, fillEma5)
fill(p1, p2, fillEma9)
fill(p2, p3, fillEma21)
fill(plot(showTrendCloud and periodTrendCloud != 'New' and trendcloud != 0 and
close > trendcloud ? trendcloud : na, '', color.green, 1, plot.style_linebr,
editable = false), p0, color.new(color.green, 90))
fill(plot(showTrendCloud and periodTrendCloud != 'New' and trendcloud != 0 and
close < trendcloud ? trendcloud : na, '', color.red, 1, plot.style_linebr, editable
= false), p0, color.new(color.red, 90))
fill(plot(hma, '', hma > hma[2] ? green : hma < hma[2] ? red : na, editable =
false), plot(hma[2], '', hma > hma[2] ? green : hma < hma[2] ? red : na, editable =
false), hma > hma[2] ? green : hma < hma[2] ? red : na)
// Alerts
f_crossed_over() =>
    ret = false
    for x = 0 to array.size(sr_up_level) > 0 ? array.size(sr_up_level) - 1 : na by
1
        float mid = math.round_to_mintick((array.get(sr_up_level, x) +
array.get(sr_dn_level, x)) / 2)
        if close[1] <= mid and close > mid
            ret := true
            ret
    ret
f_crossed_under() =>
    ret = false
    for x = 0 to array.size(sr_up_level) > 0 ? array.size(sr_up_level) - 1 : na by
1
        float mid = math.round_to_mintick((array.get(sr_up_level, x) +
array.get(sr_dn_level, x)) / 2)
        if close[1] >= mid and close < mid
            ret := true
            ret
    ret
f_sl_crossed() =>
    ret = false
    stop = enableTrailingSL ? trailingStop : stop_y
    crossBull = low[1] >= stop[1] and low < stop[1] and ta.barssince(low[1] >=
stop[1] and low < stop[1])[1] >= countBull - 1
    crossBear = high[1] <= stop[1] and high > stop[1] and ta.barssince(high[1] <=
stop[1] and high > stop[1])[1] >= countBear - 1
    ret := bool(trigger)[1] ? crossBull : crossBear
    ret
f_tp_crossed(tp) =>
    ret = false
    profit = tp
    crossBull = high[1] <= profit[1] and high > profit[1] and ta.barssince(high[1]
<= profit[1] and high > profit[1])[1] >= countBull - 1
    crossBear = low[1] >= profit[1] and low < profit[1] and ta.barssince(low[1] >=
profit[1] and low < profit[1])[1] >= countBear - 1
    ret := bool(trigger)[1] ? crossBull : crossBear
    ret
alert01 = bull and close <= smartFilter or bear and close >= smartFilter
alert02 = bull or bear
alert03 = bull and close > smartFilter or bear and close < smartFilter
alert04 = bull and close <= smartFilter
alert05 = f_crossed_over()
alert06 = bear and close >= smartFilter
alert07 = bull and close > smartFilter
alert08 = bear and close < smartFilter
alert09 = f_sl_crossed()
alert10 = f_crossed_under()
alert11 = f_tp_crossed(tp1_y)
alert12 = f_tp_crossed(tp2_y)
alert13 = f_tp_crossed(tp3_y)
alert14 = periodTrendCloud == 'New' ? ta.crossunder(ema150, ema250) : close <
trendcloud and (close > trendcloud)[1]
alert15 = periodTrendCloud == 'New' ? ta.crossover(ema150, ema250) : close >
trendcloud and (close < trendcloud)[1]
alerts(sym) =>
    if alert01 or alert02 or alert03 or alert04 or alert05 or alert06 or alert07 or
alert08 or alert09 or alert10 or alert11 or alert12 or alert13 or alert14 or
alert15
        alert('NEW ALERT', alert.freq_once_per_bar_close)
alerts(syminfo.tickerid)
alertcondition(alert01, 'Any Signal Buy / sell', 'Buy or Sell')
alertcondition(alert02, 'Any signal Buy/Smart Buy or Sell/Smart Sell', 'Buy/Smart
Buy or Sell/Smart Sell')
alertcondition(alert03, 'Any signal Smart Buy / Smart Sell', 'Smart Buy or Smart
Sell')
alertcondition(alert04, 'Buy alert', 'Buy')
alertcondition(alert05, 'Resistance Broken', 'Resistance Broken')
alertcondition(alert06, 'Sell alert', 'Sell')
alertcondition(alert07, 'Smart Buy', 'Smart Buy')
alertcondition(alert08, 'Smart Sell', 'Smart Sell')
alertcondition(alert09, 'Stop loss', 'Stop loss')
alertcondition(alert10, 'Support Broken', 'Support Broken')
alertcondition(alert11, 'Target 1', 'Target 1')
alertcondition(alert12, 'Target 2', 'Target 2')
alertcondition(alert13, 'Target 3', 'Target 3')
alertcondition(alert14, 'Trend cloud Bearish Alert', 'Trend cloud Bearish')
alertcondition(alert15, 'Trend cloud Bullish Alert', 'Trend cloud Bullish')