// This Pine Script™ code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/ // © Mattes00 //@version=6 indicator("25-75 Percentile SuperTrend | Mattes", shorttitle = "25-75 ST | Mattes", overlay = true) subject = input.int (14,"Supertrend length", minval = 2 , group="25-75 Percentile SuperTrend") mult = input.float (1, "Multiplier", step=0.05,group="25-75 Percentile SuperTrend") slen = input.int (27, "Percentile length", group="25-75 Percentile SuperTrend") src_2575 = input.source(high, "Median smoothing source", group="25-75 Percentile SuperTrend") smooth_lower = ta.percentile_nearest_rank(src_2575, slen, 25) smooth_upper = ta.percentile_nearest_rank(src_2575, slen, 75) Percentile_SuperTrend_func(mult, atrPeriod) => src_long = smooth_upper src_short = smooth_lower atr = ta.atr(atrPeriod) upper = src_long + mult * atr lower = src_short - mult * atr pl = nz(lower[1]) pu = nz(upper[1]) lower := lower > pl or close[1] < pl ? lower : pl upper := upper < pu or close[1] > pu ? upper : pu int dist = na float st = na pt = st[1] if na(atr[1]) dist := 1 else if pt == pu dist := close > upper ? -1 : 1 else dist := close < lower ? 1 : -1 st := dist == -1 ? lower : upper [st, dist] [x, dist] = Percentile_SuperTrend_func(mult, subject) ST_L = ta.crossunder(dist, 0) ST_S = ta.crossover(dist, 0) Long = ST_L Short = ST_S var Mattes = 0 if (Long and not Short) Mattes := 1 if Short Mattes := -1 syscol = Mattes == 1 ? color.rgb(45, 162, 252) : Mattes == -1 ? color.rgb(113, 59, 249) : color.gray BlueTransParent = color.new(color.rgb(45, 162, 252), 50) PurpleTransParent = color.new(color.rgb(113, 59, 249), 50) plotcandle(open, high, low, close, 'BarColor', color = syscol, bordercolor = syscol, wickcolor = syscol,force_overlay = true) upTrend = plot(dist < 0 ? x : na, "Up Trend", color = color.rgb(45, 162, 252), style = plot.style_linebr, linewidth = 2) downTrend = plot(dist < 0 ? na : x, "Down Trend", color = color.rgb(113, 59, 249), style = plot.style_linebr, linewidth = 2) s = plot((smooth_lower + smooth_upper) / 2, color = syscol) fill(s, upTrend, BlueTransParent, fillgaps = false) fill(s, downTrend, PurpleTransParent, fillgaps = false)