Tiredoflosing
Member
Hi, I was wondering if there is a way to get an alert when two separate indicators align, say on the same bar? One indicator is an upper study and one is lower.
The Criteria for an alert on SAME bar or within 1 bar ( see picture)
Up Alerts
WeakBBUp + Signal (wavetrend)
WeakRSIUp + Signal (wavetrend)
Down Alerts
WeakBBDown + Signal2_ (wavetrend)
WeakRSIDown + Signal2_ (wavetrend)
1st Script, WaveTrend
Second Script, Hot%
The Criteria for an alert on SAME bar or within 1 bar ( see picture)
Up Alerts
WeakBBUp + Signal (wavetrend)
WeakRSIUp + Signal (wavetrend)
Down Alerts
WeakBBDown + Signal2_ (wavetrend)
WeakRSIDown + Signal2_ (wavetrend)
1st Script, WaveTrend
Code:
#Wave Trend Indicator
declare lower;
input Channel_Length = 10;
input Average_Length = 15;
input over_bought_1 = 60;
input over_bought_2 = 53;
input over_sold_1 = -60;
input over_sold_2 = -53;
input show_bubbles = yes;
input show_sec_bbls = no;
input show_alerts = no;
def ap = hlc3;
def esa = ExpAverage(ap, Channel_Length);
def d = ExpAverage(AbsValue(ap - esa), Channel_Length);
def ci = (ap - esa) / (0.015 * d);
def tci = ExpAverage(ci, Average_Length);
def wt1 = tci;
def wt2 = SimpleMovingAvg(wt1, 4);
#def zero = 0;
plot wt1_1 = wt1;
#wt1_1.SetDefaultColor(Color.WHITE);
plot wt2_1 = wt2;
#wt2_1.SetDefaultColor(Color.CYAN);
plot wt3 = (wt1 - wt2);
wt3.SetDefaultColor(Color.BLUE);
wt1_1.AssignValueColor(if wt1_1 > wt2_1
then Color.GREEN
else Color.RED);
wt2_1.AssignValueColor(if wt1_1 > wt2_1
then Color.GREEN
else Color.RED);
AddCloud(wt1_1, wt2_1, Color.GREEN, Color.RED);
wt3.SetDefaultColor(GetColor(5));
wt3.SetPaintingStrategy(PaintingStrategy.HISTOGRAM);
wt3.SetLineWeight(3);
wt3.DefineColor("Positive and Up", Color.GREEN);
wt3.DefineColor("Positive and Down", Color.DARK_GREEN);
wt3.DefineColor("Negative and Down", Color.RED);
wt3.DefineColor("Negative and Up", Color.DARK_RED);
wt3.AssignValueColor(if wt3 >= 0 then if wt3 > wt3[1] then wt3.Color("Positive and Up") else wt3.Color("Positive and Down") else if wt3 < wt3[1] then wt3.Color("Negative and Down") else wt3.Color("Negative and Up"));
def signal1 = wt1 crosses above wt2 and wt1 < over_sold_2;
plot Signal = if signal1 then (signal1 * over_sold_1) else Double.NaN;
Signal.SetDefaultColor(Color.WHITE);
Signal.SetPaintingStrategy(PaintingStrategy.ARROW_UP);
Signal.SetLineWeight(2);
Signal.HideTitle();
def signal2 = wt1 crosses below wt2 and wt1 > over_bought_2;
plot Signal2_ = if signal2 then (signal2 * over_bought_1) else Double.NaN;
Signal2_.SetDefaultColor(Color.WHITE);
Signal2_.SetPaintingStrategy(PaintingStrategy.ARROW_DOWN);
Signal2_.SetLineWeight(2);
Signal2_.HideTitle();
plot zero = 0;
zero.SetDefaultColor( Color.YELLOW);
plot upmid = 30;
upmid.SetDefaultColor( Color.dark_ORANGE);
plot lowmid = -30;
lowmid.SetDefaultColor( Color.LIGHT_GREEN);
plot obLevel1 = over_bought_1;
obLevel1.SetDefaultColor(Color.RED);
plot osLevel1 = over_sold_1;
osLevel1.SetDefaultColor(Color.GREEN);
plot obLevel2 = over_bought_2;
obLevel2.SetDefaultColor(Color.RED);
obLevel2.SetStyle(Curve.SHORT_DASH);
plot osLevel2 = over_sold_2;
osLevel2.SetDefaultColor(Color.GREEN);
osLevel2.SetStyle(Curve.SHORT_DASH);
Second Script, Hot%
Code:
# Idea by Adeel & Boar
# Cleaned by Chewie
declare upper;
input length = 14;
input StrongSignal = yes;
input WeakSignal = yes;
input StrongSensitivity = 1; # lower number gets fewer results.
input WeakSensitivityBUY = -30; # closer to 0 gets more results.
input WeakSensitivitySELL = 30; # closer to 0 gets more results.
def price = close;
def averageType = AverageType.WILDERS;
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)) * -1;
def MiddleLine = 0;
def TakeProfit = 60;
def BUY = -60;
def vol = imp_volatility();
input TimePeriod = 252;
def data = if !IsNaN(vol) then vol else vol[-1];
def hi = Highest(data, TimePeriod);
def lo = Lowest(data, TimePeriod);
def Percentile = ((data - lo) / (hi - lo) * 100) * -1;
def lowend = Percentile < 25;
def highend = Percentile > 50;
def HotZone = Percentile - RSI;
def HotZoneHigh = Hotzone > WeakSensitivitySELL and Hotzone < 59;
def HotZoneLow = Hotzone < WeakSensitivityBUY and Hotzone > -59;
### Caution Relationship (RSI and IV) ###
def CAUTION = If(HotZone < -45 and HotZone > -60, 1, Double.NaN);
def CAUTION_S = If(HotZone > 45 and HotZone < 60, 1, Double.NaN);
### HOT Relationship (RSI and IV) ###
def RSIIV2 = if HotZone <= -60 then 1 else 0;
def HOT = if RSIIV2 then 0 else Double.NaN;
def RSIIV2_S = if HotZone >= 60 then 1 else 0;
def HOT_S = if RSIIV2_S then 0 else Double.NaN;
#Hot & Caution Labels
AddLabel(Hot, "HOT - POSSIBLE BUY", Color.GREEN);
AddLabel(Caution, "CAUTION - BUY INCOMING", Color.Yellow);
AddLabel(Hot_S, "HOT - POSSIBLE SELL", Color.RED);
AddLabel(Caution_S, "CAUTION - SELL INCOMING", Color.Yellow);
#HotZone Arrows
def UpSignal = HotZone crosses above BUY;
def DownSignal = HotZone crosses below TakeProfit;
#PERCENT BB
input averageType_BB = AverageType.Simple;
input length_BB = 20;
input Num_Dev_Dn = -2.0;
input Num_Dev_up = 2.0;
def displace = 0;
def upperBand = BollingerBands(price, displace, length_BB, Num_Dev_Dn, Num_Dev_up, averageType_BB).UpperBand;
def lowerBand = BollingerBands(price, displace, length_BB, Num_Dev_Dn, Num_Dev_up, averageType_BB).LowerBand;
def PercentB = (price - lowerBand) / (upperBand - lowerBand) * 100;
def ZeroLine = 0.75;
def UnitLine = 99;
def UpSignal_BB = PercentB crosses above ZeroLine within Strongsensitivity bars;
def DownSignal_BB = PercentB crosses below UnitLine within Strongsensitivity bars;
#Signals
plot StrongUp = if StrongSignal and UpSignal and UpSignal_BB then 1 else Double.Nan;
plot StrongDn = if StrongSignal and DownSignal and DownSignal_BB then 1 else Double.Nan;
plot WeakBBUp = if WeakSignal and PercentB crosses above ZeroLine and HotzoneLow then 1 else Double.Nan;
plot WeakBBDown = if WeakSignal and PercentB crosses below UnitLine and HotzoneHigh then 1 else Double.Nan;
plot WeakRSIUp = Upsignal;
plot WeakRSIDown = Downsignal;
WeakBBUp.SetDefaultColor(Color.light_green);
WeakBBUp.SetPaintingStrategy(PaintingStrategy.BOOLEAN_WEDGE_DOWN);
WeakBBUp.SetLineWeight(3);
WeakBBDown.SetDefaultColor(Color.magenta);
WeakBBDown.SetPaintingStrategy(PaintingStrategy.BOOLEAN_WEDGE_UP);
WeakBBDown.SetLineWeight(3);
WeakRSIUp.SetDefaultColor(Color.lime);
WeakRSIUp.SetPaintingStrategy(PaintingStrategy.BOOLEAN_WEDGE_DOWN);
WeakRSIUp.SetLineWeight(3);
WeakRSIDown.SetDefaultColor(Color.pink);
WeakRSIDown.SetPaintingStrategy(PaintingStrategy.BOOLEAN_WEDGE_UP);
WeakRSIDown.SetLineWeight(3);
StrongUp.SetDefaultColor(Color.light_gray);
StrongUp.SetPaintingStrategy(PaintingStrategy.BOOLEAN_ARROW_UP);
StrongUp.SetLineWeight(4);
StrongDn.SetDefaultColor(Color.light_gray);
StrongDn.SetPaintingStrategy(PaintingStrategy.BOOLEAN_ARROW_DOWN);
StrongDn.SetLineWeight(4);
# Alerts
Alert(Strongup, " ", Alert.Bar, Sound.Chimes);
Alert(Strongdn, " ", Alert.Bar, Sound.Bell);
Last edited: