A multi indicator Dashboard for ProRealTime

03 Sep 2026
0 comment
2 attachments

This snippet creates a compact on-chart dashboard that aggregates multiple indicator states into a single, readable panel. It helps you avoid switching between indicators by summarizing key signals in one place for faster decision-making.

//------------------------------------------------------//
// INDICATOR: MTF_Trend_Dashboard
//------------------------------------------------------//
//
// PURPOSE
// -------
// A multi-timeframe (3M, 5M, 15M, 1H, 4H, 1D) dashboard that shows the
// state of 9 indicators, grouped into 3 categories, plus one combined
// per-timeframe verdict at the bottom.
//
// LAYOUT
// ------
// Three columns, each stacking 3 indicator blocks, drawn top-right anchored:
//  Column 1 (leftmost) - TREND   : SMA50, SuperTrend, ADX
//  Column 2 (middle)  - TIMING   : RSI, Williams %R, MACD
//  Column 3 (rightmost) - VOLATILITY : ATR, BB Width, Efficiency Ratio
// A 4th block, COMBINED ADVICE, spans the full width beneath all three
// columns and shows one verdict per timeframe.
//
// WHY THESE 3 CATEGORIES
// -----------------------
// TREND answers "which way, and how convinced": SMA50 and SuperTrend give
// direction (price vs. a moving reference); ADX does NOT give direction, it
// only says whether a trend is strong enough to trust (ADX > ADXlevel).
// TIMING answers "is now a reasonable moment to act": RSI, Williams %R and
// MACD are all momentum/direction reads, useful for entries within a trend.
// VOLATILITY answers "how much room / how reliable is the current move":
// ATR (size of recent bars), BB Width (contraction = building pressure),
// and Efficiency Ratio (clean trend vs. choppy noise) never give BULL/BEAR -
// they are context, not signals, and are used as filters, not votes.
//
// COMBINED ADVICE - HOW IT'S BUILT
// ---------------------------------
// Only the 5 indicators that actually express a direction are used as
// "votes": SMA50, SuperTrend, RSI, Williams %R, MACD. ADX, ATR, BB Width
// and Efficiency Ratio are deliberately left out of the vote itself -
// mixing directional and non-directional readings into one sum would make
// the score meaningless (e.g. "HIGH volatility" is not bullish or bearish).
// Per timeframe: +1 for every bullish vote, -1 for every bearish vote,
// giving a score from -5 (all bearish) to +5 (all bullish). ADX is then
// used only as a confidence filter to upgrade a BUY/SELL into a STRONG
// BUY/STRONG SELL - a 5/5 agreement in a weak/range-bound market (ADX
// below ADXlevel) stays a plain BUY/SELL rather than STRONG.
// Thresholds used (all adjustable, see "HOW TO CHANGE THINGS" below):
//  score >= 4 AND ADX "STRONG" -> STRONG BUY
//  score >= 2          -> BUY
//  score <= -4 AND ADX "STRONG" -> STRONG SELL
//  score <= -2          -> SELL
//  otherwise (-1, 0, 1)     -> NEUTRAL (indicators disagree)
// NOTE: BB Width (squeeze) and Efficiency Ratio (chop) are NOT currently
// factored into the verdict at all. They are shown purely as separate
// context so you can eyeball, for example, "BUY, but this timeframe is
// choppy/squeezed right now" - the dashboard leaves that judgement call to
// you rather than silently downgrading the verdict for you.
//
// HOW TO CHANGE THINGS
// ---------------------
// - Change an indicator's period/level: edit the named settings variables
//  at the top of the file (e.g. RSIperiod, RSIlevel, STmultiplier, ...).
//  Nothing else needs to change - they're referenced everywhere by name.
//  You can also register any of them as a parameterizable variable (via
//  the wrench/variables icon in the ProBuilder editor) to make them
//  editable from the indicator's "modify" screen instead of the code -
//  in that case remove the "= value" here for that variable so there's
//  only one source for its value.
// - Change the verdict thresholds: edit the score comparisons (>= 4, >= 2,
//  <= -4, <= -2) inside the "COMBINED ADVICE" rendering block near the end
//  of the file - there are 6 near-identical IF blocks, one per timeframe.
// - Add BB Width / Efficiency Ratio into the verdict: inside those same
//  6 IF blocks, add "AND NOT condBBWxx" / "AND condERxx" to the BUY/STRONG
//  BUY conditions (and the mirrored AND for SELL) to require "not
//  squeezed" / "trending, not choppy" before allowing a strong verdict.
// - Add or remove a timeframe: duplicate/remove one TIMEFRAME(...) block
//  in section 1, its matching score block in section 2, and its matching
//  DRAWTEXT column (5 blocks x 1 column + 1 advice column) in section 3 -
//  search for one existing timeframe suffix (e.g. "15M") to find every
//  place it's referenced.
// - Add a whole new indicator: follow the pattern of an existing one (e.g.
//  Williams %R) - one settings block up top, one calculation + cond
//  variable per TIMEFRAME block, one DRAWRECTANGLE + DRAWTEXT block per
//  timeframe in the rendering section, in the column of the category it
//  belongs to (TREND / TIMING / VOLATILITY).
// - Reposition/resize blocks: every DRAWRECTANGLE/DRAWTEXT uses absolute
//  pixel offsets from the chart's top-right corner (ANCHOR(TopRight)),
//  not bar/price coordinates - x is horizontal offset (more negative =
//  further left), y is vertical offset (more negative = further down).
//------------------------------------------------------//
DEFPARAM DrawOnLastBarOnly = true
// --- SMA (trend) settings ---
SMAperiod = 50
// --- Supertrend settings ---
STmultiplier = 3
STperiod = 10
// --- RSI settings ---
RSIperiod = 14
RSIlevel = 50
// --- Williams %R settings ---
WPRperiod = 14
WPRlevel = -50
// --- MACD settings ---
MACDfast = 12
MACDslow = 26
MACDsigP = 9
// --- ADX settings ---
ADXlen = 14
ADXlevel = 25
// --- ATR settings ---
ATRperiod = 14
ATRavgPeriod = 50
// --- Bollinger Band Width (squeeze) settings ---
BBperiod = 20
BBavgPeriod = 50
// --- Efficiency Ratio (chop) settings ---
ERperiod = 14
ERlevel = 0.3
// 1. DATA COLLECTION FROM MULTIPLE TIMEFRAMES
// Timeframe 0: 3 Minutes
TIMEFRAME(3 minutes)
sma3M = Average[SMAperiod](close)
cond3M = close > sma3M
st3M = Supertrend[STmultiplier, STperiod]
condST3M = close > st3M
adx3M = ADX[ADXlen]
condADX3M = adx3M > ADXlevel
rsi3M = RSI[RSIperiod](close)
condRSI3M = rsi3M > RSIlevel
wpr3M = Williams[WPRperiod](close)
condWPR3M = wpr3M > WPRlevel
macd3M = MACD[MACDfast, MACDslow, MACDsigP](close)
condMACD3M = macd3M > 0
atr3M = AverageTrueRange[ATRperiod](close)
atrAvg3M = Average[ATRavgPeriod](atr3M)
condATR3M = atr3M > atrAvg3M
bbw3M = BollingerBandWidth[BBperiod](close)
bbwAvg3M = Average[BBavgPeriod](bbw3M)
condBBW3M = bbw3M < bbwAvg3M
er3M = ABS(close - close[ERperiod]) / SUMMATION[ERperiod](ABS(close - close[1]))
condER3M = er3M > ERlevel
// Timeframe 1: 5 Minutes
TIMEFRAME(5 minutes)
sma5M = Average[SMAperiod](close)
cond5M = close > sma5M
st5M = Supertrend[STmultiplier, STperiod]
condST5M = close > st5M
adx5M = ADX[ADXlen]
condADX5M = adx5M > ADXlevel
rsi5M = RSI[RSIperiod](close)
condRSI5M = rsi5M > RSIlevel
wpr5M = Williams[WPRperiod](close)
condWPR5M = wpr5M > WPRlevel
macd5M = MACD[MACDfast, MACDslow, MACDsigP](close)
condMACD5M = macd5M > 0
atr5M = AverageTrueRange[ATRperiod](close)
atrAvg5M = Average[ATRavgPeriod](atr5M)
condATR5M = atr5M > atrAvg5M
bbw5M = BollingerBandWidth[BBperiod](close)
bbwAvg5M = Average[BBavgPeriod](bbw5M)
condBBW5M = bbw5M < bbwAvg5M
er5M = ABS(close - close[ERperiod]) / SUMMATION[ERperiod](ABS(close - close[1]))
condER5M = er5M > ERlevel
// Timeframe 2: 15 Minutes
TIMEFRAME(15 minutes)
sma15M = Average[SMAperiod](close)
cond15M = close > sma15M
st15M = Supertrend[STmultiplier, STperiod]
condST15M = close > st15M
adx15M = ADX[ADXlen]
condADX15M = adx15M > ADXlevel
rsi15M = RSI[RSIperiod](close)
condRSI15M = rsi15M > RSIlevel
wpr15M = Williams[WPRperiod](close)
condWPR15M = wpr15M > WPRlevel
macd15M = MACD[MACDfast, MACDslow, MACDsigP](close)
condMACD15M = macd15M > 0
atr15M = AverageTrueRange[ATRperiod](close)
atrAvg15M = Average[ATRavgPeriod](atr15M)
condATR15M = atr15M > atrAvg15M
bbw15M = BollingerBandWidth[BBperiod](close)
bbwAvg15M = Average[BBavgPeriod](bbw15M)
condBBW15M = bbw15M < bbwAvg15M
er15M = ABS(close - close[ERperiod]) / SUMMATION[ERperiod](ABS(close - close[1]))
condER15M = er15M > ERlevel
// Timeframe 3: 1 Hour
TIMEFRAME(1 hour)
sma1H = Average[SMAperiod](close)
cond1H = close > sma1H
st1H = Supertrend[STmultiplier, STperiod]
condST1H = close > st1H
adx1H = ADX[ADXlen]
condADX1H = adx1H > ADXlevel
rsi1H = RSI[RSIperiod](close)
condRSI1H = rsi1H > RSIlevel
wpr1H = Williams[WPRperiod](close)
condWPR1H = wpr1H > WPRlevel
macd1H = MACD[MACDfast, MACDslow, MACDsigP](close)
condMACD1H = macd1H > 0
atr1H = AverageTrueRange[ATRperiod](close)
atrAvg1H = Average[ATRavgPeriod](atr1H)
condATR1H = atr1H > atrAvg1H
bbw1H = BollingerBandWidth[BBperiod](close)
bbwAvg1H = Average[BBavgPeriod](bbw1H)
condBBW1H = bbw1H < bbwAvg1H
er1H = ABS(close - close[ERperiod]) / SUMMATION[ERperiod](ABS(close - close[1]))
condER1H = er1H > ERlevel
// Timeframe 4: 4 Hours
TIMEFRAME(4 hours)
sma4H = Average[SMAperiod](close)
cond4H = close > sma4H
st4H = Supertrend[STmultiplier, STperiod]
condST4H = close > st4H
adx4H = ADX[ADXlen]
condADX4H = adx4H > ADXlevel
rsi4H = RSI[RSIperiod](close)
condRSI4H = rsi4H > RSIlevel
wpr4H = Williams[WPRperiod](close)
condWPR4H = wpr4H > WPRlevel
macd4H = MACD[MACDfast, MACDslow, MACDsigP](close)
condMACD4H = macd4H > 0
atr4H = AverageTrueRange[ATRperiod](close)
atrAvg4H = Average[ATRavgPeriod](atr4H)
condATR4H = atr4H > atrAvg4H
bbw4H = BollingerBandWidth[BBperiod](close)
bbwAvg4H = Average[BBavgPeriod](bbw4H)
condBBW4H = bbw4H < bbwAvg4H
er4H = ABS(close - close[ERperiod]) / SUMMATION[ERperiod](ABS(close - close[1]))
condER4H = er4H > ERlevel
// Timeframe 5: Daily
TIMEFRAME(daily)
sma1D = Average[SMAperiod](close)
cond1D = close > sma1D
st1D = Supertrend[STmultiplier, STperiod]
condST1D = close > st1D
adx1D = ADX[ADXlen]
condADX1D = adx1D > ADXlevel
rsi1D = RSI[RSIperiod](close)
condRSI1D = rsi1D > RSIlevel
wpr1D = Williams[WPRperiod](close)
condWPR1D = wpr1D > WPRlevel
macd1D = MACD[MACDfast, MACDslow, MACDsigP](close)
condMACD1D = macd1D > 0
atr1D = AverageTrueRange[ATRperiod](close)
atrAvg1D = Average[ATRavgPeriod](atr1D)
condATR1D = atr1D > atrAvg1D
bbw1D = BollingerBandWidth[BBperiod](close)
bbwAvg1D = Average[BBavgPeriod](bbw1D)
condBBW1D = bbw1D < bbwAvg1D
er1D = ABS(close - close[ERperiod]) / SUMMATION[ERperiod](ABS(close - close[1]))
condER1D = er1D > ERlevel
TIMEFRAME(default)
// 2. COMBINED ADVICE SCORE PER TIMEFRAME
// Adds +1/-1 per directional indicator (SMA50, SuperTrend, RSI, Williams %R, MACD)
// ADX (trend strength) is used afterwards only to upgrade BUY/SELL to STRONG BUY/STRONG SELL
score3M = 0
IF cond3M THEN
score3M = score3M + 1
ELSE
score3M = score3M - 1
ENDIF
IF condST3M THEN
score3M = score3M + 1
ELSE
score3M = score3M - 1
ENDIF
IF condRSI3M THEN
score3M = score3M + 1
ELSE
score3M = score3M - 1
ENDIF
IF condWPR3M THEN
score3M = score3M + 1
ELSE
score3M = score3M - 1
ENDIF
IF condMACD3M THEN
score3M = score3M + 1
ELSE
score3M = score3M - 1
ENDIF
score5M = 0
IF cond5M THEN
score5M = score5M + 1
ELSE
score5M = score5M - 1
ENDIF
IF condST5M THEN
score5M = score5M + 1
ELSE
score5M = score5M - 1
ENDIF
IF condRSI5M THEN
score5M = score5M + 1
ELSE
score5M = score5M - 1
ENDIF
IF condWPR5M THEN
score5M = score5M + 1
ELSE
score5M = score5M - 1
ENDIF
IF condMACD5M THEN
score5M = score5M + 1
ELSE
score5M = score5M - 1
ENDIF
score15M = 0
IF cond15M THEN
score15M = score15M + 1
ELSE
score15M = score15M - 1
ENDIF
IF condST15M THEN
score15M = score15M + 1
ELSE
score15M = score15M - 1
ENDIF
IF condRSI15M THEN
score15M = score15M + 1
ELSE
score15M = score15M - 1
ENDIF
IF condWPR15M THEN
score15M = score15M + 1
ELSE
score15M = score15M - 1
ENDIF
IF condMACD15M THEN
score15M = score15M + 1
ELSE
score15M = score15M - 1
ENDIF
score1H = 0
IF cond1H THEN
score1H = score1H + 1
ELSE
score1H = score1H - 1
ENDIF
IF condST1H THEN
score1H = score1H + 1
ELSE
score1H = score1H - 1
ENDIF
IF condRSI1H THEN
score1H = score1H + 1
ELSE
score1H = score1H - 1
ENDIF
IF condWPR1H THEN
score1H = score1H + 1
ELSE
score1H = score1H - 1
ENDIF
IF condMACD1H THEN
score1H = score1H + 1
ELSE
score1H = score1H - 1
ENDIF
score4H = 0
IF cond4H THEN
score4H = score4H + 1
ELSE
score4H = score4H - 1
ENDIF
IF condST4H THEN
score4H = score4H + 1
ELSE
score4H = score4H - 1
ENDIF
IF condRSI4H THEN
score4H = score4H + 1
ELSE
score4H = score4H - 1
ENDIF
IF condWPR4H THEN
score4H = score4H + 1
ELSE
score4H = score4H - 1
ENDIF
IF condMACD4H THEN
score4H = score4H + 1
ELSE
score4H = score4H - 1
ENDIF
score1D = 0
IF cond1D THEN
score1D = score1D + 1
ELSE
score1D = score1D - 1
ENDIF
IF condST1D THEN
score1D = score1D + 1
ELSE
score1D = score1D - 1
ENDIF
IF condRSI1D THEN
score1D = score1D + 1
ELSE
score1D = score1D - 1
ENDIF
IF condWPR1D THEN
score1D = score1D + 1
ELSE
score1D = score1D - 1
ENDIF
IF condMACD1D THEN
score1D = score1D + 1
ELSE
score1D = score1D - 1
ENDIF
// 3. DASHBOARD RENDERING (only on the last bar)
IF IsLastBarUpdate THEN
//=====================================================
// COLUMN 1 (leftmost): TREND - SMA50, SuperTrend, ADX
//=====================================================
DRAWTEXT("TREND", -742, -10, SansSerif, Bold, 13) ANCHOR(TopRight) COLOURED("MidnightBlue")
// -- SMA50 --
DRAWRECTANGLE(-885, -25, -600, -80) ANCHOR(TopRight) COLOURED("LightGray") BORDERCOLOR("Black")
DRAWTEXT("SMA (#SMAperiod#)", -742, -33, SansSerif, Bold, 11) ANCHOR(TopRight) COLOURED("Black")
DRAWTEXT(" 3M | 5M | 15M | 1H | 4H | 1D ", -742, -49, SansSerif, Bold, 10) ANCHOR(TopRight) COLOURED("Black")
IF cond3M THEN
DRAWTEXT(" BULL ", -850, -65, SansSerif, Bold, 10) ANCHOR(TopRight) COLOURED("Green")
ELSE
DRAWTEXT(" BEAR ", -850, -65, SansSerif, Bold, 10) ANCHOR(TopRight) COLOURED("Red")
ENDIF
IF cond5M THEN
DRAWTEXT(" BULL ", -805, -65, SansSerif, Bold, 10) ANCHOR(TopRight) COLOURED("Green")
ELSE
DRAWTEXT(" BEAR ", -805, -65, SansSerif, Bold, 10) ANCHOR(TopRight) COLOURED("Red")
ENDIF
IF cond15M THEN
DRAWTEXT(" BULL ", -760, -65, SansSerif, Bold, 10) ANCHOR(TopRight) COLOURED("Green")
ELSE
DRAWTEXT(" BEAR ", -760, -65, SansSerif, Bold, 10) ANCHOR(TopRight) COLOURED("Red")
ENDIF
IF cond1H THEN
DRAWTEXT(" BULL ", -715, -65, SansSerif, Bold, 10) ANCHOR(TopRight) COLOURED("Green")
ELSE
DRAWTEXT(" BEAR ", -715, -65, SansSerif, Bold, 10) ANCHOR(TopRight) COLOURED("Red")
ENDIF
IF cond4H THEN
DRAWTEXT(" BULL ", -670, -65, SansSerif, Bold, 10) ANCHOR(TopRight) COLOURED("Green")
ELSE
DRAWTEXT(" BEAR ", -670, -65, SansSerif, Bold, 10) ANCHOR(TopRight) COLOURED("Red")
ENDIF
IF cond1D THEN
DRAWTEXT(" BULL ", -625, -65, SansSerif, Bold, 10) ANCHOR(TopRight) COLOURED("Green")
ELSE
DRAWTEXT(" BEAR ", -625, -65, SansSerif, Bold, 10) ANCHOR(TopRight) COLOURED("Red")
ENDIF
// -- SuperTrend --
DRAWRECTANGLE(-885, -85, -600, -140) ANCHOR(TopRight) COLOURED("LightGray") BORDERCOLOR("Black")
DRAWTEXT("SuperTrend (#STmultiplier#,#STperiod#)", -742, -93, SansSerif, Bold, 11) ANCHOR(TopRight) COLOURED("Black")
DRAWTEXT(" 3M | 5M | 15M | 1H | 4H | 1D ", -742, -109, SansSerif, Bold, 10) ANCHOR(TopRight) COLOURED("Black")
IF condST3M THEN
DRAWTEXT(" BULL ", -850, -125, SansSerif, Bold, 10) ANCHOR(TopRight) COLOURED("Green")
ELSE
DRAWTEXT(" BEAR ", -850, -125, SansSerif, Bold, 10) ANCHOR(TopRight) COLOURED("Red")
ENDIF
IF condST5M THEN
DRAWTEXT(" BULL ", -805, -125, SansSerif, Bold, 10) ANCHOR(TopRight) COLOURED("Green")
ELSE
DRAWTEXT(" BEAR ", -805, -125, SansSerif, Bold, 10) ANCHOR(TopRight) COLOURED("Red")
ENDIF
IF condST15M THEN
DRAWTEXT(" BULL ", -760, -125, SansSerif, Bold, 10) ANCHOR(TopRight) COLOURED("Green")
ELSE
DRAWTEXT(" BEAR ", -760, -125, SansSerif, Bold, 10) ANCHOR(TopRight) COLOURED("Red")
ENDIF
IF condST1H THEN
DRAWTEXT(" BULL ", -715, -125, SansSerif, Bold, 10) ANCHOR(TopRight) COLOURED("Green")
ELSE
DRAWTEXT(" BEAR ", -715, -125, SansSerif, Bold, 10) ANCHOR(TopRight) COLOURED("Red")
ENDIF
IF condST4H THEN
DRAWTEXT(" BULL ", -670, -125, SansSerif, Bold, 10) ANCHOR(TopRight) COLOURED("Green")
ELSE
DRAWTEXT(" BEAR ", -670, -125, SansSerif, Bold, 10) ANCHOR(TopRight) COLOURED("Red")
ENDIF
IF condST1D THEN
DRAWTEXT(" BULL ", -625, -125, SansSerif, Bold, 10) ANCHOR(TopRight) COLOURED("Green")
ELSE
DRAWTEXT(" BEAR ", -625, -125, SansSerif, Bold, 10) ANCHOR(TopRight) COLOURED("Red")
ENDIF
// -- ADX (trend strength, not direction) --
DRAWRECTANGLE(-885, -145, -600, -200) ANCHOR(TopRight) COLOURED("LightGray") BORDERCOLOR("Black")
DRAWTEXT("ADX (#ADXlen#)", -742, -153, SansSerif, Bold, 11) ANCHOR(TopRight) COLOURED("Black")
DRAWTEXT(" 3M | 5M | 15M | 1H | 4H | 1D ", -742, -169, SansSerif, Bold, 10) ANCHOR(TopRight) COLOURED("Black")
IF condADX3M THEN
DRAWTEXT(" STRONG ", -850, -185, SansSerif, Bold, 10) ANCHOR(TopRight) COLOURED(65,105,225)
ELSE
DRAWTEXT(" WEAK ", -850, -185, SansSerif, Bold, 10) ANCHOR(TopRight) COLOURED(128,128,128)
ENDIF
IF condADX5M THEN
DRAWTEXT(" STRONG ", -805, -185, SansSerif, Bold, 10) ANCHOR(TopRight) COLOURED(65,105,225)
ELSE
DRAWTEXT(" WEAK ", -805, -185, SansSerif, Bold, 10) ANCHOR(TopRight) COLOURED(128,128,128)
ENDIF
IF condADX15M THEN
DRAWTEXT(" STRONG ", -760, -185, SansSerif, Bold, 10) ANCHOR(TopRight) COLOURED(65,105,225)
ELSE
DRAWTEXT(" WEAK ", -760, -185, SansSerif, Bold, 10) ANCHOR(TopRight) COLOURED(128,128,128)
ENDIF
IF condADX1H THEN
DRAWTEXT(" STRONG ", -715, -185, SansSerif, Bold, 10) ANCHOR(TopRight) COLOURED(65,105,225)
ELSE
DRAWTEXT(" WEAK ", -715, -185, SansSerif, Bold, 10) ANCHOR(TopRight) COLOURED(128,128,128)
ENDIF
IF condADX4H THEN
DRAWTEXT(" STRONG ", -670, -185, SansSerif, Bold, 10) ANCHOR(TopRight) COLOURED(65,105,225)
ELSE
DRAWTEXT(" WEAK ", -670, -185, SansSerif, Bold, 10) ANCHOR(TopRight) COLOURED(128,128,128)
ENDIF
IF condADX1D THEN
DRAWTEXT(" STRONG ", -625, -185, SansSerif, Bold, 10) ANCHOR(TopRight) COLOURED(65,105,225)
ELSE
DRAWTEXT(" WEAK ", -625, -185, SansSerif, Bold, 10) ANCHOR(TopRight) COLOURED(128,128,128)
ENDIF
//=====================================================
// COLUMN 2 (middle): TIMING - RSI, Williams %R, MACD
//=====================================================
DRAWTEXT("TIMING", -447, -10, SansSerif, Bold, 13) ANCHOR(TopRight) COLOURED("DarkOrange")
// -- RSI --
DRAWRECTANGLE(-590, -25, -305, -80) ANCHOR(TopRight) COLOURED("LightGray") BORDERCOLOR("Black")
DRAWTEXT("RSI (#RSIperiod#)", -447, -33, SansSerif, Bold, 11) ANCHOR(TopRight) COLOURED("Black")
DRAWTEXT(" 3M | 5M | 15M | 1H | 4H | 1D ", -447, -49, SansSerif, Bold, 10) ANCHOR(TopRight) COLOURED("Black")
IF condRSI3M THEN
DRAWTEXT(" BULL ", -555, -65, SansSerif, Bold, 10) ANCHOR(TopRight) COLOURED("Green")
ELSE
DRAWTEXT(" BEAR ", -555, -65, SansSerif, Bold, 10) ANCHOR(TopRight) COLOURED("Red")
ENDIF
IF condRSI5M THEN
DRAWTEXT(" BULL ", -510, -65, SansSerif, Bold, 10) ANCHOR(TopRight) COLOURED("Green")
ELSE
DRAWTEXT(" BEAR ", -510, -65, SansSerif, Bold, 10) ANCHOR(TopRight) COLOURED("Red")
ENDIF
IF condRSI15M THEN
DRAWTEXT(" BULL ", -465, -65, SansSerif, Bold, 10) ANCHOR(TopRight) COLOURED("Green")
ELSE
DRAWTEXT(" BEAR ", -465, -65, SansSerif, Bold, 10) ANCHOR(TopRight) COLOURED("Red")
ENDIF
IF condRSI1H THEN
DRAWTEXT(" BULL ", -420, -65, SansSerif, Bold, 10) ANCHOR(TopRight) COLOURED("Green")
ELSE
DRAWTEXT(" BEAR ", -420, -65, SansSerif, Bold, 10) ANCHOR(TopRight) COLOURED("Red")
ENDIF
IF condRSI4H THEN
DRAWTEXT(" BULL ", -375, -65, SansSerif, Bold, 10) ANCHOR(TopRight) COLOURED("Green")
ELSE
DRAWTEXT(" BEAR ", -375, -65, SansSerif, Bold, 10) ANCHOR(TopRight) COLOURED("Red")
ENDIF
IF condRSI1D THEN
DRAWTEXT(" BULL ", -330, -65, SansSerif, Bold, 10) ANCHOR(TopRight) COLOURED("Green")
ELSE
DRAWTEXT(" BEAR ", -330, -65, SansSerif, Bold, 10) ANCHOR(TopRight) COLOURED("Red")
ENDIF
// -- Williams %R --
DRAWRECTANGLE(-590, -85, -305, -140) ANCHOR(TopRight) COLOURED("LightGray") BORDERCOLOR("Black")
DRAWTEXT("Williams %R (#WPRperiod#)", -447, -93, SansSerif, Bold, 11) ANCHOR(TopRight) COLOURED("Black")
DRAWTEXT(" 3M | 5M | 15M | 1H | 4H | 1D ", -447, -109, SansSerif, Bold, 10) ANCHOR(TopRight) COLOURED("Black")
IF condWPR3M THEN
DRAWTEXT(" BULL ", -555, -125, SansSerif, Bold, 10) ANCHOR(TopRight) COLOURED("Green")
ELSE
DRAWTEXT(" BEAR ", -555, -125, SansSerif, Bold, 10) ANCHOR(TopRight) COLOURED("Red")
ENDIF
IF condWPR5M THEN
DRAWTEXT(" BULL ", -510, -125, SansSerif, Bold, 10) ANCHOR(TopRight) COLOURED("Green")
ELSE
DRAWTEXT(" BEAR ", -510, -125, SansSerif, Bold, 10) ANCHOR(TopRight) COLOURED("Red")
ENDIF
IF condWPR15M THEN
DRAWTEXT(" BULL ", -465, -125, SansSerif, Bold, 10) ANCHOR(TopRight) COLOURED("Green")
ELSE
DRAWTEXT(" BEAR ", -465, -125, SansSerif, Bold, 10) ANCHOR(TopRight) COLOURED("Red")
ENDIF
IF condWPR1H THEN
DRAWTEXT(" BULL ", -420, -125, SansSerif, Bold, 10) ANCHOR(TopRight) COLOURED("Green")
ELSE
DRAWTEXT(" BEAR ", -420, -125, SansSerif, Bold, 10) ANCHOR(TopRight) COLOURED("Red")
ENDIF
IF condWPR4H THEN
DRAWTEXT(" BULL ", -375, -125, SansSerif, Bold, 10) ANCHOR(TopRight) COLOURED("Green")
ELSE
DRAWTEXT(" BEAR ", -375, -125, SansSerif, Bold, 10) ANCHOR(TopRight) COLOURED("Red")
ENDIF
IF condWPR1D THEN
DRAWTEXT(" BULL ", -330, -125, SansSerif, Bold, 10) ANCHOR(TopRight) COLOURED("Green")
ELSE
DRAWTEXT(" BEAR ", -330, -125, SansSerif, Bold, 10) ANCHOR(TopRight) COLOURED("Red")
ENDIF
// -- MACD (histogram vs zero) --
DRAWRECTANGLE(-590, -145, -305, -200) ANCHOR(TopRight) COLOURED("LightGray") BORDERCOLOR("Black")
DRAWTEXT("MACD (#MACDfast#,#MACDslow#,#MACDsigP#)", -447, -153, SansSerif, Bold, 11) ANCHOR(TopRight) COLOURED("Black")
DRAWTEXT(" 3M | 5M | 15M | 1H | 4H | 1D ", -447, -169, SansSerif, Bold, 10) ANCHOR(TopRight) COLOURED("Black")
IF condMACD3M THEN
DRAWTEXT(" BULL ", -555, -185, SansSerif, Bold, 10) ANCHOR(TopRight) COLOURED("Green")
ELSE
DRAWTEXT(" BEAR ", -555, -185, SansSerif, Bold, 10) ANCHOR(TopRight) COLOURED("Red")
ENDIF
IF condMACD5M THEN
DRAWTEXT(" BULL ", -510, -185, SansSerif, Bold, 10) ANCHOR(TopRight) COLOURED("Green")
ELSE
DRAWTEXT(" BEAR ", -510, -185, SansSerif, Bold, 10) ANCHOR(TopRight) COLOURED("Red")
ENDIF
IF condMACD15M THEN
DRAWTEXT(" BULL ", -465, -185, SansSerif, Bold, 10) ANCHOR(TopRight) COLOURED("Green")
ELSE
DRAWTEXT(" BEAR ", -465, -185, SansSerif, Bold, 10) ANCHOR(TopRight) COLOURED("Red")
ENDIF
IF condMACD1H THEN
DRAWTEXT(" BULL ", -420, -185, SansSerif, Bold, 10) ANCHOR(TopRight) COLOURED("Green")
ELSE
DRAWTEXT(" BEAR ", -420, -185, SansSerif, Bold, 10) ANCHOR(TopRight) COLOURED("Red")
ENDIF
IF condMACD4H THEN
DRAWTEXT(" BULL ", -375, -185, SansSerif, Bold, 10) ANCHOR(TopRight) COLOURED("Green")
ELSE
DRAWTEXT(" BEAR ", -375, -185, SansSerif, Bold, 10) ANCHOR(TopRight) COLOURED("Red")
ENDIF
IF condMACD1D THEN
DRAWTEXT(" BULL ", -330, -185, SansSerif, Bold, 10) ANCHOR(TopRight) COLOURED("Green")
ELSE
DRAWTEXT(" BEAR ", -330, -185, SansSerif, Bold, 10) ANCHOR(TopRight) COLOURED("Red")
ENDIF
//=====================================================
// COLUMN 3 (rightmost): VOLATILITY - ATR, BB Width, Efficiency Ratio
//=====================================================
DRAWTEXT("VOLATILITY", -152, -10, SansSerif, Bold, 13) ANCHOR(TopRight) COLOURED("Teal")
// -- ATR (vs its own 50-period average) --
DRAWRECTANGLE(-295, -25, -10, -80) ANCHOR(TopRight) COLOURED("LightGray") BORDERCOLOR("Black")
DRAWTEXT("ATR (#ATRperiod#)", -152, -33, SansSerif, Bold, 11) ANCHOR(TopRight) COLOURED("Black")
DRAWTEXT(" 3M | 5M | 15M | 1H | 4H | 1D ", -152, -49, SansSerif, Bold, 10) ANCHOR(TopRight) COLOURED("Black")
IF condATR3M THEN
DRAWTEXT(" HIGH ", -260, -65, SansSerif, Bold, 10) ANCHOR(TopRight) COLOURED(255,69,0)
ELSE
DRAWTEXT(" LOW ", -260, -65, SansSerif, Bold, 10) ANCHOR(TopRight) COLOURED(70,130,180)
ENDIF
IF condATR5M THEN
DRAWTEXT(" HIGH ", -215, -65, SansSerif, Bold, 10) ANCHOR(TopRight) COLOURED(255,69,0)
ELSE
DRAWTEXT(" LOW ", -215, -65, SansSerif, Bold, 10) ANCHOR(TopRight) COLOURED(70,130,180)
ENDIF
IF condATR15M THEN
DRAWTEXT(" HIGH ", -170, -65, SansSerif, Bold, 10) ANCHOR(TopRight) COLOURED(255,69,0)
ELSE
DRAWTEXT(" LOW ", -170, -65, SansSerif, Bold, 10) ANCHOR(TopRight) COLOURED(70,130,180)
ENDIF
IF condATR1H THEN
DRAWTEXT(" HIGH ", -125, -65, SansSerif, Bold, 10) ANCHOR(TopRight) COLOURED(255,69,0)
ELSE
DRAWTEXT(" LOW ", -125, -65, SansSerif, Bold, 10) ANCHOR(TopRight) COLOURED(70,130,180)
ENDIF
IF condATR4H THEN
DRAWTEXT(" HIGH ", -80, -65, SansSerif, Bold, 10) ANCHOR(TopRight) COLOURED(255,69,0)
ELSE
DRAWTEXT(" LOW ", -80, -65, SansSerif, Bold, 10) ANCHOR(TopRight) COLOURED(70,130,180)
ENDIF
IF condATR1D THEN
DRAWTEXT(" HIGH ", -35, -65, SansSerif, Bold, 10) ANCHOR(TopRight) COLOURED(255,69,0)
ELSE
DRAWTEXT(" LOW ", -35, -65, SansSerif, Bold, 10) ANCHOR(TopRight) COLOURED(70,130,180)
ENDIF
// -- Bollinger Band Width (squeeze vs its own 50-period average) --
DRAWRECTANGLE(-295, -85, -10, -140) ANCHOR(TopRight) COLOURED("LightGray") BORDERCOLOR("Black")
DRAWTEXT("BB Width (#BBperiod#)", -152, -93, SansSerif, Bold, 11) ANCHOR(TopRight) COLOURED("Black")
DRAWTEXT(" 3M | 5M | 15M | 1H | 4H | 1D ", -152, -109, SansSerif, Bold, 10) ANCHOR(TopRight) COLOURED("Black")
IF condBBW3M THEN
DRAWTEXT(" SQZ ", -260, -125, SansSerif, Bold, 10) ANCHOR(TopRight) COLOURED(255,140,0)
ELSE
DRAWTEXT(" NORM ", -260, -125, SansSerif, Bold, 10) ANCHOR(TopRight) COLOURED(128,128,128)
ENDIF
IF condBBW5M THEN
DRAWTEXT(" SQZ ", -215, -125, SansSerif, Bold, 10) ANCHOR(TopRight) COLOURED(255,140,0)
ELSE
DRAWTEXT(" NORM ", -215, -125, SansSerif, Bold, 10) ANCHOR(TopRight) COLOURED(128,128,128)
ENDIF
IF condBBW15M THEN
DRAWTEXT(" SQZ ", -170, -125, SansSerif, Bold, 10) ANCHOR(TopRight) COLOURED(255,140,0)
ELSE
DRAWTEXT(" NORM ", -170, -125, SansSerif, Bold, 10) ANCHOR(TopRight) COLOURED(128,128,128)
ENDIF
IF condBBW1H THEN
DRAWTEXT(" SQZ ", -125, -125, SansSerif, Bold, 10) ANCHOR(TopRight) COLOURED(255,140,0)
ELSE
DRAWTEXT(" NORM ", -125, -125, SansSerif, Bold, 10) ANCHOR(TopRight) COLOURED(128,128,128)
ENDIF
IF condBBW4H THEN
DRAWTEXT(" SQZ ", -80, -125, SansSerif, Bold, 10) ANCHOR(TopRight) COLOURED(255,140,0)
ELSE
DRAWTEXT(" NORM ", -80, -125, SansSerif, Bold, 10) ANCHOR(TopRight) COLOURED(128,128,128)
ENDIF
IF condBBW1D THEN
DRAWTEXT(" SQZ ", -35, -125, SansSerif, Bold, 10) ANCHOR(TopRight) COLOURED(255,140,0)
ELSE
DRAWTEXT(" NORM ", -35, -125, SansSerif, Bold, 10) ANCHOR(TopRight) COLOURED(128,128,128)
ENDIF
// -- Efficiency Ratio (trend efficiency vs chop, Kaufman) --
DRAWRECTANGLE(-295, -145, -10, -200) ANCHOR(TopRight) COLOURED("LightGray") BORDERCOLOR("Black")
DRAWTEXT("Efficiency (#ERperiod#)", -152, -153, SansSerif, Bold, 11) ANCHOR(TopRight) COLOURED("Black")
DRAWTEXT(" 3M | 5M | 15M | 1H | 4H | 1D ", -152, -169, SansSerif, Bold, 10) ANCHOR(TopRight) COLOURED("Black")
IF condER3M THEN
DRAWTEXT(" TREND ", -260, -185, SansSerif, Bold, 10) ANCHOR(TopRight) COLOURED(65,105,225)
ELSE
DRAWTEXT(" CHOP ", -260, -185, SansSerif, Bold, 10) ANCHOR(TopRight) COLOURED(128,128,128)
ENDIF
IF condER5M THEN
DRAWTEXT(" TREND ", -215, -185, SansSerif, Bold, 10) ANCHOR(TopRight) COLOURED(65,105,225)
ELSE
DRAWTEXT(" CHOP ", -215, -185, SansSerif, Bold, 10) ANCHOR(TopRight) COLOURED(128,128,128)
ENDIF
IF condER15M THEN
DRAWTEXT(" TREND ", -170, -185, SansSerif, Bold, 10) ANCHOR(TopRight) COLOURED(65,105,225)
ELSE
DRAWTEXT(" CHOP ", -170, -185, SansSerif, Bold, 10) ANCHOR(TopRight) COLOURED(128,128,128)
ENDIF
IF condER1H THEN
DRAWTEXT(" TREND ", -125, -185, SansSerif, Bold, 10) ANCHOR(TopRight) COLOURED(65,105,225)
ELSE
DRAWTEXT(" CHOP ", -125, -185, SansSerif, Bold, 10) ANCHOR(TopRight) COLOURED(128,128,128)
ENDIF
IF condER4H THEN
DRAWTEXT(" TREND ", -80, -185, SansSerif, Bold, 10) ANCHOR(TopRight) COLOURED(65,105,225)
ELSE
DRAWTEXT(" CHOP ", -80, -185, SansSerif, Bold, 10) ANCHOR(TopRight) COLOURED(128,128,128)
ENDIF
IF condER1D THEN
DRAWTEXT(" TREND ", -35, -185, SansSerif, Bold, 10) ANCHOR(TopRight) COLOURED(65,105,225)
ELSE
DRAWTEXT(" CHOP ", -35, -185, SansSerif, Bold, 10) ANCHOR(TopRight) COLOURED(128,128,128)
ENDIF
//=====================================================
// COMBINED ADVICE: score of SMA50 + SuperTrend +
// RSI + Williams %R + MACD (-5 .. +5), upgraded to
// STRONG when ADX on that timeframe also shows "STRONG"
//=====================================================
DRAWRECTANGLE(-885, -205, -10, -260) ANCHOR(TopRight) COLOURED("LightGray") BORDERCOLOR("Black")
DRAWTEXT("COMBINED ADVICE", -447, -213, SansSerif, Bold, 12) ANCHOR(TopRight) COLOURED("Black")
DRAWTEXT(" 3M | 5M | 15M | 1H | 4H | 1D ", -447, -229, SansSerif, Bold, 10) ANCHOR(TopRight) COLOURED("Black")
IF score3M >= 4 AND condADX3M THEN
DRAWTEXT(" STRONG BUY ", -845, -245, SansSerif, Bold, 10) ANCHOR(TopRight) COLOURED(0,128,0)
ELSIF score3M >= 2 THEN
DRAWTEXT(" BUY ", -845, -245, SansSerif, Bold, 10) ANCHOR(TopRight) COLOURED("Green")
ELSIF score3M <= -4 AND condADX3M THEN
DRAWTEXT(" STRONG SELL ", -845, -245, SansSerif, Bold, 10) ANCHOR(TopRight) COLOURED(139,0,0)
ELSIF score3M <= -2 THEN
DRAWTEXT(" SELL ", -845, -245, SansSerif, Bold, 10) ANCHOR(TopRight) COLOURED("Red")
ELSE
DRAWTEXT(" NEUTRAL ", -845, -245, SansSerif, Bold, 10) ANCHOR(TopRight) COLOURED(128,128,128)
ENDIF
IF score5M >= 4 AND condADX5M THEN
DRAWTEXT(" STRONG BUY ", -685, -245, SansSerif, Bold, 10) ANCHOR(TopRight) COLOURED(0,128,0)
ELSIF score5M >= 2 THEN
DRAWTEXT(" BUY ", -685, -245, SansSerif, Bold, 10) ANCHOR(TopRight) COLOURED("Green")
ELSIF score5M <= -4 AND condADX5M THEN
DRAWTEXT(" STRONG SELL ", -685, -245, SansSerif, Bold, 10) ANCHOR(TopRight) COLOURED(139,0,0)
ELSIF score5M <= -2 THEN
DRAWTEXT(" SELL ", -685, -245, SansSerif, Bold, 10) ANCHOR(TopRight) COLOURED("Red")
ELSE
DRAWTEXT(" NEUTRAL ", -685, -245, SansSerif, Bold, 10) ANCHOR(TopRight) COLOURED(128,128,128)
ENDIF
IF score15M >= 4 AND condADX15M THEN
DRAWTEXT(" STRONG BUY ", -525, -245, SansSerif, Bold, 10) ANCHOR(TopRight) COLOURED(0,128,0)
ELSIF score15M >= 2 THEN
DRAWTEXT(" BUY ", -525, -245, SansSerif, Bold, 10) ANCHOR(TopRight) COLOURED("Green")
ELSIF score15M <= -4 AND condADX15M THEN
DRAWTEXT(" STRONG SELL ", -525, -245, SansSerif, Bold, 10) ANCHOR(TopRight) COLOURED(139,0,0)
ELSIF score15M <= -2 THEN
DRAWTEXT(" SELL ", -525, -245, SansSerif, Bold, 10) ANCHOR(TopRight) COLOURED("Red")
ELSE
DRAWTEXT(" NEUTRAL ", -525, -245, SansSerif, Bold, 10) ANCHOR(TopRight) COLOURED(128,128,128)
ENDIF
IF score1H >= 4 AND condADX1H THEN
DRAWTEXT(" STRONG BUY ", -365, -245, SansSerif, Bold, 10) ANCHOR(TopRight) COLOURED(0,128,0)
ELSIF score1H >= 2 THEN
DRAWTEXT(" BUY ", -365, -245, SansSerif, Bold, 10) ANCHOR(TopRight) COLOURED("Green")
ELSIF score1H <= -4 AND condADX1H THEN
DRAWTEXT(" STRONG SELL ", -365, -245, SansSerif, Bold, 10) ANCHOR(TopRight) COLOURED(139,0,0)
ELSIF score1H <= -2 THEN
DRAWTEXT(" SELL ", -365, -245, SansSerif, Bold, 10) ANCHOR(TopRight) COLOURED("Red")
ELSE
DRAWTEXT(" NEUTRAL ", -365, -245, SansSerif, Bold, 10) ANCHOR(TopRight) COLOURED(128,128,128)
ENDIF
IF score4H >= 4 AND condADX4H THEN
DRAWTEXT(" STRONG BUY ", -205, -245, SansSerif, Bold, 10) ANCHOR(TopRight) COLOURED(0,128,0)
ELSIF score4H >= 2 THEN
DRAWTEXT(" BUY ", -205, -245, SansSerif, Bold, 10) ANCHOR(TopRight) COLOURED("Green")
ELSIF score4H <= -4 AND condADX4H THEN
DRAWTEXT(" STRONG SELL ", -205, -245, SansSerif, Bold, 10) ANCHOR(TopRight) COLOURED(139,0,0)
ELSIF score4H <= -2 THEN
DRAWTEXT(" SELL ", -205, -245, SansSerif, Bold, 10) ANCHOR(TopRight) COLOURED("Red")
ELSE
DRAWTEXT(" NEUTRAL ", -205, -245, SansSerif, Bold, 10) ANCHOR(TopRight) COLOURED(128,128,128)
ENDIF
IF score1D >= 4 AND condADX1D THEN
DRAWTEXT(" STRONG BUY ", -45, -245, SansSerif, Bold, 10) ANCHOR(TopRight) COLOURED(0,128,0)
ELSIF score1D >= 2 THEN
DRAWTEXT(" BUY ", -45, -245, SansSerif, Bold, 10) ANCHOR(TopRight) COLOURED("Green")
ELSIF score1D <= -4 AND condADX1D THEN
DRAWTEXT(" STRONG SELL ", -45, -245, SansSerif, Bold, 10) ANCHOR(TopRight) COLOURED(139,0,0)
ELSIF score1D <= -2 THEN
DRAWTEXT(" SELL ", -45, -245, SansSerif, Bold, 10) ANCHOR(TopRight) COLOURED("Red")
ELSE
DRAWTEXT(" NEUTRAL ", -45, -245, SansSerif, Bold, 10) ANCHOR(TopRight) COLOURED(128,128,128)
ENDIF
ENDIF
RETURN

