Declare Lower;
Input RS_Pd = 9;
Input WMA_Pd = 21;
Input Displace = 0;
Input EMA_Pd = 3;
input over_Bought = 70;
input over_Sold = 30;
input price = close;
input averageType = AverageType.WILDERS;
input Arrows_1 = no;
input Arrows_2 = no;
input Arrows_3 = no;
input Dotsize = 3;
def NetChgAvg = MovingAverage(averageType, price - price[1], RS_Pd);
def TotChgAvg = MovingAverage(averageType, AbsValue(price - price[1]), RS_Pd);
def ChgRatio = if TotChgAvg != 0 then NetChgAvg / TotChgAvg else 0;
plot RSI = 50 * (ChgRatio + 1);
Plot A_RSI = ExpAverage(RSI,EMA_Pd);
Plot B_RSI = WMA(RSI,WMA_Pd)[-displace];
def MMAX = MAX(RSI,A_RSI);
def MMin = Min(RSI,A_RSI);
def MMaxAll = Max(RSI,Max(A_RSI,B_RSI));
def MMinAll = Min(RSI,Min(A_RSI,B_RSI));
plot OverSold = over_Sold;
plot OverBought = over_Bought;
plot UpSignal = if RSI crosses above OverSold then OverSold else Double.NaN;
plot DownSignal = if RSI crosses below OverBought then OverBought else Double.NaN;
UpSignal.SetHiding(!Arrows_1);
DownSignal.SetHiding(!Arrows_1);
RSI.setdefaultColor(Color.Cyan);
A_RSI.setdefaultColor(Color.Magenta);
B_RSI.setdefaultColor(Color.Yellow);
RSI.SetLineWeight(2);
A_RSI.SetLineWeight(2);
B_RSI.SetLineWeight(2);
AddCloud(RSI,A_RSI,Color.Cyan,Color.Magenta);
AddCloud(MMin,B_RSI,Color.Yellow,Color.Black);
AddCloud(B_RSI,MMax,Color.Yellow,Color.Black);
AddCloud(MMinAll,50,Color.Green,Color.Black);
AddCloud(50,MMaxAll,Color.Red,Color.Black);
OverSold.SetDefaultColor(GetColor(8));
OverBought.SetDefaultColor(GetColor(8));
UpSignal.SetDefaultColor(Color.UPTICK);
UpSignal.SetPaintingStrategy(PaintingStrategy.ARROW_UP);
DownSignal.SetDefaultColor(Color.DOWNTICK);
DownSignal.SetPaintingStrategy(PaintingStrategy.ARROW_DOWN);
UpSignal.setLineWeight(Dotsize -1);
DownSignal.setLineWeight(Dotsize -1);
#ARROWS
plot ArrowDown = if Arrows_2 and (RSI Crosses below A_RSI) then A_RSI else double.nan;
ArrowDown.setpaintingStrategy(paintingStrategy.Arrow_Down);
ArrowDown.setDefaultColor(color.Red);
ArrowDown.setLineWeight(dotsize);
plot ArrowUp = if Arrows_2 and (RSI crosses above A_RSI) then A_RSI else double.nan;
ArrowUp.setpaintingStrategy(paintingStrategy.Arrow_Up);
ArrowUp.setDefaultColor(color.Cyan);
ArrowUp.setLineWeight(dotsize);
plot ArrowDown2 = if Arrows_3 and (RSI Crosses below B_RSI) then B_RSI else double.nan;
ArrowDown2.setpaintingStrategy(paintingStrategy.Arrow_Down);
ArrowDown2.setDefaultColor(color.Yellow);
ArrowDown2.setLineWeight(dotsize+1);
plot ArrowUp2 = if Arrows_3 and (RSI crosses above B_RSI ) then B_RSI else double.nan;
ArrowUp2.setpaintingStrategy(paintingStrategy.Arrow_Up);
ArrowUp2.setDefaultColor(color.Yellow);
ArrowUp2.setLineWeight(dotsize+1);