67 lines
2.3 KiB
Plaintext
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)
|
|
|