#// Indicator for TOS
#// © Smoker024
#indicator(“SP Indicator”, overlay=true)
# Converted by Sam4Cok@Samer800 – 10/2024
input showBands = yes;
input source = close;
input lookback = 60;
input multi = 0.2;
def na = Double.NaN;
def exitLength = RoundUp(lookback / 4, 0);
Script ma {
input src = close;
input len = 15;
def sqLen = Round(sqrt(len), 0);
def wma1 = wma(src, len);
def wma2 = wma(src, len / 2);
def ma = wma(2 * wma2 – wma1, sqLen);
plot out = ma;
}
def tr = TrueRange(high, close, low);
def BBMC = ma(source, lookback);
def rangema = ExpAverage(tr, lookback);
def upperk =BBMC + rangema * multi;
def lowerk = BBMC – rangema * multi;
def col = if source > upperk then 1 else if source < lowerk then -1 else 0;
def ExitHigh = ma(high, exitLength);
def ExitLow = ma(low, exitLength);
def Hlv3 = if source > ExitHigh then 1 else if source < ExitLow then -1 else Hlv3[1];
def sslExit = if Hlv3 < 0 then ExitHigh else ExitLow;
def base_cross_Long = (close > sslExit) and (close[1] <= sslExit[1]);
def base_cross_Short = (sslExit > close) and (sslExit[1] <= close[1]);
def codiff = if base_cross_Long then 1 else if base_cross_Short then -1 else 0;
plot ExitArrowUp = if codiff>0 then low else na;
plot ExitArrowDn = if codiff<0 then low else na;
plot maTrendLine = BBMC; # ‘MA Trendline’
plot limitUp = if showBands then upperk else na;
plot limitDn = if showBands then lowerk else na;
maTrendLine.SetLineWeight(2);
maTrendLine.AssignValueColor(if col>0 then Color.CYAN else if col<0 then Color.MAGENTA else Color.GRAY);
limitUp.AssignValueColor(if col>0 then Color.CYAN else if col<0 then Color.MAGENTA else Color.GRAY);
limitDn.AssignValueColor(if col>0 then Color.CYAN else if col<0 then Color.MAGENTA else Color.GRAY);
ExitArrowUp.SetDefaultColor(Color.CYAN);
ExitArrowDn.SetDefaultColor(Color.MAGENTA);
ExitArrowUp.SetPaintingStrategy(PaintingStrategy.BOOLEAN_ARROW_UP);
ExitArrowDn.SetPaintingStrategy(PaintingStrategy.BOOLEAN_ARROW_DOWN);
Plots Up and Down arrows

Variable options:

Here it is:
//---------------------------------------//
//PRC_SP Indicator
//version = 1
//11.02.2025
//Iván González @ www.prorealcode.com
//Sharing ProRealTime knowledge
//---------------------------------------//
// inputs
//---------------------------------------//
src=close
len=60
//---------------------------------------//
// Moving Average and Bands
//---------------------------------------//
bbmc=average[max(1,round(sqrt(len))),2](average[max(1,round(len/2)),2](src)*2-average[len,2](src))
rangema=average[len,1](tr)
upperk=bbmc+rangema*0.2
lowerk=bbmc-rangema*0.2
//---------------------------------------//
// Colors Definition
//---------------------------------------//
if close>upperk then
r=33
g=150
b=243
elsif close<lowerk then
r=225
g=64
b=251
else
r=120
g=123
b=134
endif
drawcandle(open,high,low,close)coloured(r,g,b)
//---------------------------------------//
// Signals
//---------------------------------------//
srcH=high
lenH=15
ExitHigh=average[max(1,round(sqrt(lenH))),2](average[max(1,round(lenH/2)),2](srcH)*2-average[lenH,2](srcH))
srcL=low
lenL=15
ExitLow=average[max(1,round(sqrt(lenL))),2](average[max(1,round(lenL/2)),2](srcL)*2-average[lenL,2](srcL))
if close>ExitHigh then
Hlv3=1
elsif close<ExitLow then
Hlv3=-1
endif
if Hlv3<0 then
sslExit=ExitHigh
else
sslExit=ExitLow
endif
baseCrossLong=close crosses over sslExit
baseCrossShort=close crosses under sslExit
if baseCrossLong then
codiff=1
drawarrowup(barindex,low-rangema*0.5)coloured(33,150,243)
elsif baseCrossShort then
codiff=-1
drawarrowdown(barindex,high+rangema*0.5)coloured(225,64,251)
else
codiff=1=undefined
endif
//---------------------------------------//
return bbmc coloured(r,g,b)style(line,2)
I took the liberty of making a few changes to it, in order to make it little bit faster… at least i tried 🙂
//---------------------------------------//
//PRC_SP Indicator
//version = 1
//11.02.2025
//Iván González @ www.prorealcode.com
//Sharing ProRealTime knowledge
//---------------------------------------//
// inputs
//---------------------------------------//
src=close
once len=60
once sqrtlen = round(sqrt(len))
//---------------------------------------//
// Moving Average and Bands
//---------------------------------------//
bbmc=average[sqrtlen,2](average[round(len/2),2](src)*2-average[len,2](src))
rangema=average[len,1](tr)
upperk=bbmc+rangema*0.2
lowerk=bbmc-rangema*0.2
//---------------------------------------//
// Colors Definition
//---------------------------------------//
if close>upperk then
r=33
g=150
b=243
elsif close<lowerk then
r=225
g=64
b=251
else
r=120
g=123
b=134
endif
drawcandle(open,high,low,close)coloured(r,g,b)
//---------------------------------------//
// Signals
//---------------------------------------//
//srcH=high
once lenH = 15
once sqrtlenH = round(sqrt(lenH))
ExitHigh=average[sqrtlenH,2](average[round(lenH/2),2](high)*2-average[lenH,2](high))
//srcL=low
once lenL = 15
once sqrtlenL = round(sqrt(lenL))
ExitLow=average[sqrtlenL,2](average[round(lenL/2),2](low)*2-average[lenL,2](low))
if close>ExitHigh then
Hlv3=1
elsif close<ExitLow then
Hlv3=-1
endif
if Hlv3<0 then
sslExit=ExitHigh
else
sslExit=ExitLow
endif
baseCrossLong=close crosses over sslExit
baseCrossShort=close crosses under sslExit
if baseCrossLong then
codiff=1
drawarrowup(barindex,low-rangema*0.5)coloured(33,150,243)
elsif baseCrossShort then
codiff=-1
drawarrowdown(barindex,high+rangema*0.5)coloured(225,64,251)
else
codiff=1=undefined
endif
//---------------------------------------//
return bbmc coloured(r,g,b,100)style(line,5)
Sorry for the delay in replying, but Thank you! Both look fantastic!