Indicator · Pine Script v5 · On the chart

Hooplah High Low + Table

by g-moe· code credited to goodgains

Calculates and plots key session reference levels directly on the price chart, specifically pre-market high and low alongside prior day high and low.

View on GitHub

GitHub stars3on the repository
Pine versionv5runs as is
Lines of code469
Settings40inputs
LicenceNone statedfile: MPL-2.0
Last update5 months ago27 May 2026

Add It to Your TradingView Chart

  1. 1Copy the scriptPress Copy script above, or the copy button on the code below.
  2. 2Open the Pine EditorOpen a TradingView chart and choose Pine Editor at the bottom of the screen.
  3. 3Paste over the templateCreate a new indicator, select all of the template text and paste. Press Save and give it a name.
  4. 4Add it to the chartPress Add to chart, then adjust the settings with the gear icon next to its name.

Source Code

469 lines of Pine Script v5 from Tradingview/hooplah-high-low-table.pine, published under MPL-2.0 (file header). Keep the author's credit and licence lines when you reuse it.

hooplah-high-low-table.pine
// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © goodgains


//@version=5
indicator('Hooplah High Low + table', overlay=true)

// @keywords: premarket-high-low, prior-day-high-low, horizontal-price-lines, pm-cross-alerts, calls-puts-labels, volume-status-table, dtek-supertrend-cci, qqe-momentum-row, sma-trend-filter, aroon-trend, volume-pressure-dmi, intraday-level-modes, line-extend-options, price-axis-plots, session-tracking, level-merge-modes, alert-suppression-window, bullish-bearish-table, multi-row-dashboard, timeframe-gating

levelSettingOption = input.string('Individual level for each day', title='Display', options=['Individual level for each day', 'Most recent level on most recent day', 'Most recent level across the chart'], group='Price level')
levelSetting = levelSettingOption == 'Most recent level on most recent day' ? 'b' : levelSettingOption == 'Most recent level across the chart' ? 'c' : 'a'

show_labels     = input.bool(true, title = 'Show Labels for Lines', group='Price level', inline='Labels')
label_spacing   = input.int(75, title = '  -  Spacing', group='Price level', inline='Labels')

pmHighLevel     = input.bool(true, title='Pre-market high', group='Price level', inline='pmHigh')
pmLowLevel      = input.bool(true, title='Pre-market low', group='Price level', inline='pmLow')
priorHighLevel  = input.bool(true, title='Prior day high', group='Price level', inline='priorHigh')
priorLowLevel   = input.bool(true, title='Prior day low', group='Price level', inline='priorLow')

pmHighPrice     = input.bool(true, title='Pre-market high', group='Price axis')
pmLowPrice      = input.bool(true, title='Pre-market low', group='Price axis')
priorHighPrice  = input.bool(true, title='Prior day high', group='Price axis')
priorLowPrice   = input.bool(true, title='Prior day low', group='Price axis')

secondBool  = input.bool(true, title='Seconds', group='Price axis visibility', inline='second')
minuteBool  = input.bool(true, title='Minutes', group='Price axis visibility', inline='minute')
hourBool    = input.bool(true, title='Hours', group='Price axis visibility', inline='hour')
dayBool     = input.bool(false, title='Days', group='Price axis visibility', inline='day')
weekBool    = input.bool(false, title='Weeks', group='Price axis visibility', inline='week')
monthBool   = input.bool(false, title='Months', group='Price axis visibility', inline='month')

noPeriodBool = input.bool(false, title='No alert period', group='No alert period', inline='period', tooltip='Time period where alerts will not be triggered')
noPeriod = input.session('0930-0935', title='', group='No alert period', inline='period')
t = time(timeframe.period, noPeriod)
alertbool = not (noPeriodBool and t)

