This version of the Jurik RSX (smoothed RSI with Jurik MA applied on it) has the dynamic overbought / oversold zones built with the DSL function (Discontinued Signal Lines).
When the oscillator is in overbought or oversold zones (above or below the DSL upper and lower lines), it changes color.
Converted following a request in the indicators forum:
https://www.prorealcode.com/topic/dsl-rsx-conversion-code-mq4-too-prc/
Other indicators using DSL as dynamic OB/OS zones: https://www.prorealcode.com/tag/dsl/
//PRC_DSL RSX | indicator
//11.12.2020
//Nicolas @ www.prorealcode.com
//Sharing ProRealTime knowledge
//converted from MT4 version (mladen)
// --- settings
RSIperiod = 32
SignalPeriod = 32 // Signal period
// --- end of settings
rsiprice=customclose
//RSX
if barindex>max(RSIperiod,SignalPeriod) then
Len=rsiperiod
smallRsiValue = 0.0000000000000001
if (f90 = 0.0) then
f90 = 1.0
f0 = 0.0
if (Len-1 >= 5) then
f88 = Len-1.0
else
f88 = 5.0
endif
f8 = 100.0*(rsiprice)
f18 = 3.0 / (Len + 2.0)
f20 = 1.0 - f18
else
if (f88 <= f90) then
f90 = f88 + 1
else
f90 = f90 + 1
endif
f10 = f8
f8 = 100*Close
v8 = f8 - f10
f28 = f20 * f28 + f18 * v8
f30 = f18 * f28 + f20 * f30
vC = f28 * 1.5 - f30 * 0.5
f38 = f20 * f38 + f18 * vC
f40 = f18 * f38 + f20 * f40
v10 = f38 * 1.5 - f40 * 0.5
f48 = f20 * f48 + f18 * v10
f50 = f18 * f48 + f20 * f50
v14 = f48 * 1.5 - f50 * 0.5
f58 = f20 * f58 + f18 * Abs(v8)
f60 = f18 * f58 + f20 * f60
v18 = f58 * 1.5 - f60 * 0.5
f68 = f20 * f68 + f18 * v18
f70 = f18 * f68 + f20 * f70
v1C = f68 * 1.5 - f70 * 0.5
f78 = f20 * f78 + f18 * v1C
f80 = f18 * f78 + f20 * f80
v20 = f78 * 1.5 - f80 * 0.5
if ((f88 >= f90) and (f8 <> f10)) then
f0 = 1.0
endif
if ((f88 = f90) and (f0 = 0.0)) then
f90 = 0.0
endif
endif
if ((f88 < f90) and (v20 > smallRsiValue)) then
v4 = (v14 / v20 + 1.0) * 50.0
if (v4 > 100.0) then
v4 = 100.0
endif
if (v4 < 0.0) then
v4 = 0.0
endif
else
v4 = 50.0
endif
irsi=v4
alpha = 2.0/(1.0+SignalPeriod)
val = irsi
if val>50 then
levelu = levelu[1]+alpha*(val-levelu[1])
endif
if val<50 then
leveld = leveld[1]+alpha*(val-leveld[1])
endif
//OB and OS colors
r=200
g=200
b=200
if val>levelu then
r=50
g=205
b=50
elsif val<leveld then
r=255
g=165
b=0
endif
endif
return val coloured(r,g,b) style(line,2), levelu style(dottedline), leveld style(dottedline)