#DEEPWATER_THE ONE 2/4/2022 revision 5
#https://usethinkscript.com/threads/deepwater_the-one.6518/
declare lower;
input length = 20;
input length2 = 15;
input price = close;
input averageType = AverageType.WILDERS;
input fastLength = 12;
input slowLength = 26;
input MACDLength = 9;
input averageTypeMACD = AverageType.EXPONENTIAL;
def Diff = MACD(fastLength, slowLength, MACDLength, averageTypeMACD).Diff;
def NetChgAvg = MovingAverage(averageType, price - price[1], length);
def TotChgAvg = MovingAverage(averageType, AbsValue(price - price[1]), length);
def ChgRatio = if TotChgAvg != 0 then NetChgAvg / TotChgAvg else 0;
def RSI = 50 * (ChgRatio + 1);
def RSIAvg3 = MovingAverage(averageType, (RSI), 3);
def RSIAvg5 = MovingAverage(averageType, (RSI), 5);
def RSI3OverSoldpivit = RSIAvg3 > RSIAvg3[1] and RSIAvg3[1] > RSIAvg3[2] and RSIAvg3[2] < RSIAvg3[3] and RSIAvg3[3] < RSIAvg3 [4];
def RSI3OverBoughtpivit = RSIAvg3 < RSIAvg3[1] and RSIAvg3[1] < RSIAvg3[2] and RSIAvg3[2] > RSIAvg3[3] and RSIAvg3[3] > RSIAvg3 [4];
#--------------------5 day MA
input displace = 0;
input showBreakoutSignals = no;
def MAvgExp14 = ExpAverage(price[-displace], 14);
#--------------------oversold
def twoBarPivotMACD = Diff > Diff[1] and Diff[1] > Diff[2] and Diff[2] < Diff[3] and Diff[3] < Diff [4];
def overSoldRSI = RSI <= 32;
def overSoldRSIHeavy = RSI <= 30 and Diff < 0 and (close < close[7]);
def TrendReversalalert = (twoBarPivotMACD and Highest(overSoldRSI, 6) > 0) / 3;
Alert(TrendReversalalert, "Buy Alert");
plot TrendReversal1 = (twoBarPivotMACD and RSIAvg3 < 45 and Highest(overSoldRSIHeavy, 6) > 0) / 1.4;
plot TrendReversalstrongbuy = ((TrendReversal1[1] > 0 or TrendReversal1[2] > 0 or TrendReversal1[3] > 0 or TrendReversal1[4] > 0 or TrendReversal1[5] > 0 or TrendReversal1[6] > 0 or TrendReversal1[7] > 0 or TrendReversal1[8] > 0 or TrendReversal1[9] > 0 or TrendReversal1[10] > 0 or TrendReversal1[11] > 0 or TrendReversal1[12] > 0 or TrendReversal1[13] > 0 or TrendReversal1[14] > 0) and twoBarPivotMACD and RSIAvg3 < 45 and Highest(overSoldRSIHeavy, 6) > 0) / 1.1;
plot TrendReversal = (twoBarPivotMACD and TrendReversalstrongbuy < 1 and Highest(overSoldRSI, 6) > 0) / 3;
TrendReversal.SetDefaultColor(GetColor(4));#yellow
TrendReversal1.SetDefaultColor(GetColor(6));#green
TrendReversalstrongbuy.SetDefaultColor(GetColor(6));#green
TrendReversalstrongbuy.SetLineWeight(3);
TrendReversal1.SetLineWeight(2);
AddLabel(yes, if TrendReversal > 0 then "Buy" else "");
Alert( TrendReversalalert > 0, "Chart is now Oversold ", Alert.BAR, Sound.Ring);
AddLabel(TrendReversalalert > 0
, "Chart is now Oversold ", Color.LIME);
#-----------------------Overbought
def twoBarPivotMACD1 = Diff < Diff[1] and Diff[1] < Diff[2] and Diff[2] > Diff[3] and Diff[3] > Diff [4];
def overboughtRSI = RSIAvg3 >= 65 and Diff > 0;
def TrendReversalalert20 = (twoBarPivotMACD1 and Highest(overboughtRSI[1], 7) > 0);
plot TrendReversal20 = 1 - (((RSIAvg3 >= 65 and RSI < RSIAvg3[2]) and RSI3OverBoughtpivit)/ 1.5) ;
plot TrendReversal20a = 1 - ((((RSIAvg3 >= 60 and RSIAvg3 < 65 )and RSI < RSIAvg3[2]) and RSI3OverBoughtpivit) / 4) ;
TrendReversal20.SetDefaultColor(GetColor(5)); #Red
TrendReversal20a.SetDefaultColor(GetColor(2)); #lt Red
TrendReversal20a.SetLineWeight(2);
TrendReversal20.SetLineWeight(3);
plot TrendReversal50 = 1 - ((RSIAvg5 >= 65 and close < MAvgExp14) / 2) ;
TrendReversal50.SetDefaultColor(GetColor(0)); #Red
TrendReversal50.SetLineWeight(3);
AddLabel(yes, if TrendReversal20 < 1 then "Sell" else "");
Alert( TrendReversal20 < 1 , "Chart is now Overbought ", Alert.BAR, Sound.Ring);
AddLabel(TrendReversal20 < 1, "Chart is now Overbought ", Color.LIME);
input show_label = yes;
input show_bubble = no;
#--------------------------- Large 5X and 30X Volume Alert
input AverageLength = 2000;
input VolumeMultiplier = 10;
input VolumeMultiplier2 = 5;
input MinutesAfterOpen = 30;
def AvgVol = Average(volume, AverageLength);
def Vol5X = (volume > AvgVol * VolumeMultiplier2);
def Vol10X = (volume > AvgVol * VolumeMultiplier);
def Vol30X = (volume > AvgVol * 30) ;
Alert(Vol5X, Concat(GetSymbolPart(), " has a large volume spike." ), Alert.BAR, Sound.Chimes);
AddLabel(Vol5X > 0, " Has 5X Volume Spike ", Color.LIGHT_GREEN);
Alert(Vol10X, Concat(GetSymbolPart(), " has a large volume spike." ), Alert.BAR, Sound.Chimes);
AddLabel(Vol10X > 0, " Has 10X Volume Spike ", Color.LIGHT_GREEN);
Alert(Vol30X, Concat(GetSymbolPart(), " has a large volume spike." ), Alert.BAR, Sound.Chimes);
AddLabel(Vol30X > 0, " Has 30X Volume Spike ", Color.LIGHT_GREEN);
#-------------------------------------GAP UP Price
def IsUp = close > open;
def IsDown = close < open;
def IsDoji = IsDoji();
def avgRange = 0.05 * Average(high - low, 20);
def GapUp =
IsUp[1] and
IsUp[0] and
high[1] < low[0] and
high[1] < open[0] and
(volume > AvgVol * 5) ;
Alert(GapUp, Concat(GetSymbolPart(), " GAPUP" ), Alert.BAR, Sound.Ring);
AddLabel(GapUp > 0, " GAP Up ", Color.LIGHT_GREEN);
#---------------------------------Large Price change 3%
def Priceup =
IsUp[1] and
IsUp[0] and
high[1] < high[0] and
high[2] * 1.02 < high[0] and
high[3] * 1.03 < high[0] and
(volume > AvgVol * 3) ;
Alert(Priceup, Concat(GetSymbolPart(), " Price JUMP" ), Alert.BAR, Sound.Bell);
AddLabel(Priceup > 0, " Price JUMP ", Color.CYAN);
#---------------------------------HugePrice change 6%
def Priceup2 =
IsUp[1] and
IsUp[0] and
high[1] < high[0] and
high[3] * 1.04 < high[0] and
high[4] * 1.06 < high[0] and
(volume > AvgVol * 3) ;
Alert(Priceup2, Concat(GetSymbolPart(), " JUMP! JUMP! JUMP" ), Alert.BAR, Sound.Chimes);
AddLabel(Priceup2 > 0, " JUMP! JUMP! JUMP ", Color.LIGHT_RED);
#-----------------------------------------------------------------------------------------
#--------------------------RSI cumulative running total
def MAvgExp7 = ExpAverage(price[-displace], 7);
def RSICalc = 50 * (ChgRatio + 1);
def RSICalc1 = if RSI > 70 then 3 else if RSI < 30 then -3 else 0;
def RSICalc2 = if RSI[1] > 70 then 2 else if RSI[1] < 30 then -2 else 0;
def RSICalc3 = if RSI[2] > 70 then 1 else if RSI[2] < 30 then -1 else 0;
def RSICalc4 = if RSI[3] > 70 then 1 else if RSI[3] < 30 then -1 else 0;
def RSICalc5 = if RSI[4] > 70 then 1 else if RSI[4] < 30 then -1 else 0;
def RSICalc6 = if RSI[5] > 70 then 1 else if RSI[5] < 30 then -1 else 0;
def RSICalc7 = if RSI[6] > 70 then 1 else if RSI[6] < 30 then -1 else 0;
def RSICalc8 = if RSI[7] > 70 then 1 else if RSI[7] < 30 then -1 else 0;
def RSICalc9 = if RSI[8] > 70 then 1 else if RSI[8] < 30 then -1 else 0;
def RSICalc10 = if RSI[9] > 70 then 1 else if RSI[9] < 30 then -1 else 0;
def RSICalc11 = if RSI[10] > 70 then 1 else if RSI[10] < 30 then -1 else 0;
def RSICalc12 = if RSI[11] > 70 then 1 else if RSI[11] < 30 then -1 else 0;
def RSICalc13 = if RSI[12] > 70 then 1 else if RSI[12] < 30 then -1 else 0;
def RSICalc14 = if RSI[13] > 70 then 1 else if RSI[13] < 30 then -1 else 0;
def RSICalc15 = if RSI[14] > 70 then 1 else if RSI[14] < 30 then -1 else 0;
def RSICalc16 = if RSI[15] > 70 then 1 else if RSI[15] < 30 then -1 else 0;
def RSICalc17 = if RSI[16] > 70 then 1 else if RSI[16] < 30 then -1 else 0;
def RSICalc18 = if RSI[17] > 70 then 1 else if RSI[17] < 30 then -1 else 0;
def RSICalc19 = if RSI[18] > 70 then 1 else if RSI[18] < 30 then -1 else 0;
def RSICalc20 = if RSI[19] > 70 then 1 else if RSI[19] < 30 then -1 else 0;
def RSICalc21 = if RSI[20] > 70 then 1 else if RSI[20] < 30 then -1 else 0;
def RSICalc22 = if RSI[21] > 70 then 1 else if RSI[21] < 30 then -1 else 0;
def RSICalc23 = if RSI[22] > 70 then 1 else if RSI[22] < 30 then -1 else 0;
def RSICalc24 = if RSI[23] > 70 then 1 else if RSI[23] < 30 then -1 else 0;
def RSICalc25 = if RSI[24] > 70 then 1 else if RSI[24] < 30 then -1 else 0;
def RSICalc26 = if RSI[25] > 70 then 1 else if RSI[25] < 30 then -1 else 0;
def RSICalc27 = if RSI[26] > 70 then 1 else if RSI[26] < 30 then -1 else 0;
def RSICalc28 = if RSI[27] > 70 then 1 else if RSI[27] < 30 then -1 else 0;
def RSICalc29 = if RSI[28] > 70 then 1 else if RSI[28] < 30 then -1 else 0;
def RSICalc30 = if RSI[29] > 70 then 1 else if RSI[29] < 30 then -1 else 0;
def RSI30DayAvg = RSICalc1 + RSICalc2 + RSICalc3 + RSICalc4 + RSICalc5 + RSICalc6 + RSICalc7 + RSICalc8 + RSICalc9 + RSICalc10 + RSICalc11 + RSICalc12 + RSICalc13 + RSICalc14 + RSICalc15 + RSICalc16 + RSICalc17 + RSICalc18 + RSICalc19 + RSICalc20 + RSICalc21 + RSICalc22 + RSICalc23 + RSICalc24 + RSICalc25 + RSICalc26 + RSICalc27 + RSICalc28 + RSICalc29 + RSICalc30;
AddLabel(RSI30DayAvg >= 10 and RSI30DayAvg < 20, " RSI SELL: " + RSI30DayAvg + " ", Color.ORANGE);
AddLabel(RSI30DayAvg >= 20, " RSI SELL: " + RSI30DayAvg + " ", Color.RED);
AddLabel(RSI30DayAvg <= -10 and RSI30DayAvg > -20, " RSI BUY: " + RSI30DayAvg + " ", Color.LIME);
AddLabel(RSI30DayAvg <= -20, " RSI BUY: " + RSI30DayAvg + " ", Color.DARK_GREEN);
plot TrendReversal5 = 1 - (((RSI30DayAvg >= 10 and RSI30DayAvg < 15) and close < MAvgExp7) / 2) ;
TrendReversal5.SetDefaultColor(GetColor(0)); #magenta
plot TrendReversal5a = 1 - (((RSI30DayAvg >= 16 and RSI30DayAvg < 25) and close < MAvgExp7) / 1.3) ;
TrendReversal5a.SetDefaultColor(GetColor(0)); #magenta
plot TrendReversal5b = 1 - ((RSI30DayAvg >= 25 and close < MAvgExp7) / 1.05) ;
TrendReversal5b.SetDefaultColor(GetColor(0)); #magenta
plot TrendReversal6 = ((RSI30DayAvg <= -15 and close > MAvgExp7 ) * .3) ;
TrendReversal6.SetDefaultColor(GetColor(6)); #green
plot TrendReversal6a = (((RSI30DayAvg <= -20 and RSI30DayAvg > -30) and close > MAvgExp7) * .85) ;
TrendReversal6a.SetDefaultColor(GetColor(6)); #green
TrendReversal6a.SetLineWeight(3);
TrendReversal5b.SetLineWeight(3);
TrendReversal6.SetLineWeight(2);
TrendReversal5a.SetLineWeight(2);
#End Code