secondMin   = input.int(1, '', 1, 59, group='Price axis visibility', inline='second')
secondMax   = input.int(59, '-', 1, 59, group='Price axis visibility', inline='second')
minuteMin   = input.int(1, '', 1, 59, group='Price axis visibility', inline='minute')
minuteMax   = input.int(59, '-', 1, 59, group='Price axis visibility', inline='minute')
hourMin     = input.int(1, '', 1, 24, group='Price axis visibility', inline='hour')
hourMax     = input.int(24, '-', 1, 24, group='Price axis visibility', inline='hour')
dayMin      = input.int(1, '', 1, 366, group='Price axis visibility', inline='day')
dayMax      = input.int(366, '-', 1, 366, group='Price axis visibility', inline='day')
weekMin     = input.int(1, '', 1, 52, group='Price axis visibility', inline='week')
weekMax     = input.int(52, '-', 1, 52, group='Price axis visibility', inline='week')
monthMin    = input.int(1, '', 1, 12, group='Price axis visibility', inline='month')
monthMax    = input.int(12, '-', 1, 12, group='Price axis visibility', inline='month')

timeframeNumberstr = str.match(timeframe.period, '[0-9]*')
timeframeNumber = str.tonumber(timeframeNumberstr)
timeframeLetter = str.match(timeframe.period, '[A-Z]')

bool timeframePlot = false

if secondBool and timeframeLetter=='S' and secondMin<=timeframeNumber and secondMax>=timeframeNumber
    timeframePlot := true
if minuteBool and timeframeLetter=='' and minuteMin<=timeframeNumber and minuteMax>=timeframeNumber
    timeframePlot := true
if hourBool and timeframeLetter=='' and hourMin*60<=timeframeNumber and hourMax*60>=timeframeNumber
    timeframePlot := true
if dayBool and timeframeLetter=='D' and dayMin<=timeframeNumber and dayMax>=timeframeNumber
    timeframePlot := true
if weekBool and timeframeLetter=='W' and weekMin<=timeframeNumber and weekMax>=timeframeNumber
    timeframePlot := true
if monthBool and timeframeLetter=='M' and monthMin<=timeframeNumber and monthMax>=timeframeNumber
    timeframePlot := true