Code Logic

  • Dashboard layout variables: Define where the panel is drawn (x/y position), its size, and spacing so multiple rows/columns can be displayed consistently.
  • Indicator calculations: Each indicator (e.g., RSI, MACD, moving averages, trend filters) is computed once per bar and converted into a simple state (bullish/bearish/neutral) suitable for dashboard display.
  • Signal normalization: Raw indicator values are mapped to standardized labels or flags so different indicators can be compared at a glance.
  • Color coding: Uses conditional logic to assign colors based on each indicator’s state, making the dashboard readable without interpreting raw numbers.
  • Text rendering / drawing commands: Prints indicator names and their current state into the panel area using ProRealTime drawing/text functions, updating automatically on each new bar.
  • Optional alerts / thresholds: If present, thresholds (e.g., RSI overbought/oversold) drive the displayed status and can be extended to trigger alerts without changing the dashboard structure.

What is a Snippet? A snippet is a small, reusable chunk of code designed to solve specific tasks quickly. Think of it as a shortcut that helps you achieve your coding goals without reinventing the wheel. How to Use: Simply copy the snippet and paste it into your project where needed. Don't forget to tweak it to fit your context. Snippets are not just time-savers; they're also learning tools to help you become a more efficient coder.
crom Junior
Currently debugging life, so my bio is on hold. Check back after the next commit for an update.
Author’s Profile

Comments

Search Snippets

Showing some results...
Sorry, no result found!

Snippets Categories

global
35
indicator
135
strategy
171

Recent Snippets

A multi indicator Dashboard for ProRealTime
indicator
This snippet creates a compact on-chart dashboard that aggregates multiple indicator states into a single, readable [...]
How to Track Up/Down Cumulative Volume Inside Each Candle (Tick Volume Delta)
indicator
This snippet separates the real-time, intra-candle volume into up-volume and down-volume based on whether the last [...]
How to Create a Simple MTF Trend Dashboard with EMA and SMA
indicator
This indicator builds a compact multi-timeframe (MTF) dashboard that shows whether price is trading above or below a [...]
How to Display Per-Bar Volume Accumulation in Real Time (Intrabar Updates)
global
This snippet tracks and displays the current bar’s accumulated volume while the bar is still forming, instead of only [...]
Ticks Counter: Count Tick Updates Per Bar on Tick or Time Charts
global
This snippet counts how many tick updates have occurred for the current bar by incrementing a per-bar counter on each [...]
ProRealCode ProRealCode
Loading...