LBR-Volatility Breakout Bars
// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
//@version=5
//
//Original code @author LazyBear converted from version three
//
indicator('LBR-Volatility Breakout Bars', 
  overlay=true, 
  shorttitle='LBR-BARS')
//
// ————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————
// —————————————————————————————————  Inputs    ——————————————————————————————————————————————————————————————————————————— 
// ————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————
//
_CB = input(false,'═══════  Color Bars  ══════════════════')
_colBars    = input(true,                   title='Color LBR Bars?')
_colBarUL   = input(true,                   title='Color LBR bars above/below Kelts?')
_colorall    = input(false,                  title='Color non LBR Bars?')

_VL = input(false,'═══════  Volatility Lines  ═══════════════')
_shoVL      = input(false,                  title='Show Volatility Lines?')
_lenHL      = input(20,                     title='HL Length')
_lenATR     = input(50,                     title='ATR Length')
_ATRmult    = input.float(2.5, minval=.75,  title='ATR Multiplier')

_KA = input(false,'═══════  Keltner Area  ════════════════')
_shoKelt    = input(false,                  title='Show Kelts Area')
_lenKelt    = input.int(21,    minval=1,    title='Kelt Length')
_multKelt   = input(2.5,                    title='Kelt Multiplier')
_useTR      = input(true,                   title='Use True Range for Kelts')
//
// ————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————
// —————————————————————————————————  Calcs     ——————————————————————————————————————————————————————————————————————————— 
// ————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————
//
calc_stdev(src, _useTR, len, mult) =>
    mid          = ta.ema(src, len)
    range_1        = _useTR ? ta.tr : high - low
    rangemid     = ta.ema(range_1, len)
    upper        = mid + rangemid * _ATRmult
    lower        = mid - rangemid * _ATRmult
    [upper, mid, lower]

[u, b, l] = calc_stdev(close, _useTR, _lenKelt, _multKelt)
//
// ————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————
// —————————————————————————————————  Keltner   ——————————————————————————————————————————————————————————————————————————— 
// ————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————
//
_8xa = input(false,'═══════  Keltner Colors  ═══════════════')
color _col1 = input.color(color.rgb(125, 126, 129, 80),  'Kelts Bands')
color _col2 = input.color(color.rgb(246, 132, 1),        'Kelt Mid')

_upperKelt  = plot(_shoKelt ? u : na, color=_col1, linewidth=1,                              title='KC Upper')
_midKelt = plot(_shoKelt ? b : na, style=plot.style_circles, color=_col2, linewidth=1,    title='KC Basis')
_lowerKelt  = plot(_shoKelt ? l : na, color=_col1, linewidth=1,                              title='KC Lower')

fill(_upperKelt, _lowerKelt, _col1)

_keltCol     = _colBarUL ? close >= u or close <= l : false
_atr         = _ATRmult  * ta.sma(ta.stdev(close, _lenATR), _lenATR)
//
// ————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————
// —————————————————————————————————  Volatility Lines   ——————————————————————————————————————————————————————————————————
// ————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————
//
_volBandLo      = ta.lowest(low,   _lenHL) + _atr
_volBandHi      = ta.highest(high, _lenHL) - _atr

_UpperVol     = close > _volBandLo  and close > _volBandHi
_LowerVol     = close < _volBandLo  and close < _volBandHi

_8xxx = input(false,'═══════  Volatility Colors  ══════════════')
color _col3 = input.color(color.rgb(157, 169, 156),                           title = 'Upper Vol')
color _col4 = input.color(color.rgb(157, 169, 156),                           title = 'Lower Vol')

_upVolBand      = plot(_shoVL  ? _volBandHi  : na, style=plot.style_line, linewidth=1, color=_col3,  title='Upper Vol')
_loVolBand      = plot(_shoVL  ? _volBandLo  : na, style=plot.style_line, linewidth=1, color=_col4,  title='Lower Vol')
//
// ————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————
// —————————————————————————————————  Bar Colors   ————————————————————————————————————————————————————————————————————————
// ————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————
//
_bars = input(false,'═══════  Bar Colors  ══════════════════')
color _col5 = input.color(color.rgb(130, 133, 130),     'Bar Color No Mans Land')                  //bar color #1
color _col6 = input.color(color.rgb(9, 249, 9),         'Bar Color (Above  Volatility Lines)')    //bar color #2
color _col7 = input.color(color.rgb(231, 12, 12),       'Bar Color (Below  Volatility Lines)')   //bar color #3
color _col8 = input.color(color.rgb(234, 168, 3),       "Bar Color (Inside Volatility Lines) ") //bar color #4
color _col9 = input.color(color.rgb(17, 0, 255),        'N/A')                                 //bar Color #5

bc     =  _colBars ? 
  _keltCol    ? _col5 :  
  _UpperVol   ? _col6 : 
  _LowerVol   ? _col7 : 
  _colorall   ? _col8 : 
  na : not(_UpperVol or _LowerVol) and _colorall  ? _col9 : na

barcolor(bc)