pmHighColour    = input(title='', defval=#81c583, group='Price level', inline='pmHigh')
pmLowColour     = input(title='', defval=#ee9899, group='Price level', inline='pmLow')
priorHighColour = input(title='', defval=#00ff00, group='Price level', inline='priorHigh')
priorLowColour  = input(title='', defval=#ff80ff, group='Price level', inline='priorLow')

pmHighLineWidth     = input(1, 'Thickness', group='Price level', inline='pmHigh')
pmLowLineWidth      = input(1, 'Thickness', group='Price level', inline='pmLow')
priorHighLineWidth  = input(1, 'Thickness', group='Price level', inline='priorHigh')
priorLowLineWidth   = input(1, 'Thickness', group='Price level', inline='priorLow')

pmHighStyleOption       = input.string('solid (─)', title='', options=['solid (─)', 'dotted (┈)', 'dashed (╌)', 'arrow left (←)', 'arrow right (→)', 'arrows both (↔)'], group='Price level', inline='pmHigh')
pmLowStyleOption        = input.string('solid (─)', title='', options=['solid (─)', 'dotted (┈)', 'dashed (╌)', 'arrow left (←)', 'arrow right (→)', 'arrows both (↔)'], group='Price level', inline='pmLow')
priorHighStyleOption    = input.string('solid (─)', title='', options=['solid (─)', 'dotted (┈)', 'dashed (╌)', 'arrow left (←)', 'arrow right (→)', 'arrows both (↔)'], group='Price level', inline='priorHigh')
priorLowStyleOption     = input.string('solid (─)', title='', options=['solid (─)', 'dotted (┈)', 'dashed (╌)', 'arrow left (←)', 'arrow right (→)', 'arrows both (↔)'], group='Price level', inline='priorLow')

pmHighLineStyle = pmHighStyleOption == 'dotted (┈)' ? line.style_dotted : pmHighStyleOption == 'dashed (╌)' ? line.style_dashed : pmHighStyleOption == 'arrow left (←)' ? line.style_arrow_left :
     pmHighStyleOption == 'arrow right (→)' ? line.style_arrow_right : pmHighStyleOption == 'arrows both (↔)' ? line.style_arrow_both : line.style_solid
pmLowLineStyle = pmLowStyleOption == 'dotted (┈)' ? line.style_dotted : pmLowStyleOption == 'dashed (╌)' ? line.style_dashed : pmLowStyleOption == 'arrow left (←)' ? line.style_arrow_left :
     pmLowStyleOption == 'arrow right (→)' ? line.style_arrow_right : pmLowStyleOption == 'arrows both (↔)' ? line.style_arrow_both : line.style_solid
priorHighLineStyle = priorHighStyleOption == 'dotted (┈)' ? line.style_dotted : priorHighStyleOption == 'dashed (╌)' ? line.style_dashed : priorHighStyleOption == 'arrow left (←)' ? line.style_arrow_left :
     priorHighStyleOption == 'arrow right (→)' ? line.style_arrow_right : priorHighStyleOption == 'arrows both (↔)' ? line.style_arrow_both : line.style_solid
priorLowLineStyle = priorLowStyleOption == 'dotted (┈)' ? line.style_dotted : priorLowStyleOption == 'dashed (╌)' ? line.style_dashed : priorLowStyleOption == 'arrow left (←)' ? line.style_arrow_left :
     priorLowStyleOption == 'arrow right (→)' ? line.style_arrow_right : priorLowStyleOption == 'arrows both (↔)' ? line.style_arrow_both : line.style_solid

var line pmHighLine = na
var line pmLowLine = na
var line priorHighLine = na
var line priorLowLine = na
var float pmHigh = na
var float pmLow = na
var float priorHigh = na
var float priorLow = na
var float currentHigh = na
var float currentLow = na

if session.isfirstbar and session.ispremarket
    pmHigh := high
    pmLow := low

if session.isfirstbar_regular
    currentHigh := high
    currentLow := low

if high > pmHigh and session.ispremarket
    pmHigh := high
    line.set_y1(pmHighLine, pmHigh)
    line.set_y2(pmHighLine, pmHigh)

if low < pmLow and session.ispremarket
    pmLow := low
    line.set_y1(pmLowLine, pmLow)
    line.set_y2(pmLowLine, pmLow)

if high > currentHigh and session.ismarket
    currentHigh := high

if low < currentLow and session.ismarket
    currentLow := low

if session.isfirstbar
    line.set_extend(pmHighLine, extend.none)
    line.set_extend(pmLowLine, extend.none)
    line.set_extend(priorHighLine, extend.none)
    line.set_extend(priorLowLine, extend.none)
    priorHigh := currentHigh[1]
    priorLow := currentLow[1]
    if levelSetting!='a'
        line.delete(pmHighLine)
        line.delete(pmLowLine)
        line.delete(priorHighLine)
        line.delete(priorLowLine)
    if timeframe.isintraday and pmHighLevel
        pmHighLine := line.new(bar_index, pmHigh, bar_index, pmHigh, color=pmHighColour, style=pmHighLineStyle, width=pmHighLineWidth, extend=levelSetting=='c' ? extend.both : extend.right)
    if timeframe.isintraday and pmLowLevel
        pmLowLine := line.new(bar_index, pmLow, bar_index, pmLow, color=pmLowColour, style=pmLowLineStyle, width=pmLowLineWidth, extend=levelSetting=='c' ? extend.both : extend.right)
    if timeframe.isintraday and priorHighLevel
        priorHighLine := line.new(bar_index, priorHigh, bar_index, priorHigh, color=priorHighColour, style=priorHighLineStyle, width=priorHighLineWidth, extend=levelSetting=='c' ? extend.both : extend.right)
    if timeframe.isintraday and priorLowLevel
        priorLowLine := line.new(bar_index, priorLow, bar_index, priorLow, color=priorLowColour, style=priorLowLineStyle, width=priorLowLineWidth, extend=levelSetting=='c' ? extend.both : extend.right)
    
line.set_x2(pmHighLine, bar_index)
line.set_x2(pmLowLine, bar_index)
line.set_x2(priorHighLine, bar_index)
line.set_x2(priorLowLine, bar_index)

plot(timeframe.isintraday and pmHighPrice and timeframePlot ? pmHigh : na, color=pmHighColour, editable=false, display=display.price_scale)
plot(timeframe.isintraday and pmLowPrice and timeframePlot? pmLow : na, color=pmLowColour, editable=false, display=display.price_scale)
plot(timeframe.isintraday and priorHighPrice and timeframePlot ? priorHigh : na, color=priorHighColour, editable=false, display=display.price_scale)
plot(timeframe.isintraday and priorLowPrice and timeframePlot ? priorLow : na, color=priorLowColour, editable=false, display=display.price_scale)

alertcondition(alertbool and session.ismarket and close>=pmHigh and close[1]<pmHigh, title='Cross abv pm high (do not use Once Per Bar Close)', message='Price crossed above pre-market high!')
alertcondition(alertbool and session.ismarket and close<=pmLow and close[1]>pmLow, title='Cross blw pm low (do not use Once Per Bar Close)', message='Price crossed below pre-market low!')

alertcondition(alertbool and session.ismarket and close>=pmHigh and open<pmHigh, title='Close abv pm high (use Once Per Bar Close)', message='Price closed above pre-market high!')
alertcondition(alertbool and session.ismarket and close<=pmLow and open>pmLow, title='Close blw pm low (use Once Per Bar Close)', message='Price closed below pre-market low!')



// add label
var label pmh_label = na
var label pml_label = na

if barstate.islast
    if na(pmh_label[1])
        pmh_label := label.new(bar_index + label_spacing, pmHigh, xloc = xloc.bar_index, yloc = yloc.price, color = pmHighColour, style = label.style_none,
         text = 'CALLS ABOVE ' + str.tostring(pmHigh), textcolor = chart.fg_color)

    if na(pml_label[1])
        pml_label := label.new(bar_index + label_spacing, pmLow, xloc = xloc.bar_index, yloc = yloc.price, color = pmLowColour, style = label.style_none,
         text = 'PUTS BELOW ' + str.tostring(pmLow), textcolor = chart.fg_color)

    else
        label.set_xy(pmh_label, bar_index + label_spacing, pmHigh)
        label.set_xy(pml_label, bar_index + label_spacing, pmLow)

        label.set_text(pmh_label, 'CALLS ABOVE ' + str.tostring(pmHigh))
        label.set_text(pml_label, 'PUTS BELOW ' + str.tostring(pmLow))




// table
table_postion = input.string('Bottom', title = 'Position',
 options = ['Top', 'Middle', 'Bottom'], group = 'Table Settings')
table_pos = table_postion == 'Bottom' ? position.bottom_right : table_postion == 'Middle' ? position.middle_right : position.top_right
table_bull = input.color(color.green, title = 'Table Bull', group = 'Table Settings')
table_bear = input.color(color.red, title = 'Table Bear', group = 'Table Settings')
table_neut = input.color(color.silver, title = 'Table Bear', group = 'Table Settings')
table_head = input.color(color.rgb(71, 76, 90), title = ' Header')
table_bg   = input.color(color.black, title = 'Background')
table_text = input.color(color.white, title = 'Text')
var table = table.new(position = table_pos, columns = 2, rows = 7, bgcolor = table_bg, border_width = 1)



// row 1 volume
volume_period   = 20
volume_factor   = 1.25
volume_up       = close > open
volume_down     = open > close
volume_pesado   = volume>(ta.ema(volume,volume_period)*volume_factor)
volume_bg       = volume_pesado and volume_up ? table_bull
 : volume_pesado and volume_down ? table_bear 
 : volume_up ? table_neut
 : table_neut
volume_text    = volume_pesado and volume_up ? 'Bullish'
 : volume_pesado and volume_down ? "Bearish"
 : volume_up ? "Neutral"
 : "Neutral"



// row 2 dtek
getMA(src, len, type) =>
    ma_value = type == 'SMA' ? ta.sma(src, len) : type == 'WMA' ? ta.wma(src, len) : type == 'VWMA' ? ta.vwma(src, len) : type == 'EMA' ? ta.ema(src, len) : type == 'HMA' ? ta.hma(src, len) : ta.sma(src, len)
    ma_value

ST_Atr_Mult = 1.0
ST_Length = 4
ST_AvgType = 'HMA'

ATR = getMA( ta.tr(false), ST_Length, ST_AvgType )
UP = hl2 + (ST_Atr_Mult* ATR) 
DN = hl2 + (-ST_Atr_Mult * ATR) 
var float ST = na
ST := close < ST[1] ? UP : DN 
SuperTrend = ST 

lengthCCI = 50
lengthATR = 21
AtrFactor = 1.0

ATRcci = ta.sma( ta.tr(false), lengthATR) * AtrFactor
price = close + low + high
pricedata = hl2
CCI = (price - ta.sma(price, lengthCCI)) / (0.015 * ta.dev(price, lengthCCI))

var float MT1 = 0
MT1 := CCI > 0 ? math.max(nz(MT1[1],0), pricedata - ATRcci) : math.min(nz(MT1[1],0), pricedata + ATRcci)
CCI_ATR_TREND = MT1

green_candles =  close > MT1 and close > ST
red_candles   =  close < MT1 and close < ST

dtek_bg       = green_candles ? table_bull : red_candles ? table_bear : table_neut
dtek_text     = green_candles ? 'Bullish' : red_candles ? 'Bearish' : 'Neutral'
// barcolor(green_candles ? color.green : red_candles ? color.red : color.gray)



// row 3 pre market
pm_bg         = close > pmHigh ? table_bull : close < pmLow ? table_bear : table_neut
pm_text       = close > pmHigh ? 'Bullish' : close < pmLow ? 'Bearish' : 'Neutral'




// row 4 Trend BG
UseMATrendFilter = true
MAType = 'SMA'
MASource = close
MATrendPeriod = 200
UseMASlopeTrendFilter = true
SMATrendLevel = 5
UseAroonTrendFilter = false
AroonTFLen = 50
AroonTFLevel = 50.0


// SMA Trend Function
MATrend(MAType, Source, MALength, UseSlope, Percentile) =>
    MAValue = MAType == "SMA" ? ta.sma(Source, MALength) : MAType == "EMA" ? ta.ema(Source, MALength) : MAType == "VWMA" ? ta.vwma(Source, MALength) : MAType == "RMA" ? ta.rma(Source, MALength) : MAType == "Hull" ? ta.wma(2*ta.wma(Source, MALength/2)-ta.wma(Source, MALength), math.floor(math.sqrt(MALength))) :na
    
    MASlope = ta.change(MAValue)
    MAPercentRankOK = ta.percentrank(math.abs(MASlope), 200) > Percentile

    MA_Uptrend = UseSlope ? MAPercentRankOK and MASlope > 0 : close > MAValue
    MA_Downtrend = UseSlope ? MAPercentRankOK and MASlope < 0 : close < MAValue

    if MA_Uptrend and MA_Downtrend
        MA_Uptrend := false
        MA_Downtrend := false
        MA_Downtrend
    [MA_Uptrend, MA_Downtrend,MAValue]

[MAUptrend, MADowntrend,MAValue] = MATrend(MAType,MASource,MATrendPeriod, UseMASlopeTrendFilter, SMATrendLevel)

// Aroon Trend Function
AroonTrend(AroonLength, AroonTrendLevel) =>
    upper = 100 * (ta.highestbars(high, AroonLength + 1) + AroonLength) / AroonLength
    lower = 100 * (ta.lowestbars(low, AroonLength + 1) + AroonLength) / AroonLength

    Aroon_Uptrend = upper >= AroonTrendLevel
    Aroon_Downtrend = lower >= AroonTrendLevel

    if Aroon_Uptrend and Aroon_Downtrend
        Aroon_Uptrend := false
        Aroon_Downtrend := false
        Aroon_Downtrend
    [Aroon_Uptrend, Aroon_Downtrend]

[AroonUptrend, AroonDowntrend] = AroonTrend(AroonTFLen, AroonTFLevel)

// Define Trend
Uptrend = UseMATrendFilter and UseAroonTrendFilter ? AroonUptrend and MAUptrend : (AroonUptrend or not UseAroonTrendFilter) and (MAUptrend or not UseMATrendFilter)
Downtrend = UseMATrendFilter and UseAroonTrendFilter ? AroonDowntrend and MADowntrend : (AroonDowntrend or not UseAroonTrendFilter) and (MADowntrend or not UseMATrendFilter)

trend_bg         = Uptrend ? table_bull : Downtrend ? table_bear : table_neut
trend_text       = Uptrend ? 'Bullish' : Downtrend ? 'Bearish' : 'Neutral'


// row 5 volume pressure

//Moving Average On/Off
maOn = true
maColor = color.aqua
maLength = 20

//DMI
[plus, minus, adx] = ta.dmi(1, 1)

//Volume
vol = volume[0]
avg = ta.sma(vol, maLength)

if not maOn
    avg := na

//Colors
bcolor = #00e67600
pressureLabel = string("Bullish")
labelColor = color.lime
volColor = #00e67600

//Logic
if plus > minus
    bcolor := #00E67630
    pressureLabel := string("Bullish")
    labelColor := table_bull
    volColor := table_bull
else if plus == minus
    bcolor := #00bcd430
    pressureLabel := string("Neutral")
    labelColor := color.aqua
    volColor := color.aqua
else
    bcolor := #FF525230
    pressureLabel := string("Bearish")
    labelColor := table_bear
    volColor := table_bear
    


// row 6 qqe
// qqe rsi 1
rsi_period_1      = 6
rsi_sf_1          = 5
rsi_qqe_1         = 3
rsi_threshold_1   = 3
rsi_src_1         = close
wilders_period_1  = rsi_period_1 * 2 - 1

rsi_value_1           = ta.rsi(rsi_src_1, rsi_period_1)
rsi_ma_1              = ta.ema(rsi_value_1, rsi_sf_1)
rsi_atr_1             = math.abs(rsi_ma_1[1] - rsi_ma_1)
rsi_ma_atr_1          = ta.ema(rsi_atr_1, wilders_period_1)
delta_fast_atrrsi_1   = ta.ema(rsi_ma_atr_1, wilders_period_1) * rsi_qqe_1

var float longband_1 = 0.0
var float shortband_1 = 0.0
var int trend_1 = 0
newshortband_1    = rsi_ma_1 + delta_fast_atrrsi_1
newlongband_1     = rsi_ma_1 - delta_fast_atrrsi_1
longband_1        := rsi_ma_1[1] > longband_1[1] and rsi_ma_1 > longband_1[1] ? math.max(longband_1[1], newlongband_1) : newlongband_1
shortband_1       := rsi_ma_1[1] < shortband_1[1] and rsi_ma_1 < shortband_1[1] ? math.min(shortband_1[1], newshortband_1) : newshortband_1
cross_1           = ta.cross(longband_1[1], rsi_ma_1)
trend_1           := ta.cross(rsi_ma_1, shortband_1[1]) ? 1 : cross_1 ? -1 : nz(trend_1[1], 1)
fast_atr_rsi_tl_1 = trend_1 == 1 ? longband_1 : shortband_1


// qqe bollinger band 1
length_1 = 50
mult_1 = 0.35
basis_1 = ta.sma(fast_atr_rsi_tl_1 - 50, length_1)
dev_1 = mult_1 * ta.stdev(fast_atr_rsi_tl_1 - 50, length_1)
upper_1 = basis_1 + dev_1
lower_1 = basis_1 - dev_1
color_bar_1 = rsi_ma_1 - 50 > upper_1 ? #00c3ff : rsi_ma_1 - 50 < lower_1 ? #ff0062 : color.gray



 

// qqe rsi 2
rsi_period_2      = 6
rsi_sf_2          = 5
rsi_qqe_2         = 3
rsi_threshold_2   = 3
rsi_src_2         = close
wilders_period_2  = rsi_period_2 * 2 - 1

rsi_value_2           = ta.rsi(rsi_src_2, rsi_period_2)
rsi_ma_2              = ta.ema(rsi_value_2, rsi_sf_2)
rsi_atr_2             = math.abs(rsi_ma_2[1] - rsi_ma_2)
rsi_ma_atr_2          = ta.ema(rsi_atr_2, wilders_period_2)
delta_fast_atrrsi_2   = ta.ema(rsi_ma_atr_2, wilders_period_2) * rsi_qqe_2

var float longband_2 = 0.0
var float shortband_2 = 0.0
var int trend_2 = 0
newshortband_2    = rsi_ma_2 + delta_fast_atrrsi_2
newlongband_2     = rsi_ma_2 - delta_fast_atrrsi_2
longband_2        := rsi_ma_2[1] > longband_2[1] and rsi_ma_2 > longband_2[1] ? math.max(longband_2[1], newlongband_2) : newlongband_2
shortband_2       := rsi_ma_2[1] < shortband_2[1] and rsi_ma_2 < shortband_2[1] ? math.min(shortband_2[1], newshortband_2) : newshortband_2
cross_2           = ta.cross(longband_2[1], rsi_ma_2)
trend_2           := ta.cross(rsi_ma_2, shortband_2[1]) ? 1 : cross_2 ? -1 : nz(trend_2[1], 1)
fast_atr_rsi_tl_2 = trend_2 == 1 ? longband_2 : shortband_2



hcolor2 = rsi_ma_2 - 50 > rsi_threshold_2 ? color.silver :
   rsi_ma_2 - 50 < 0 - rsi_threshold_2 ? color.silver : na

Greenbar1 = rsi_ma_2 - 50 > rsi_threshold_2
Greenbar2 = rsi_ma_1 - 50 > upper_1

Redbar1 = rsi_ma_2 - 50 < 0 - rsi_threshold_2
Redbar2 = rsi_ma_1 - 50 < lower_1

// plot_value = (rsi_ma_1-50)*1
// plot_color = plot_value >= 50 ? color.lime : plot_value > 0 ? color.rgb(54, 156, 148)
//  : plot_value <= -50 ? color.red : color.rgb(212, 98, 146)
// plot(plot_value, color=plot_color, title='Momentum', style=plot.style_columns, linewidth = 3)

qqe_bg         = Greenbar1 and Greenbar2 == 1 ? table_bull : Redbar1 and Redbar2 == 1 ? table_bear : table_neut
qqe_text       = Greenbar1 and Greenbar2 == 1 ? 'Bullish' : Redbar1 and Redbar2 == 1 ? 'Bearish' : 'Neutral'




// table
if barstate.islast
    table.clear(table, 0, 0, 1, 6)

    table.cell(table, 0, 0, text = 'TITLE HERE', text_color = table_text, bgcolor = table_head)
    table.merge_cells(table, 0,0,1,0)

    table.cell(table, 0, 1, text = 'Volume', text_color = table_text, bgcolor = table_bg)
    table.cell(table, 0, 2, text = 'Dtek', text_color = table_text, bgcolor = table_bg)
    table.cell(table, 0, 3, text = 'PMH/PML', text_color = table_text, bgcolor = table_bg)
    table.cell(table, 0, 4, text = 'Trend BG', text_color = table_text, bgcolor = table_bg)
    table.cell(table, 0, 5, text = 'Volume Pressure', text_color = table_text, bgcolor = table_bg)
    table.cell(table, 0, 6, text = 'QQE', text_color = table_text, bgcolor = table_bg)

    table.cell(table, 1, 1, text = volume_text, text_color = table_text, bgcolor = volume_bg)
    table.cell(table, 1, 2, text = dtek_text, text_color = table_text, bgcolor = dtek_bg)
    table.cell(table, 1, 3, text = pm_text, text_color = table_text, bgcolor = pm_bg)
    table.cell(table, 1, 4, text = trend_text, text_color = table_text, bgcolor = trend_bg)
    table.cell(table, 1, 5, text = pressureLabel, text_color = table_text, bgcolor = labelColor)
    table.cell(table, 1, 6, text = qqe_text, text_color = table_text, bgcolor = qqe_bg)

Overview

Users can adjust how levels project across historical data, toggle line labels, customize spacing, and show price axis markings. The indicator features timeframe visibility thresholds to hide or display levels across specific minute or hour ranges, an alert suppression session window to mute notifications during market opening periods, and an integrated status dashboard table.

Details

Published by

g-moe on GitHub

Code credit

goodgains, as written in the script's header

Type

Indicator, Pine Script v5

Draws

On the price chart

Category

Support & resistance, Sessions & time, Screeners & dashboards

Markets

Stocks, Indices

Timeframes

M1-M5, M15-H1

Risk Notes

No repainting, lookahead or stacked entries were found in its code or README. That says nothing about how well it works: test it first.

Settings

The inputs you can change from the gear icon on the chart. Defaults are the author's.

SettingTypeDefaultVariable
DisplaystringIndividual level for each daylevelSettingOption
Show Labels for Linesbooltrueshow_labels
- Spacingint75label_spacing
Pre-market highbooltruepmHighLevel
Pre-market lowbooltruepmLowLevel
Prior day highbooltruepriorHighLevel
Prior day lowbooltruepriorLowLevel
Pre-market highbooltruepmHighPrice
Pre-market lowbooltruepmLowPrice
Prior day highbooltruepriorHighPrice
Prior day lowbooltruepriorLowPrice
SecondsbooltruesecondBool
Show all 40 settings
SettingTypeDefaultVariable
MinutesbooltrueminuteBool
HoursbooltruehourBool
DaysboolfalsedayBool
WeeksboolfalseweekBool
MonthsboolfalsemonthBool
No alert periodboolfalsenoPeriodBool
noPeriodsession0930-0935noPeriod
secondMinint1secondMin
-int59secondMax
minuteMinint1minuteMin
-int59minuteMax
hourMinint1hourMin
-int24hourMax
dayMinint1dayMin
-int366dayMax
weekMinint1weekMin
-int52weekMax
monthMinint1monthMin
-int12monthMax
pmHighColourcolor#81c583pmHighColour
pmLowColourcolor#ee9899pmLowColour
priorHighColourcolor#00ff00priorHighColour
priorLowColourcolor#ff80ffpriorLowColour
Thicknessint1pmHighLineWidth
Thicknessint1pmLowLineWidth
Thicknessint1priorHighLineWidth
Thicknessint1priorLowLineWidth
pmHighStyleOptionstringsolid (─)pmHighStyleOption
Third-party code. ForexR did not write, test or endorse this script, and the summary above was generated automatically from its code and README. Indicators describe the past, and a strategy's backtest can look better than live trading, especially when a script repaints. Check it in the Strategy Tester and on a demo account before you rely on it.

Similar Pine Scripts

575 stars

This indicator builds Market Profile Time Price Opportunity (TPO) structures across defined session timeframes directly on the main price chart. It visualizes the Point of Control (POC) and Value Area boundaries using dynamic box drawings. An integrated multi-

Indicator v5 Support & resistanceScreeners & dashboards
Updated 1 year ago · MPL-2.0 GitHub repository of Market Profile with Screener
257 stars

This indicator overlays an intraday SPX and ES chart with a midnight session range, regular-trading-hours opening levels, and a VWAP projection box. It draws the midnight high, mid, and low, flags edge rejections within an absolute tolerance, and plots optiona

Indicator v6 TrendSupport & resistance
Updated 6 weeks ago · None stated GitHub repository of SPX Midnight Box + Snag Logic

Golden Bullet Strategy

by TradersPost
218 stars

The Golden Bullet Strategy is an overlay signal indicator based on Smart Money Concepts and time-based liquidity models. It identifies liquidity sweeps of a designated reference session range during a specified hunt window. It then confirms Market Structure Sh

Indicator v6 SMC / ICT / price actionSessions & time
Updated 3 months ago · None stated GitHub repository of Golden Bullet Strategy

Session Edge Probabilities

by TraderOracle
61 stars

Session Edge Probabilities tracks eight session-based trading rules using statistical probabilities evaluated on historical chart data. It utilizes a fixed calculation timeframe to evaluate opening ranges, midnight levels, afternoon reversal windows, and price

Indicator v6 Sessions & timeScreeners & dashboards
Updated 9 days ago · None stated GitHub repository of Session Edge Probabilities
56 stars

This indicator marks forex trading sessions and opening ranges on the price chart. It can draw Sydney, Tokyo, Frankfurt, London, and New York session boxes or five- and fifteen-minute opening ranges, plus an optional opening channel and a day-open range. Day r

Indicator v5 Sessions & timeSupport & resistance Repaints
Updated 2 months ago · None stated GitHub repository of Day Trading Booster by DGT

More indicators

Trade Your Charts With a Regulated Broker

Compare brokers that connect to TradingView, with spreads, minimum deposits and leverage side by side.

Compare brokers