// © BonBo
//@version=5
indicator('BonBO Pro', overlay=true, max_labels_count=500)
candle_stability_index_param = [Link](0.5, 'Candle Stability Index', 0, 1,
step=0.1, group='Technical', tooltip='Candle Stability Index measures the ratio
between the body and the wicks of a candle. Higher - more stable.')
rsi_index_param = [Link](50, 'RSI Index', 0, 100, group='Technical',
tooltip='RSI Index measures how overbought/oversold is the market. Higher - more
overbought/oversold.')
candle_delta_length_param = [Link](5, 'Candle Delta Length', 3,
group='Technical', tooltip='Candle Delta Length measures the period over how many
candles the price increased/decreased. Higher - longer period.')
disable_repeating_signals_param = [Link](false, 'Disable Repeating Signals',
group='Technical', tooltip='Removes repeating signals. Useful for removing clusters
of signals and general clarity')
GREEN = [Link](29, 255, 40)
RED = [Link](255, 0, 0)
TRANSPARENT = [Link](0, 0, 0, 100)
label_size = [Link]('normal', 'Label Size', options=['huge', 'large',
'normal', 'small', 'tiny'], group='Cosmetic')
label_style = [Link]('text bubble', 'Label Style', ['text bubble',
'triangle', 'arrow'], group='Cosmetic')
buy_label_color = input(GREEN, 'BUY Label Color', inline='Highlight',
group='Cosmetic')
sell_label_color = input(RED, 'SELL Label Color', inline='Highlight',
group='Cosmetic')
label_text_color = input([Link], 'Label Text Color', inline='Highlight',
group='Cosmetic')
stable_candle = [Link](close - open) / [Link] > candle_stability_index_param
rsi = [Link](close, 14)
bullish_engulfing = close[1] < open[1] and close > open and close > open[1]
rsi_below = rsi < rsi_index_param
decrease_over = close < close[candle_delta_length_param]
bull = bullish_engulfing and stable_candle and rsi_below and decrease_over and
[Link]
bearish_engulfing = close[1] > open[1] and close < open and close < open[1]
rsi_above = rsi > 100 - rsi_index_param
increase_over = close > close[candle_delta_length_param]
bear = bearish_engulfing and stable_candle and rsi_above and increase_over and
[Link]
var last_signal = ''
if bull and (disable_repeating_signals_param ? (last_signal != 'buy' ? true : na) :
true)
if label_style == 'text bubble'
[Link](bull ? bar_index : na, low, 'BUY', color=buy_label_color,
style=label.style_label_up, textcolor=label_text_color, size=label_size)
else if label_style == 'triangle'
[Link](bull ? bar_index : na, low, 'BUY', yloc=[Link],
color=buy_label_color, style=label.style_triangleup, textcolor=TRANSPARENT,
size=label_size)
else if label_style == 'arrow'
[Link](bull ? bar_index : na, low, 'BUY', yloc=[Link],
color=buy_label_color, style=label.style_arrowup, textcolor=TRANSPARENT,
size=label_size)
last_signal := 'buy'
if bear and (disable_repeating_signals_param ? (last_signal != 'sell' ? true :
na) : true)
if label_style == 'text bubble'
[Link](bear ? bar_index : na, high, 'SELL', color=sell_label_color,
style=label.style_label_down, textcolor=label_text_color, size=label_size)
else if label_style == 'triangle'
[Link](bear ? bar_index : na, high, 'SELL', yloc=[Link],
color=sell_label_color, style=label.style_triangledown, textcolor=TRANSPARENT,
size=label_size)
else if label_style == 'arrow'
[Link](bear ? bar_index : na, high, 'SELL', yloc=[Link],
color=sell_label_color, style=label.style_arrowdown, textcolor=TRANSPARENT,
size=label_size)
last_signal := 'sell'
alertcondition(bull, 'BUY Signals', 'New signal: BUY')
alertcondition(bear, 'SELL Signals', 'New signal: SELL')