Files
MQL5Data/Documents/BKP/percentile.supertrend.pine
T
2025-03-30 01:20:09 +03:30

67 lines
2.3 KiB
Plaintext

// 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)