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
Developer by day, aspiring writer by night. Still compiling my bio... Error 404: presentation not found.
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 [...]
Logo Logo
Loading...