ENVELOPE RSI - Buy Sell Signals
// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © Saleh_Toodarvari

//@version=5
indicator(title="ENVELOPE - RSI - Buy Sell Signals", shorttitle="ENVELOPE - RSI", overlay=true)
//_________________Envelope_________________
len = input.int(8, title="Envelope Length", minval=1, group="Envelope Settings")
percent = input(0.22,title="Envelope Percent", group="Envelope Settings")
src = input(hl2, title="Envelope Source", group="Envelope Settings")
exponential = input(false)
basis = exponential ? ta.ema(src, len) : ta.sma(src, len)
k = percent/100.0
upper = basis * (1 + k)
lower = basis * (1 - k)
plot(basis, "Basis", color=#ED7300)
u = plot(upper, "Upper", color=#FF2424)
l = plot(lower, "Lower", color=#24FF24)
fill(u, l, color=color.rgb(33, 150, 243, 95), title="Background")
cross_buy=ta.crossover(close,lower)
cross_sell=ta.crossunder(close,upper) 
// _________________RSI_________________
rsiLengthInput = input.int(8, minval=1, title="RSI Length", group="RSI Settings")
rsiSourceInput = input.source(hl2, "RSI Source", group="RSI Settings")
up = ta.rma(math.max(ta.change(rsiSourceInput), 0), rsiLengthInput)
down = ta.rma(-math.min(ta.change(rsiSourceInput), 0), rsiLengthInput)
rsi = down == 0 ? 100 : up == 0 ? 0 : 100 - (100 / (1 + up / down))
Overbought_RSI = input.price(title="RSI OverBought Limit(Recommended: 70-85)", defval=80, group="RSI Settings")
Oversold_RSI = input.price(title="RSI OverSold Limit(Recommended: 20-30)", defval=25, group="RSI Settings")
condition_buy= rsi<Oversold_RSI and (ta.cross(low,lower) or ta.cross(close,lower) or ta.cross(high,lower) or ta.cross(open,lower))
condition_sell= rsi>Overbought_RSI and (ta.cross(low,upper) or ta.cross(close,upper) or ta.cross(high,upper) or ta.cross(open,upper))
plotshape(cross_sell ? condition_sell:na, title="Sell Label", text="Sell", location=location.abovebar, style=shape.labeldown, size=size.tiny, color=color.red, textcolor=color.white)
sell_sig=plot(cross_sell ? high:na,color=color.new(#000000,100))
plotshape(cross_buy ? condition_buy:na, title="Buy Label", text="Buy", location=location.belowbar, style=shape.labelup, size=size.tiny, color=color.green, textcolor=color.white)
buy_sig=plot(cross_buy ? ohlc4:na,color=color.new(#000000,100))
tpColor = if(cross_sell[1] or cross_sell[2] or cross_buy[1] or cross_buy[2])
    color.new(#1DBC60, 30)
else
    color.new(#000000,100)
slColor = if(cross_sell[1] or cross_sell[2] or cross_buy[1] or cross_buy[2])
    color.new(#F74A58, 30)
else
    color.new(#000000,100)
//_________________TP&SL_________________
TP_Percent = input.float(0.15, "TP %")
SL_Percent = input.float(0.15, "SL %")
tp= if condition_sell
    ohlc4-ohlc4*(TP_Percent/100)
else if condition_buy
    ohlc4+ohlc4*(TP_Percent/100)
sl= if condition_sell
    ohlc4+ohlc4*(SL_Percent/100)
else if condition_buy
    ohlc4-ohlc4*(SL_Percent/100)
tp_sig=plot(tp,color=color.new(#000000,100),title="tp")
sl_sig=plot(sl,color=color.new(#000000,100),title="tp")
lower_plot=plot(lower,color=color.new(#000000,100))
fill(sell_sig,tp_sig, color=tpColor)
fill(buy_sig,tp_sig, color=tpColor)
fill(buy_sig,sl_sig, color=slColor)
fill(sell_sig,sl_sig, color=slColor)
//_________________alerts_________________
alertConditionBuy=cross_buy and condition_buy
alertConditionSell=cross_sell and condition_sell
alertcondition(alertConditionBuy, title='Envelope RSI Buy signal!', message='Buy signal')
alertcondition(alertConditionSell, title='Envelope RSI Sell signal!', message='Sell signal')