The RSI tells you a number. You look down at the panel, see 63, and the question you actually have is the one it cannot answer: how far does price have to go before this is overbought?
RSI Master, by SimpleAlgoAI, answers it on the price chart itself. The RSI formula can be solved backwards: given the current averages of gains and losses, there is exactly one close that would put the RSI at 70 on the next bar, and one that would put it at 30. Those two prices are drawn as the edges of an overbought zone above price and an oversold zone below it. When price is inside a band, the market is overbought or oversold; the distance to each band is the room price has before it gets there.
Candles warm toward the overbought colour and cool toward the oversold colour as the RSI moves, dots mark the first close into a zone, arrows mark the exits, and a panel in a companion indicator says it all in words, with this chart’s own record of what happened the last times price reached a zone.
The RSI, turned into a price. The RSI is 100 − 100 / (1 + up / down), where up and down are Wilder’s averages of the gains and the losses over 14 bars. For a target level L, the ratio up / down has to become r = L / (100 − L). If the target is above the current RSI, the next close must rise; the rise u that does it is (14 − 1) × (r × down − up), and the edge is close + u. If the target is below the current RSI, the next close must fall by (14 − 1) × (up / r − down). The edges for 70, 30 and 50 are smoothed with a 3-bar EMA so they follow price bar by bar without jitter.
The zones. The overbought zone glows from its edge upwards and fades out 2.2 ATR above it; the oversold zone does the same downwards. Each edge has a soft halo and a solid line.
The candles. Through the middle of the range the candles stay a soft neutral grey (up candles a shade lighter than down candles). From RSI 56 to 70 they warm toward the overbought colour, from 44 to 30 they cool toward the oversold colour, and the colour comes on late and builds fast, so the chart stays calm until the RSI is actually getting somewhere.
Dots and arrows. A dot marks the first close into a zone. An arrow marks the exit, the classic RSI signal: down out of overbought, up out of oversold. When price flickers in and out of a zone over a few bars, only the first exit gets an arrow. Both are drawn once the bar has closed.
The record. Every entry into a zone is judged: did price reverse a full ATR from the entry close first, or keep going a full ATR first? An entry still undecided after 10 bars is dropped. The last 10 verdicts of each zone are kept, so the panel can say, for this chart and this timeframe, how often an overbought reading has actually turned price around.
RSI
Look
The panel
RSI Master Panel is a companion indicator: add it to the same price chart as RSI Master, with the same settings. showPanel (default 1), panelPos (default 2: 1 = top left, 2 = top right, 3 = bottom left, 4 = bottom right) and panelSize (default 2: 1 = small, 2 = normal, 3 = large).
The panel rows are the price, the RSI and its direction over the last 3 bars, where overbought and oversold begin with the distance in ATRs, the record of the nearer zone, and the read.
//-----------------------------------------------------------------------
//PRC_RSI Master
//version = 0
//02.11.2026
//Iván González @ www.prorealcode.com
//Author: SimpleAlgoAI
//Sharing ProRealTime knowledge
//-----------------------------------------------------------------------
// Apply ON THE PRICE CHART.
//
// RSI turned into price: the overbought and oversold edges are the prices a
// close would have to reach for the RSI to hit those levels on the next bar,
// worked out exactly from the RSI formula. The overbought zone glows above
// its edge and the oversold zone below its edge; candles warm toward the
// overbought colour and cool toward the oversold colour as the RSI moves.
// Dots mark the first close into a zone, arrows the exits.
//
// The panel lives in a second indicator, PRC_RSI Master
// Panel, to be added to the same chart: the candles are drawn bar by bar
// with DRAWCANDLE, which cannot share an indicator with a panel that is
// redrawn on the last bar only.
//
// Dots and arrows are drawn on the bar where they happened once that bar
// has CLOSED (when the next one opens), so they never appear and vanish
// inside a bar.
//-----------------------------------------------------------------------
// ===================== INPUTS =====================
// --- RSI ---
lenIn = 14 // RSI length (2 to 100)
obIn = 70 // overbought level
osIn = 30 // oversold level
smIn = 3 // smoothing of the zone edges, in bars (1 to 10)
// --- Look ---
themeIn = 1 // 1 = Neon, 2 = Classic, 3 = Aurora, 4 = Ice, 5 = Custom (the two colours below)
cuOsR = 0 // custom oversold colour #00FFA3
cuOsG = 255
cuOsB = 163
cuObR = 255 // custom overbought colour #FF3D71
cuObG = 61
cuObB = 113
bright = 3 // brightness (1 to 5)
depthIn = 2.2 // how far the zone glow reaches past its edge, in ATRs (0.5 to 6)
showCandles = 1 // 1 = RSI candles
showMid = 0 // 1 = midline (RSI 50)
showDots = 1 // 1 = entry dots
showTurns = 1 // 1 = exit arrows
// ===================== COLOURS =====================
IF themeIn = 2 THEN
osR = 0 // #00FF31
osG = 255
osB = 49
obR = 255 // #FF0013
obG = 0
obB = 19
ELSIF themeIn = 3 THEN
osR = 52 // #34D399
osG = 211
osB = 153
obR = 244 // #F472B6
obG = 114
obB = 182
ELSIF themeIn = 4 THEN
osR = 125 // #7DD3FC
osG = 211
osB = 252
obR = 253 // #FDA4AF
obG = 164
obB = 175
ELSIF themeIn = 5 THEN
osR = cuOsR
osG = cuOsG
osB = cuOsB
obR = cuObR
obG = cuObG
obB = cuObB
ELSE
osR = 0 // Neon: #00FFA3 oversold, #FF3D71 overbought
osG = 255
osB = 163
obR = 255
obG = 61
obB = 113
ENDIF
brightN = max(1, min(5, round(bright)))
brightMul = 0.4 + 0.2 * brightN
// Arrows and dots sit straight on the chart: a zone colour too light to read on a white background
// (the mint, the Ice theme) is darkened just enough, to a contrast of 4 to 1 against white; a colour
// that already reads is kept
lumS = 0.2126 * pow(osR / 255, 2.2) + 0.7152 * pow(osG / 255, 2.2) + 0.0722 * pow(osB / 255, 2.2)
kS = 1
IF lumS > 0.2125 THEN
kS = pow(0.2125 / lumS, 1 / 2.2)
ENDIF
osTR = round(osR * kS)
osTG = round(osG * kS)
osTB = round(osB * kS)
lumO = 0.2126 * pow(obR / 255, 2.2) + 0.7152 * pow(obG / 255, 2.2) + 0.0722 * pow(obB / 255, 2.2)
kO = 1
IF lumO > 0.2125 THEN
kO = pow(0.2125 / lumO, 1 / 2.2)
ENDIF
obTR = round(obR * kO)
obTG = round(obG * kO)
obTB = round(obB * kO)
// ===================== RSI, AND THE PRICES BEHIND IT =====================
lnR = max(2, min(100, round(lenIn)))
smN = max(1, min(10, round(smIn)))
// ATR(14), the bar range until it exists, never below one tick
atr14 = averagetruerange[14](close)
IF barindex >= 13 THEN
atrV = atr14
ELSE
atrV = high - low
ENDIF
atrV = max(atrV, ticksize)
// Wilder's averages of the gains and losses, seeded with the simple mean of the first lnR changes
IF barindex >= 1 THEN
chg = close - close[1]
ELSE
chg = 0
ENDIF
gainV = max(chg, 0)
lossV = max(0 - chg, 0)
IF barindex = lnR THEN
upAv = summation[lnR](gainV) / lnR
dnAv = summation[lnR](lossV) / lnR
ELSIF barindex > lnR THEN
upAv = (upAv * (lnR - 1) + gainV) / lnR
dnAv = (dnAv * (lnR - 1) + lossV) / lnR
ENDIF
rsiOk = 0
rsiV = 50
IF barindex >= lnR THEN
rsiOk = 1
IF dnAv = 0 THEN
rsiV = 100
ELSIF upAv = 0 THEN
rsiV = 0
ELSE
rsiV = 100 - 100 / (1 + upAv / dnAv)
ENDIF
ENDIF
// The close next bar that would put the RSI exactly at a level: a rise if the level is above where
// the RSI sits, a fall if it is below, straight from the RSI formula
obRaw = close
osRaw = close
midRaw = close
IF rsiOk = 1 THEN
rL = obIn / (100 - obIn)
uL = (lnR - 1) * (rL * dnAv - upAv)
IF uL >= 0 THEN
obRaw = close + uL
ELSE
obRaw = close - (lnR - 1) * (upAv / rL - dnAv)
ENDIF
rL = osIn / (100 - osIn)
uL = (lnR - 1) * (rL * dnAv - upAv)
IF uL >= 0 THEN
osRaw = close + uL
ELSE
osRaw = close - (lnR - 1) * (upAv / rL - dnAv)
ENDIF
rL = 1
uL = (lnR - 1) * (rL * dnAv - upAv)
IF uL >= 0 THEN
midRaw = close + uL
ELSE
midRaw = close - (lnR - 1) * (upAv / rL - dnAv)
ENDIF
ENDIF
// EMA of each edge, seeded with the simple mean of its first smN values
lvlStart = lnR + smN - 1
aSm = 2 / (smN + 1)
lvlOk = 0
IF barindex = lvlStart THEN
obE = summation[smN](obRaw) / smN
osE = summation[smN](osRaw) / smN
midE = summation[smN](midRaw) / smN
ELSIF barindex > lvlStart THEN
obE = obE + aSm * (obRaw - obE)
osE = osE + aSm * (osRaw - osE)
midE = midE + aSm * (midRaw - midE)
ENDIF
IF barindex >= lvlStart THEN
lvlOk = 1
ELSE
obE = close
osE = close
midE = close
ENDIF
inOB = 0
inOS = 0
IF rsiOk = 1 THEN
IF rsiV >= obIn THEN
inOB = 1
ENDIF
IF rsiV <= osIn THEN
inOS = 1
ENDIF
ENDIF
enterOB = 0
exitOB = 0
enterOS = 0
exitOS = 0
IF barindex > lnR THEN
IF inOB = 1 AND inOB[1] = 0 THEN
enterOB = 1
ENDIF
IF inOB = 0 AND inOB[1] = 1 THEN
exitOB = 1
ENDIF
IF inOS = 1 AND inOS[1] = 0 THEN
enterOS = 1
ENDIF
IF inOS = 0 AND inOS[1] = 1 THEN
exitOS = 1
ENDIF
ENDIF
ONCE obSince = 0 - 1
ONCE osSince = 0 - 1
ONCE obLeft = 0 - 1
ONCE osLeft = 0 - 1
IF enterOB = 1 THEN
obSince = barindex
ENDIF
IF enterOS = 1 THEN
osSince = barindex
ENDIF
IF exitOB = 1 THEN
obLeft = barindex
ENDIF
IF exitOS = 1 THEN
osLeft = barindex
ENDIF
// ===================== DRAWING =====================
// --- The zones: full at the edge, fading away from price, in bands of constant opacity ---
obTop = obE + depthIn * atrV
osBot = osE - depthIn * atrV
zA = 0
IF lvlOk = 1 THEN
zA = round(255 * min(max(0.26 * brightMul, 0), 1))
ENDIF
zStep = depthIn * atrV / 8
COLORBETWEEN(obE, obE + zStep, obR, obG, obB, round(zA * 15 / 16))
COLORBETWEEN(obE + zStep, obE + 2 * zStep, obR, obG, obB, round(zA * 13 / 16))
COLORBETWEEN(obE + 2 * zStep, obE + 3 * zStep, obR, obG, obB, round(zA * 11 / 16))
COLORBETWEEN(obE + 3 * zStep, obE + 4 * zStep, obR, obG, obB, round(zA * 9 / 16))
COLORBETWEEN(obE + 4 * zStep, obE + 5 * zStep, obR, obG, obB, round(zA * 7 / 16))
COLORBETWEEN(obE + 5 * zStep, obE + 6 * zStep, obR, obG, obB, round(zA * 5 / 16))
COLORBETWEEN(obE + 6 * zStep, obE + 7 * zStep, obR, obG, obB, round(zA * 3 / 16))
COLORBETWEEN(obE + 7 * zStep, obTop, obR, obG, obB, round(zA * 1 / 16))
COLORBETWEEN(osE, osE - zStep, osR, osG, osB, round(zA * 15 / 16))
COLORBETWEEN(osE - zStep, osE - 2 * zStep, osR, osG, osB, round(zA * 13 / 16))
COLORBETWEEN(osE - 2 * zStep, osE - 3 * zStep, osR, osG, osB, round(zA * 11 / 16))
COLORBETWEEN(osE - 3 * zStep, osE - 4 * zStep, osR, osG, osB, round(zA * 9 / 16))
COLORBETWEEN(osE - 4 * zStep, osE - 5 * zStep, osR, osG, osB, round(zA * 7 / 16))
COLORBETWEEN(osE - 5 * zStep, osE - 6 * zStep, osR, osG, osB, round(zA * 5 / 16))
COLORBETWEEN(osE - 6 * zStep, osE - 7 * zStep, osR, osG, osB, round(zA * 3 / 16))
COLORBETWEEN(osE - 7 * zStep, osBot, osR, osG, osB, round(zA * 1 / 16))
// --- The candles: a soft neutral through the middle of the range, warming to the overbought colour
// over the last stretch before the zone and cooling to the oversold colour on the way down, with up
// candles a shade brighter than down candles ---
IF showCandles = 1 AND rsiOk = 1 THEN
IF close >= open THEN
nuR = 163 // #A3ABBD
nuG = 171
nuB = 189
ELSE
nuR = 95 // #5F6677
nuG = 102
nuB = 119
ENDIF
warmFrom = 50 + (obIn - 50) * 0.3
coolFrom = 50 - (50 - osIn) * 0.3
IF rsiV >= 50 THEN
tW = pow(min(max((rsiV - warmFrom) / (obIn - warmFrom), 0), 1), 1.4)
cdR = nuR + (obR - nuR) * tW
cdG = nuG + (obG - nuG) * tW
cdB = nuB + (obB - nuB) * tW
ELSE
tC = pow(min(max((coolFrom - rsiV) / (coolFrom - osIn), 0), 1), 1.4)
cdR = nuR + (osR - nuR) * tC
cdG = nuG + (osG - nuG) * tC
cdB = nuB + (osB - nuB) * tC
ENDIF
DRAWCANDLE(open, high, low, close) COLOURED(cdR, cdG, cdB) BORDERCOLOR(cdR, cdG, cdB)
ENDIF
// --- Exit arrows: when price flickers in and out of a zone over a few bars, only the first exit gets
// an arrow ---
ONCE lastArOB = 0 - 10
ONCE lastArOS = 0 - 10
arrowOB = 0
arrowOS = 0
IF exitOB = 1 AND barindex - lastArOB > 3 THEN
arrowOB = 1
lastArOB = barindex
ENDIF
IF exitOS = 1 AND barindex - lastArOS > 3 THEN
arrowOS = 1
lastArOS = barindex
ENDIF
// --- Events of the bar that has just CLOSED (offset 1), drawn on that bar ---
IF barindex > lvlStart THEN
xE = barindex - 1
// The first close into a zone: a soft halo and a solid dot
IF showDots = 1 AND enterOB[1] = 1 THEN
DRAWPOINT(xE, high[1], 4) COLOURED(obR, obG, obB, round(255 * min(0.18 * brightMul, 1)))
DRAWPOINT(xE, high[1], 2) COLOURED(obTR, obTG, obTB, 255)
ENDIF
IF showDots = 1 AND enterOS[1] = 1 THEN
DRAWPOINT(xE, low[1], 4) COLOURED(osR, osG, osB, round(255 * min(0.18 * brightMul, 1)))
DRAWPOINT(xE, low[1], 2) COLOURED(osTR, osTG, osTB, 255)
ENDIF
// Where price leaves a zone: down out of overbought, up out of oversold
IF showTurns = 1 AND arrowOB[1] = 1 THEN
DRAWTEXT("▼", xE, high[1] + 0.5 * atrV[1], dialog, bold, 12) COLOURED(obTR, obTG, obTB, 255)
ENDIF
IF showTurns = 1 AND arrowOS[1] = 1 THEN
DRAWTEXT("▲", xE, low[1] - 0.5 * atrV[1], dialog, bold, 12) COLOURED(osTR, osTG, osTB, 255)
ENDIF
ENDIF
// --- Returned series: the edges with a soft halo, and the midline. Before the RSI exists they sit on
// the close with alpha 0, so they do not squash the price scale ---
edA = 0
glA = 0
IF lvlOk = 1 THEN
edA = 255
glA = round(255 * min(max(0.16 * brightMul, 0), 1))
ENDIF
mdA = 0
IF showMid = 1 AND lvlOk = 1 THEN
mdA = 115
ENDIF
RETURN obE COLOURED(obR, obG, obB, glA) STYLE(line, 5) AS "Overbought glow", obE COLOURED(obR, obG, obB, edA) STYLE(line, 2) AS "Overbought", osE COLOURED(osR, osG, osB, glA) STYLE(line, 5) AS "Oversold glow", osE COLOURED(osR, osG, osB, edA) STYLE(line, 2) AS "Oversold", midE COLOURED(123, 156, 255, mdA) STYLE(point, 1) AS "Midline"
//-----------------------------------------------------------------------
//PRC_RSI Master Panel
//version = 0
//02.11.2026
//Iván González @ www.prorealcode.com
//Author: SimpleAlgoAI
//Sharing ProRealTime knowledge
//-----------------------------------------------------------------------
// Companion of PRC_RSI Master: the panel that says the
// reading in words, with this chart's own record of what happened the last
// times price reached a zone.
// Add it to the SAME price chart as PRC_RSI Master and give both the same
// settings.
//
// It runs the very same calculation as PRC_RSI Master (same inputs, same
// engine) and draws only the panel, on the last bar. It lives in its own
// indicator because the RSI candles are drawn bar by bar with DRAWCANDLE,
// and an indicator that redraws a panel on the last bar only
// (drawonlastbaronly) cannot draw those candles.
//-----------------------------------------------------------------------
defparam drawonlastbaronly = true
// --- Panel ---
showPanel = 1 // 1 = panel
panelPos = 2 // 1 = top left, 2 = top right, 3 = bottom left, 4 = bottom right
panelSize = 2 // 1 = small, 2 = normal, 3 = large
// ===================== INPUTS =====================
// --- RSI ---
lenIn = 14 // RSI length (2 to 100)
obIn = 70 // overbought level
osIn = 30 // oversold level
smIn = 3 // smoothing of the zone edges, in bars (1 to 10)
// --- Look ---
themeIn = 1 // 1 = Neon, 2 = Classic, 3 = Aurora, 4 = Ice, 5 = Custom (the two colours below)
cuOsR = 0 // custom oversold colour #00FFA3
cuOsG = 255
cuOsB = 163
cuObR = 255 // custom overbought colour #FF3D71
cuObG = 61
cuObB = 113
bright = 3 // brightness (1 to 5)
depthIn = 2.2 // how far the zone glow reaches past its edge, in ATRs (0.5 to 6)
showCandles = 1 // 1 = RSI candles
showMid = 0 // 1 = midline (RSI 50)
showDots = 1 // 1 = entry dots
showTurns = 1 // 1 = exit arrows
// ===================== COLOURS =====================
IF themeIn = 2 THEN
osR = 0 // #00FF31
osG = 255
osB = 49
obR = 255 // #FF0013
obG = 0
obB = 19
ELSIF themeIn = 3 THEN
osR = 52 // #34D399
osG = 211
osB = 153
obR = 244 // #F472B6
obG = 114
obB = 182
ELSIF themeIn = 4 THEN
osR = 125 // #7DD3FC
osG = 211
osB = 252
obR = 253 // #FDA4AF
obG = 164
obB = 175
ELSIF themeIn = 5 THEN
osR = cuOsR
osG = cuOsG
osB = cuOsB
obR = cuObR
obG = cuObG
obB = cuObB
ELSE
osR = 0 // Neon: #00FFA3 oversold, #FF3D71 overbought
osG = 255
osB = 163
obR = 255
obG = 61
obB = 113
ENDIF
brightN = max(1, min(5, round(bright)))
brightMul = 0.4 + 0.2 * brightN
// Arrows and dots sit straight on the chart: a zone colour too light to read on a white background
// (the mint, the Ice theme) is darkened just enough, to a contrast of 4 to 1 against white; a colour
// that already reads is kept
lumS = 0.2126 * pow(osR / 255, 2.2) + 0.7152 * pow(osG / 255, 2.2) + 0.0722 * pow(osB / 255, 2.2)
kS = 1
IF lumS > 0.2125 THEN
kS = pow(0.2125 / lumS, 1 / 2.2)
ENDIF
osTR = round(osR * kS)
osTG = round(osG * kS)
osTB = round(osB * kS)
lumO = 0.2126 * pow(obR / 255, 2.2) + 0.7152 * pow(obG / 255, 2.2) + 0.0722 * pow(obB / 255, 2.2)
kO = 1
IF lumO > 0.2125 THEN
kO = pow(0.2125 / lumO, 1 / 2.2)
ENDIF
obTR = round(obR * kO)
obTG = round(obG * kO)
obTB = round(obB * kO)
// ===================== RSI, AND THE PRICES BEHIND IT =====================
lnR = max(2, min(100, round(lenIn)))
smN = max(1, min(10, round(smIn)))
// ATR(14), the bar range until it exists, never below one tick
atr14 = averagetruerange[14](close)
IF barindex >= 13 THEN
atrV = atr14
ELSE
atrV = high - low
ENDIF
atrV = max(atrV, ticksize)
// Wilder's averages of the gains and losses, seeded with the simple mean of the first lnR changes
IF barindex >= 1 THEN
chg = close - close[1]
ELSE
chg = 0
ENDIF
gainV = max(chg, 0)
lossV = max(0 - chg, 0)
IF barindex = lnR THEN
upAv = summation[lnR](gainV) / lnR
dnAv = summation[lnR](lossV) / lnR
ELSIF barindex > lnR THEN
upAv = (upAv * (lnR - 1) + gainV) / lnR
dnAv = (dnAv * (lnR - 1) + lossV) / lnR
ENDIF
rsiOk = 0
rsiV = 50
IF barindex >= lnR THEN
rsiOk = 1
IF dnAv = 0 THEN
rsiV = 100
ELSIF upAv = 0 THEN
rsiV = 0
ELSE
rsiV = 100 - 100 / (1 + upAv / dnAv)
ENDIF
ENDIF
// The close next bar that would put the RSI exactly at a level: a rise if the level is above where
// the RSI sits, a fall if it is below, straight from the RSI formula
obRaw = close
osRaw = close
midRaw = close
IF rsiOk = 1 THEN
rL = obIn / (100 - obIn)
uL = (lnR - 1) * (rL * dnAv - upAv)
IF uL >= 0 THEN
obRaw = close + uL
ELSE
obRaw = close - (lnR - 1) * (upAv / rL - dnAv)
ENDIF
rL = osIn / (100 - osIn)
uL = (lnR - 1) * (rL * dnAv - upAv)
IF uL >= 0 THEN
osRaw = close + uL
ELSE
osRaw = close - (lnR - 1) * (upAv / rL - dnAv)
ENDIF
rL = 1
uL = (lnR - 1) * (rL * dnAv - upAv)
IF uL >= 0 THEN
midRaw = close + uL
ELSE
midRaw = close - (lnR - 1) * (upAv / rL - dnAv)
ENDIF
ENDIF
// EMA of each edge, seeded with the simple mean of its first smN values
lvlStart = lnR + smN - 1
aSm = 2 / (smN + 1)
lvlOk = 0
IF barindex = lvlStart THEN
obE = summation[smN](obRaw) / smN
osE = summation[smN](osRaw) / smN
midE = summation[smN](midRaw) / smN
ELSIF barindex > lvlStart THEN
obE = obE + aSm * (obRaw - obE)
osE = osE + aSm * (osRaw - osE)
midE = midE + aSm * (midRaw - midE)
ENDIF
IF barindex >= lvlStart THEN
lvlOk = 1
ELSE
obE = close
osE = close
midE = close
ENDIF
inOB = 0
inOS = 0
IF rsiOk = 1 THEN
IF rsiV >= obIn THEN
inOB = 1
ENDIF
IF rsiV <= osIn THEN
inOS = 1
ENDIF
ENDIF
enterOB = 0
exitOB = 0
enterOS = 0
exitOS = 0
IF barindex > lnR THEN
IF inOB = 1 AND inOB[1] = 0 THEN
enterOB = 1
ENDIF
IF inOB = 0 AND inOB[1] = 1 THEN
exitOB = 1
ENDIF
IF inOS = 1 AND inOS[1] = 0 THEN
enterOS = 1
ENDIF
IF inOS = 0 AND inOS[1] = 1 THEN
exitOS = 1
ENDIF
ENDIF
ONCE obSince = 0 - 1
ONCE osSince = 0 - 1
ONCE obLeft = 0 - 1
ONCE osLeft = 0 - 1
IF enterOB = 1 THEN
obSince = barindex
ENDIF
IF enterOS = 1 THEN
osSince = barindex
ENDIF
IF exitOB = 1 THEN
obLeft = barindex
ENDIF
IF exitOS = 1 THEN
osLeft = barindex
ENDIF
// ===================== THE RECORD =====================
// Each entry into a zone is judged on CLOSED bars: did price reverse a full ATR
// from the entry close first, or keep going a full ATR first? An entry still undecided after
// judgeBars bars is dropped. Everything that persists lives in arrays and is processed once per
// bar, because arrays are not rewound between ticks the way scalar variables are. On history every
// bar is processed on itself; on the live chart, the bar that has just closed is processed on the
// first tick of the next one.
judgeBars = 10 // an entry is judged within this many bars
moveAt = 1.0 // reversed or followed through once a close is this many ATRs from the entry
keepRec = 10 // entries remembered per zone
IF barindex = 0 THEN
$gS[0] = 0 - 1 // last bar processed
$gS[1] = 0 // entries waiting for a verdict
$gS[2] = 0 // overbought verdicts recorded so far
$gS[3] = 0 // oversold verdicts recorded so far
ENDIF
FOR pss = 1 DOWNTO 0 DO
ofs = pss
lastDone = $gS[0]
doIt = 0
IF ofs = 1 AND barindex >= 1 AND lastDone < barindex - 1 THEN
doIt = 1
ENDIF
IF ofs = 0 AND NOT islastbarupdate AND lastDone < barindex THEN
doIt = 1
ENDIF
IF doIt = 1 THEN
pB = barindex - ofs
$gS[0] = pB
pC = close[ofs]
nE = $gS[1]
IF enterOB[ofs] = 1 THEN
$evB[nE] = pB
$evS[nE] = 1
$evC[nE] = pC
$evA[nE] = atrV[ofs]
nE = nE + 1
ENDIF
IF enterOS[ofs] = 1 THEN
$evB[nE] = pB
$evS[nE] = 0 - 1
$evC[nE] = pC
$evA[nE] = atrV[ofs]
nE = nE + 1
ENDIF
wE = 0
IF nE > 0 THEN
FOR i = 0 TO nE - 1 DO
sd = $evS[i]
c0 = $evC[i]
a0 = $evA[i]
b0 = $evB[i]
vd = 0 - 1
IF sd = 1 THEN
IF pC <= c0 - moveAt * a0 THEN
vd = 1
ELSIF pC >= c0 + moveAt * a0 THEN
vd = 0
ENDIF
ELSE
IF pC >= c0 + moveAt * a0 THEN
vd = 1
ELSIF pC <= c0 - moveAt * a0 THEN
vd = 0
ENDIF
ENDIF
IF vd >= 0 OR pB - b0 >= judgeBars THEN
IF vd >= 0 THEN
IF sd = 1 THEN
nRo = $gS[2]
$obRec[nRo MOD keepRec] = vd
$gS[2] = nRo + 1
ELSE
nRs = $gS[3]
$osRec[nRs MOD keepRec] = vd
$gS[3] = nRs + 1
ENDIF
ENDIF
ELSE
// still waiting: kept, packed to the front of the list
$evB[wE] = b0
$evS[wE] = sd
$evC[wE] = c0
$evA[wE] = a0
wE = wE + 1
ENDIF
NEXT
ENDIF
$gS[1] = wE
ENDIF
NEXT
// ===================== PANEL =====================
IF islastbarupdate AND showPanel = 1 AND lvlOk = 1 THEN
// Panel background by theme, opaque, so it reads the same on a white chart
IF themeIn = 2 THEN
pnR = 35
pnG = 38
pnB = 47
ELSIF themeIn = 4 THEN
pnR = 30
pnG = 41
pnB = 59
ELSE
pnR = 38
pnG = 43
pnB = 56
ENDIF
// The record of each zone: the last keepRec verdicts (1 = reversed, 0 = followed through)
cntOb = $gS[2]
nOb = min(cntOb, keepRec)
rOb = 0
IF nOb > 0 THEN
FOR q = 0 TO nOb - 1 DO
rOb = rOb + $obRec[q]
NEXT
ENDIF
cntOs = $gS[3]
nOs = min(cntOs, keepRec)
rOs = 0
IF nOs > 0 THEN
FOR q = 0 TO nOs - 1 DO
rOs = rOs + $osRec[q]
NEXT
ENDIF
// RSI, and where it is heading over the last three bars
rsiR = round(rsiV)
IF rsiV > rsiV[3] + 1 THEN
v1 = 1
ELSIF rsiV < rsiV[3] - 1 THEN
v1 = 2
ELSE
v1 = 0
ENDIF
IF inOB = 1 THEN
c1R = obR
c1G = obG
c1B = obB
ELSIF inOS = 1 THEN
c1R = osR
c1G = osG
c1B = osB
ELSE
c1R = 209
c1G = 212
c1B = 220
ENDIF
// Distance to each zone, in ATRs
toOB = (obE - close) / atrV
toOS = (close - osE) / atrV
v2 = inOB
v3 = inOS
IF inOB = 1 THEN
dOv = round(0 - toOB * 10) / 10
ELSE
dOv = round(toOB * 10) / 10
ENDIF
IF inOS = 1 THEN
dSv = round(0 - toOS * 10) / 10
ELSE
dSv = round(toOS * 10) / 10
ENDIF
// The record for the nearer zone
upperSide = 0
IF rsiV >= 50 THEN
upperSide = 1
ENDIF
IF upperSide = 1 THEN
IF nOb = 0 THEN
v4 = 0
ELSIF nOb = 1 THEN
v4 = 1
ELSE
v4 = 2
ENDIF
ELSE
IF nOs = 0 THEN
v4 = 3
ELSIF nOs = 1 THEN
v4 = 4
ELSE
v4 = 5
ENDIF
ENDIF
// What this chart tends to do once it gets there (from five judged entries on)
tOb = 0
IF nOb >= 5 THEN
IF rOb / nOb >= 0.7 THEN
tOb = 1
ELSIF rOb / nOb <= 0.3 THEN
tOb = 2
ENDIF
ENDIF
tOs = 0
IF nOs >= 5 THEN
IF rOs / nOs >= 0.7 THEN
tOs = 1
ELSIF rOs / nOs <= 0.3 THEN
tOs = 2
ENDIF
ENDIF
// The read. The last bar is taken as the live one: an entry or exit on it "confirms on close"
nIn = 0
nAg = 0
IF inOB = 1 THEN
nIn = barindex - obSince
IF nIn = 0 THEN
v5 = 1
ELSIF nIn = 1 THEN
v5 = 2
ELSE
v5 = 3
ENDIF
ELSIF inOS = 1 THEN
nIn = barindex - osSince
IF nIn = 0 THEN
v5 = 4
ELSIF nIn = 1 THEN
v5 = 5
ELSE
v5 = 6
ENDIF
ELSIF obLeft >= 0 AND barindex - obLeft <= 5 THEN
nAg = barindex - obLeft
IF nAg = 0 THEN
v5 = 7
ELSIF nAg = 1 THEN
v5 = 8
ELSE
v5 = 9
ENDIF
ELSIF osLeft >= 0 AND barindex - osLeft <= 5 THEN
nAg = barindex - osLeft
IF nAg = 0 THEN
v5 = 10
ELSIF nAg = 1 THEN
v5 = 11
ELSE
v5 = 12
ENDIF
ELSIF upperSide = 1 THEN
IF toOB <= 0.5 THEN
v5 = 13 + tOb
ELSE
v5 = 16 + tOb
ENDIF
ELSE
IF toOS <= 0.5 THEN
v5 = 19 + tOs
ELSE
v5 = 22 + tOs
ENDIF
ENDIF
IF inOB = 1 OR (obLeft >= 0 AND barindex - obLeft <= 5 AND inOS = 0) THEN
c5R = obR
c5G = obG
c5B = obB
ELSIF inOS = 1 OR (osLeft >= 0 AND barindex - osLeft <= 5) THEN
c5R = osR
c5G = osG
c5B = osB
ELSE
c5R = 209
c5G = 212
c5B = 220
ENDIF
// Prices with the decimals the chart shows
IF ticksize >= 1 THEN
pxC = round(close)
pxO = round(obE)
pxS = round(osE)
pDec = 0
ELSIF ticksize >= 0.01 THEN
pxC = round(close * 100) / 100
pxO = round(obE * 100) / 100
pxS = round(osE * 100) / 100
pDec = 3
ELSE
pxC = round(close / ticksize) * ticksize
pxO = round(obE / ticksize) * ticksize
pxS = round(osE / ticksize) * ticksize
tkq = ticksize
pDec = 1
WHILE tkq < 0.9999999 AND pDec < 11 DO
tkq = tkq * 10
pDec = pDec + 1
WEND
ENDIF
// Text size and geometry: a monospaced font, so every character is chW pixels wide
IF panelSize = 1 THEN
pz = 10
ELSIF panelSize = 3 THEN
pz = 15
ELSE
pz = 12
ENDIF
chW = pz * 0.62
rowH = pz + 8
padX = 8
padY = 4
// Characters each number takes on screen: sign, digits, thousands separators, decimals and the
// space ProRealTime prints after an interpolated number
$nv[0] = pxC
$nd[0] = pDec
$nv[1] = pxO
$nd[1] = pDec
$nv[2] = pxS
$nd[2] = pDec
$nv[3] = rsiR
$nd[3] = 0
$nv[4] = dOv
$nd[4] = 2
$nv[5] = dSv
$nd[5] = 2
$nv[6] = rOb
$nd[6] = 0
$nv[7] = nOb
$nd[7] = 0
$nv[8] = rOs
$nd[8] = 0
$nv[9] = nOs
$nd[9] = 0
$nv[10] = nIn
$nd[10] = 0
$nv[11] = nAg
$nd[11] = 0
FOR q = 0 TO 11 DO
vq = abs($nv[q])
dq = 1
WHILE vq >= 10 DO
vq = vq / 10
dq = dq + 1
WEND
lq = dq + floor((dq - 1) / 3) + 1 + $nd[q]
IF $nv[q] < 0 THEN
lq = lq + 1
ENDIF
$nl[q] = lq
NEXT
// Length of the text each row reads
len0 = 0 + $nl[0]
IF v1 = 1 THEN
len1 = 8 + $nl[3]
ELSIF v1 = 2 THEN
len1 = 9 + $nl[3]
ELSE
len1 = 6 + $nl[3]
ENDIF
IF v2 = 1 THEN
len2 = 18 + $nl[1] + $nl[4]
ELSE
len2 = 10 + $nl[1] + $nl[4]
ENDIF
IF v3 = 1 THEN
len3 = 18 + $nl[2] + $nl[5]
ELSE
len3 = 10 + $nl[2] + $nl[5]
ENDIF
IF v4 = 0 THEN
len4 = 32
ELSIF v4 = 1 THEN
len4 = 36 + $nl[6] + $nl[7]
ELSIF v4 = 2 THEN
len4 = 37 + $nl[6] + $nl[7]
ELSIF v4 = 3 THEN
len4 = 30
ELSIF v4 = 4 THEN
len4 = 33 + $nl[8] + $nl[9]
ELSE
len4 = 34 + $nl[8] + $nl[9]
ENDIF
IF v5 = 1 THEN
len5 = 38
ELSIF v5 = 2 THEN
len5 = 18 + $nl[10]
ELSIF v5 = 3 THEN
len5 = 19 + $nl[10]
ELSIF v5 = 4 THEN
len5 = 36
ELSIF v5 = 5 THEN
len5 = 16 + $nl[10]
ELSIF v5 = 6 THEN
len5 = 17 + $nl[10]
ELSIF v5 = 7 THEN
len5 = 43
ELSIF v5 = 8 THEN
len5 = 23 + $nl[11]
ELSIF v5 = 9 THEN
len5 = 24 + $nl[11]
ELSIF v5 = 10 THEN
len5 = 41
ELSIF v5 = 11 THEN
len5 = 21 + $nl[11]
ELSIF v5 = 12 THEN
len5 = 22 + $nl[11]
ELSIF v5 = 13 THEN
len5 = 22
ELSIF v5 = 14 THEN
len5 = 48
ELSIF v5 = 15 THEN
len5 = 51
ELSIF v5 = 16 THEN
len5 = 30 + $nl[4]
ELSIF v5 = 17 THEN
len5 = 56 + $nl[4]
ELSIF v5 = 18 THEN
len5 = 59 + $nl[4]
ELSIF v5 = 19 THEN
len5 = 20
ELSIF v5 = 20 THEN
len5 = 45
ELSIF v5 = 21 THEN
len5 = 51
ELSIF v5 = 22 THEN
len5 = 29 + $nl[5]
ELSIF v5 = 23 THEN
len5 = 54 + $nl[5]
ELSE
len5 = 60 + $nl[5]
ENDIF
maxL = max(max(max(len0, len1), max(len2, len3)), max(len4, len5))
pW = 16 * chW + maxL * chW + 2 * chW + 4 * padX
pH = 6 * rowH + 2 * padY
// The panel sits in its corner, clear of the price scale on the right and, on the left, of the
// chart's legend bar (top) and of the platform's mark and news icons (bottom)
IF panelPos = 1 THEN
pL = 10
pT = 0 - 40
ELSIF panelPos = 3 THEN
pL = 10
pT = 40 + pH
ELSIF panelPos = 4 THEN
pL = 0 - 85 - pW
pT = 12 + pH
ELSE
pL = 0 - 85 - pW
pT = 0 - 12
ENDIF
// Names aligned left, values aligned right
yR0 = pT - padY - rowH * 0.5
yR1 = pT - padY - rowH * 1.5
yR2 = pT - padY - rowH * 2.5
yR3 = pT - padY - rowH * 3.5
yR4 = pT - padY - rowH * 4.5
yR5 = pT - padY - rowH * 5.5
xV0 = pL + pW - padX - len0 * chW / 2
xV1 = pL + pW - padX - len1 * chW / 2
xV2 = pL + pW - padX - len2 * chW / 2
xV3 = pL + pW - padX - len3 * chW / 2
xV4 = pL + pW - padX - len4 * chW / 2
xV5 = pL + pW - padX - len5 * chW / 2
IF panelPos = 1 THEN
DRAWRECTANGLE(pL, pT, pL + pW, pT - pH) ANCHOR(TOPLEFT, XSHIFT, YSHIFT) COLOURED(pnR, pnG, pnB, 255) FILLCOLOR(pnR, pnG, pnB, 255)
DRAWTEXT("RSI MASTER", pL + padX + 5 * chW, yR0, monospaced, bold, pz) ANCHOR(TOPLEFT, XSHIFT, YSHIFT) COLOURED(209, 212, 220, 255)
DRAWTEXT("#pxC#", xV0, yR0, monospaced, bold, pz) ANCHOR(TOPLEFT, XSHIFT, YSHIFT) COLOURED(209, 212, 220, 153)
DRAWTEXT("RSI", pL + padX + 1.5 * chW, yR1, monospaced, bold, pz) ANCHOR(TOPLEFT, XSHIFT, YSHIFT) COLOURED(209, 212, 220, 153)
IF v1 = 1 THEN
DRAWTEXT("#rsiR#· rising", xV1, yR1, monospaced, bold, pz) ANCHOR(TOPLEFT, XSHIFT, YSHIFT) COLOURED(c1R, c1G, c1B, 255)
ELSIF v1 = 2 THEN
DRAWTEXT("#rsiR#· falling", xV1, yR1, monospaced, bold, pz) ANCHOR(TOPLEFT, XSHIFT, YSHIFT) COLOURED(c1R, c1G, c1B, 255)
ELSE
DRAWTEXT("#rsiR#· flat", xV1, yR1, monospaced, bold, pz) ANCHOR(TOPLEFT, XSHIFT, YSHIFT) COLOURED(c1R, c1G, c1B, 255)
ENDIF
DRAWTEXT("Overbought from", pL + padX + 7.5 * chW, yR2, monospaced, bold, pz) ANCHOR(TOPLEFT, XSHIFT, YSHIFT) COLOURED(209, 212, 220, 153)
IF v2 = 1 THEN
DRAWTEXT("#pxO#· price #dOv#ATR inside", xV2, yR2, monospaced, bold, pz) ANCHOR(TOPLEFT, XSHIFT, YSHIFT) COLOURED(obR, obG, obB, 255)
ELSE
DRAWTEXT("#pxO#· #dOv#ATR away", xV2, yR2, monospaced, bold, pz) ANCHOR(TOPLEFT, XSHIFT, YSHIFT) COLOURED(obR, obG, obB, 255)
ENDIF
DRAWTEXT("Oversold from", pL + padX + 6.5 * chW, yR3, monospaced, bold, pz) ANCHOR(TOPLEFT, XSHIFT, YSHIFT) COLOURED(209, 212, 220, 153)
IF v3 = 1 THEN
DRAWTEXT("#pxS#· price #dSv#ATR inside", xV3, yR3, monospaced, bold, pz) ANCHOR(TOPLEFT, XSHIFT, YSHIFT) COLOURED(osR, osG, osB, 255)
ELSE
DRAWTEXT("#pxS#· #dSv#ATR away", xV3, yR3, monospaced, bold, pz) ANCHOR(TOPLEFT, XSHIFT, YSHIFT) COLOURED(osR, osG, osB, 255)
ENDIF
DRAWTEXT("On this chart", pL + padX + 6.5 * chW, yR4, monospaced, bold, pz) ANCHOR(TOPLEFT, XSHIFT, YSHIFT) COLOURED(209, 212, 220, 153)
IF v4 = 0 THEN
DRAWTEXT("No overbought entries judged yet", xV4, yR4, monospaced, bold, pz) ANCHOR(TOPLEFT, XSHIFT, YSHIFT) COLOURED(209, 212, 220, 255)
ELSIF v4 = 1 THEN
DRAWTEXT("Overbought reversed #rOb#of the last #nOb#time", xV4, yR4, monospaced, bold, pz) ANCHOR(TOPLEFT, XSHIFT, YSHIFT) COLOURED(209, 212, 220, 255)
ELSIF v4 = 2 THEN
DRAWTEXT("Overbought reversed #rOb#of the last #nOb#times", xV4, yR4, monospaced, bold, pz) ANCHOR(TOPLEFT, XSHIFT, YSHIFT) COLOURED(209, 212, 220, 255)
ELSIF v4 = 3 THEN
DRAWTEXT("No oversold entries judged yet", xV4, yR4, monospaced, bold, pz) ANCHOR(TOPLEFT, XSHIFT, YSHIFT) COLOURED(209, 212, 220, 255)
ELSIF v4 = 4 THEN
DRAWTEXT("Oversold bounced #rOs#of the last #nOs#time", xV4, yR4, monospaced, bold, pz) ANCHOR(TOPLEFT, XSHIFT, YSHIFT) COLOURED(209, 212, 220, 255)
ELSE
DRAWTEXT("Oversold bounced #rOs#of the last #nOs#times", xV4, yR4, monospaced, bold, pz) ANCHOR(TOPLEFT, XSHIFT, YSHIFT) COLOURED(209, 212, 220, 255)
ENDIF
DRAWTEXT("Read", pL + padX + 2 * chW, yR5, monospaced, bold, pz) ANCHOR(TOPLEFT, XSHIFT, YSHIFT) COLOURED(209, 212, 220, 153)
IF v5 = 1 THEN
DRAWTEXT("Overbought, just in, confirms on close", xV5, yR5, monospaced, bold, pz) ANCHOR(TOPLEFT, XSHIFT, YSHIFT) COLOURED(c5R, c5G, c5B, 255)
ELSIF v5 = 2 THEN
DRAWTEXT("Overbought, #nIn#bar in", xV5, yR5, monospaced, bold, pz) ANCHOR(TOPLEFT, XSHIFT, YSHIFT) COLOURED(c5R, c5G, c5B, 255)
ELSIF v5 = 3 THEN
DRAWTEXT("Overbought, #nIn#bars in", xV5, yR5, monospaced, bold, pz) ANCHOR(TOPLEFT, XSHIFT, YSHIFT) COLOURED(c5R, c5G, c5B, 255)
ELSIF v5 = 4 THEN
DRAWTEXT("Oversold, just in, confirms on close", xV5, yR5, monospaced, bold, pz) ANCHOR(TOPLEFT, XSHIFT, YSHIFT) COLOURED(c5R, c5G, c5B, 255)
ELSIF v5 = 5 THEN
DRAWTEXT("Oversold, #nIn#bar in", xV5, yR5, monospaced, bold, pz) ANCHOR(TOPLEFT, XSHIFT, YSHIFT) COLOURED(c5R, c5G, c5B, 255)
ELSIF v5 = 6 THEN
DRAWTEXT("Oversold, #nIn#bars in", xV5, yR5, monospaced, bold, pz) ANCHOR(TOPLEFT, XSHIFT, YSHIFT) COLOURED(c5R, c5G, c5B, 255)
ELSIF v5 = 7 THEN
DRAWTEXT("Left overbought this bar, confirms on close", xV5, yR5, monospaced, bold, pz) ANCHOR(TOPLEFT, XSHIFT, YSHIFT) COLOURED(c5R, c5G, c5B, 255)
ELSIF v5 = 8 THEN
DRAWTEXT("Left overbought #nAg#bar ago", xV5, yR5, monospaced, bold, pz) ANCHOR(TOPLEFT, XSHIFT, YSHIFT) COLOURED(c5R, c5G, c5B, 255)
ELSIF v5 = 9 THEN
DRAWTEXT("Left overbought #nAg#bars ago", xV5, yR5, monospaced, bold, pz) ANCHOR(TOPLEFT, XSHIFT, YSHIFT) COLOURED(c5R, c5G, c5B, 255)
ELSIF v5 = 10 THEN
DRAWTEXT("Left oversold this bar, confirms on close", xV5, yR5, monospaced, bold, pz) ANCHOR(TOPLEFT, XSHIFT, YSHIFT) COLOURED(c5R, c5G, c5B, 255)
ELSIF v5 = 11 THEN
DRAWTEXT("Left oversold #nAg#bar ago", xV5, yR5, monospaced, bold, pz) ANCHOR(TOPLEFT, XSHIFT, YSHIFT) COLOURED(c5R, c5G, c5B, 255)
ELSIF v5 = 12 THEN
DRAWTEXT("Left oversold #nAg#bars ago", xV5, yR5, monospaced, bold, pz) ANCHOR(TOPLEFT, XSHIFT, YSHIFT) COLOURED(c5R, c5G, c5B, 255)
ELSIF v5 = 13 THEN
DRAWTEXT("Knocking on overbought", xV5, yR5, monospaced, bold, pz) ANCHOR(TOPLEFT, XSHIFT, YSHIFT) COLOURED(c5R, c5G, c5B, 255)
ELSIF v5 = 14 THEN
DRAWTEXT("Knocking on overbought, it tends to reverse here", xV5, yR5, monospaced, bold, pz) ANCHOR(TOPLEFT, XSHIFT, YSHIFT) COLOURED(c5R, c5G, c5B, 255)
ELSIF v5 = 15 THEN
DRAWTEXT("Knocking on overbought, it tends to keep going here", xV5, yR5, monospaced, bold, pz) ANCHOR(TOPLEFT, XSHIFT, YSHIFT) COLOURED(c5R, c5G, c5B, 255)
ELSIF v5 = 16 THEN
DRAWTEXT("Room to run, #dOv#ATR to overbought", xV5, yR5, monospaced, bold, pz) ANCHOR(TOPLEFT, XSHIFT, YSHIFT) COLOURED(c5R, c5G, c5B, 255)
ELSIF v5 = 17 THEN
DRAWTEXT("Room to run, #dOv#ATR to overbought, it tends to reverse here", xV5, yR5, monospaced, bold, pz) ANCHOR(TOPLEFT, XSHIFT, YSHIFT) COLOURED(c5R, c5G, c5B, 255)
ELSIF v5 = 18 THEN
DRAWTEXT("Room to run, #dOv#ATR to overbought, it tends to keep going here", xV5, yR5, monospaced, bold, pz) ANCHOR(TOPLEFT, XSHIFT, YSHIFT) COLOURED(c5R, c5G, c5B, 255)
ELSIF v5 = 19 THEN
DRAWTEXT("Knocking on oversold", xV5, yR5, monospaced, bold, pz) ANCHOR(TOPLEFT, XSHIFT, YSHIFT) COLOURED(c5R, c5G, c5B, 255)
ELSIF v5 = 20 THEN
DRAWTEXT("Knocking on oversold, it tends to bounce here", xV5, yR5, monospaced, bold, pz) ANCHOR(TOPLEFT, XSHIFT, YSHIFT) COLOURED(c5R, c5G, c5B, 255)
ELSIF v5 = 21 THEN
DRAWTEXT("Knocking on oversold, it tends to keep falling here", xV5, yR5, monospaced, bold, pz) ANCHOR(TOPLEFT, XSHIFT, YSHIFT) COLOURED(c5R, c5G, c5B, 255)
ELSIF v5 = 22 THEN
DRAWTEXT("Room to fall, #dSv#ATR to oversold", xV5, yR5, monospaced, bold, pz) ANCHOR(TOPLEFT, XSHIFT, YSHIFT) COLOURED(c5R, c5G, c5B, 255)
ELSIF v5 = 23 THEN
DRAWTEXT("Room to fall, #dSv#ATR to oversold, it tends to bounce here", xV5, yR5, monospaced, bold, pz) ANCHOR(TOPLEFT, XSHIFT, YSHIFT) COLOURED(c5R, c5G, c5B, 255)
ELSE
DRAWTEXT("Room to fall, #dSv#ATR to oversold, it tends to keep falling here", xV5, yR5, monospaced, bold, pz) ANCHOR(TOPLEFT, XSHIFT, YSHIFT) COLOURED(c5R, c5G, c5B, 255)
ENDIF
ENDIF
IF panelPos = 2 THEN
DRAWRECTANGLE(pL, pT, pL + pW, pT - pH) ANCHOR(TOPRIGHT, XSHIFT, YSHIFT) COLOURED(pnR, pnG, pnB, 255) FILLCOLOR(pnR, pnG, pnB, 255)
DRAWTEXT("RSI MASTER", pL + padX + 5 * chW, yR0, monospaced, bold, pz) ANCHOR(TOPRIGHT, XSHIFT, YSHIFT) COLOURED(209, 212, 220, 255)
DRAWTEXT("#pxC#", xV0, yR0, monospaced, bold, pz) ANCHOR(TOPRIGHT, XSHIFT, YSHIFT) COLOURED(209, 212, 220, 153)
DRAWTEXT("RSI", pL + padX + 1.5 * chW, yR1, monospaced, bold, pz) ANCHOR(TOPRIGHT, XSHIFT, YSHIFT) COLOURED(209, 212, 220, 153)
IF v1 = 1 THEN
DRAWTEXT("#rsiR#· rising", xV1, yR1, monospaced, bold, pz) ANCHOR(TOPRIGHT, XSHIFT, YSHIFT) COLOURED(c1R, c1G, c1B, 255)
ELSIF v1 = 2 THEN
DRAWTEXT("#rsiR#· falling", xV1, yR1, monospaced, bold, pz) ANCHOR(TOPRIGHT, XSHIFT, YSHIFT) COLOURED(c1R, c1G, c1B, 255)
ELSE
DRAWTEXT("#rsiR#· flat", xV1, yR1, monospaced, bold, pz) ANCHOR(TOPRIGHT, XSHIFT, YSHIFT) COLOURED(c1R, c1G, c1B, 255)
ENDIF
DRAWTEXT("Overbought from", pL + padX + 7.5 * chW, yR2, monospaced, bold, pz) ANCHOR(TOPRIGHT, XSHIFT, YSHIFT) COLOURED(209, 212, 220, 153)
IF v2 = 1 THEN
DRAWTEXT("#pxO#· price #dOv#ATR inside", xV2, yR2, monospaced, bold, pz) ANCHOR(TOPRIGHT, XSHIFT, YSHIFT) COLOURED(obR, obG, obB, 255)
ELSE
DRAWTEXT("#pxO#· #dOv#ATR away", xV2, yR2, monospaced, bold, pz) ANCHOR(TOPRIGHT, XSHIFT, YSHIFT) COLOURED(obR, obG, obB, 255)
ENDIF
DRAWTEXT("Oversold from", pL + padX + 6.5 * chW, yR3, monospaced, bold, pz) ANCHOR(TOPRIGHT, XSHIFT, YSHIFT) COLOURED(209, 212, 220, 153)
IF v3 = 1 THEN
DRAWTEXT("#pxS#· price #dSv#ATR inside", xV3, yR3, monospaced, bold, pz) ANCHOR(TOPRIGHT, XSHIFT, YSHIFT) COLOURED(osR, osG, osB, 255)
ELSE
DRAWTEXT("#pxS#· #dSv#ATR away", xV3, yR3, monospaced, bold, pz) ANCHOR(TOPRIGHT, XSHIFT, YSHIFT) COLOURED(osR, osG, osB, 255)
ENDIF
DRAWTEXT("On this chart", pL + padX + 6.5 * chW, yR4, monospaced, bold, pz) ANCHOR(TOPRIGHT, XSHIFT, YSHIFT) COLOURED(209, 212, 220, 153)
IF v4 = 0 THEN
DRAWTEXT("No overbought entries judged yet", xV4, yR4, monospaced, bold, pz) ANCHOR(TOPRIGHT, XSHIFT, YSHIFT) COLOURED(209, 212, 220, 255)
ELSIF v4 = 1 THEN
DRAWTEXT("Overbought reversed #rOb#of the last #nOb#time", xV4, yR4, monospaced, bold, pz) ANCHOR(TOPRIGHT, XSHIFT, YSHIFT) COLOURED(209, 212, 220, 255)
ELSIF v4 = 2 THEN
DRAWTEXT("Overbought reversed #rOb#of the last #nOb#times", xV4, yR4, monospaced, bold, pz) ANCHOR(TOPRIGHT, XSHIFT, YSHIFT) COLOURED(209, 212, 220, 255)
ELSIF v4 = 3 THEN
DRAWTEXT("No oversold entries judged yet", xV4, yR4, monospaced, bold, pz) ANCHOR(TOPRIGHT, XSHIFT, YSHIFT) COLOURED(209, 212, 220, 255)
ELSIF v4 = 4 THEN
DRAWTEXT("Oversold bounced #rOs#of the last #nOs#time", xV4, yR4, monospaced, bold, pz) ANCHOR(TOPRIGHT, XSHIFT, YSHIFT) COLOURED(209, 212, 220, 255)
ELSE
DRAWTEXT("Oversold bounced #rOs#of the last #nOs#times", xV4, yR4, monospaced, bold, pz) ANCHOR(TOPRIGHT, XSHIFT, YSHIFT) COLOURED(209, 212, 220, 255)
ENDIF
DRAWTEXT("Read", pL + padX + 2 * chW, yR5, monospaced, bold, pz) ANCHOR(TOPRIGHT, XSHIFT, YSHIFT) COLOURED(209, 212, 220, 153)
IF v5 = 1 THEN
DRAWTEXT("Overbought, just in, confirms on close", xV5, yR5, monospaced, bold, pz) ANCHOR(TOPRIGHT, XSHIFT, YSHIFT) COLOURED(c5R, c5G, c5B, 255)
ELSIF v5 = 2 THEN
DRAWTEXT("Overbought, #nIn#bar in", xV5, yR5, monospaced, bold, pz) ANCHOR(TOPRIGHT, XSHIFT, YSHIFT) COLOURED(c5R, c5G, c5B, 255)
ELSIF v5 = 3 THEN
DRAWTEXT("Overbought, #nIn#bars in", xV5, yR5, monospaced, bold, pz) ANCHOR(TOPRIGHT, XSHIFT, YSHIFT) COLOURED(c5R, c5G, c5B, 255)
ELSIF v5 = 4 THEN
DRAWTEXT("Oversold, just in, confirms on close", xV5, yR5, monospaced, bold, pz) ANCHOR(TOPRIGHT, XSHIFT, YSHIFT) COLOURED(c5R, c5G, c5B, 255)
ELSIF v5 = 5 THEN
DRAWTEXT("Oversold, #nIn#bar in", xV5, yR5, monospaced, bold, pz) ANCHOR(TOPRIGHT, XSHIFT, YSHIFT) COLOURED(c5R, c5G, c5B, 255)
ELSIF v5 = 6 THEN
DRAWTEXT("Oversold, #nIn#bars in", xV5, yR5, monospaced, bold, pz) ANCHOR(TOPRIGHT, XSHIFT, YSHIFT) COLOURED(c5R, c5G, c5B, 255)
ELSIF v5 = 7 THEN
DRAWTEXT("Left overbought this bar, confirms on close", xV5, yR5, monospaced, bold, pz) ANCHOR(TOPRIGHT, XSHIFT, YSHIFT) COLOURED(c5R, c5G, c5B, 255)
ELSIF v5 = 8 THEN
DRAWTEXT("Left overbought #nAg#bar ago", xV5, yR5, monospaced, bold, pz) ANCHOR(TOPRIGHT, XSHIFT, YSHIFT) COLOURED(c5R, c5G, c5B, 255)
ELSIF v5 = 9 THEN
DRAWTEXT("Left overbought #nAg#bars ago", xV5, yR5, monospaced, bold, pz) ANCHOR(TOPRIGHT, XSHIFT, YSHIFT) COLOURED(c5R, c5G, c5B, 255)
ELSIF v5 = 10 THEN
DRAWTEXT("Left oversold this bar, confirms on close", xV5, yR5, monospaced, bold, pz) ANCHOR(TOPRIGHT, XSHIFT, YSHIFT) COLOURED(c5R, c5G, c5B, 255)
ELSIF v5 = 11 THEN
DRAWTEXT("Left oversold #nAg#bar ago", xV5, yR5, monospaced, bold, pz) ANCHOR(TOPRIGHT, XSHIFT, YSHIFT) COLOURED(c5R, c5G, c5B, 255)
ELSIF v5 = 12 THEN
DRAWTEXT("Left oversold #nAg#bars ago", xV5, yR5, monospaced, bold, pz) ANCHOR(TOPRIGHT, XSHIFT, YSHIFT) COLOURED(c5R, c5G, c5B, 255)
ELSIF v5 = 13 THEN
DRAWTEXT("Knocking on overbought", xV5, yR5, monospaced, bold, pz) ANCHOR(TOPRIGHT, XSHIFT, YSHIFT) COLOURED(c5R, c5G, c5B, 255)
ELSIF v5 = 14 THEN
DRAWTEXT("Knocking on overbought, it tends to reverse here", xV5, yR5, monospaced, bold, pz) ANCHOR(TOPRIGHT, XSHIFT, YSHIFT) COLOURED(c5R, c5G, c5B, 255)
ELSIF v5 = 15 THEN
DRAWTEXT("Knocking on overbought, it tends to keep going here", xV5, yR5, monospaced, bold, pz) ANCHOR(TOPRIGHT, XSHIFT, YSHIFT) COLOURED(c5R, c5G, c5B, 255)
ELSIF v5 = 16 THEN
DRAWTEXT("Room to run, #dOv#ATR to overbought", xV5, yR5, monospaced, bold, pz) ANCHOR(TOPRIGHT, XSHIFT, YSHIFT) COLOURED(c5R, c5G, c5B, 255)
ELSIF v5 = 17 THEN
DRAWTEXT("Room to run, #dOv#ATR to overbought, it tends to reverse here", xV5, yR5, monospaced, bold, pz) ANCHOR(TOPRIGHT, XSHIFT, YSHIFT) COLOURED(c5R, c5G, c5B, 255)
ELSIF v5 = 18 THEN
DRAWTEXT("Room to run, #dOv#ATR to overbought, it tends to keep going here", xV5, yR5, monospaced, bold, pz) ANCHOR(TOPRIGHT, XSHIFT, YSHIFT) COLOURED(c5R, c5G, c5B, 255)
ELSIF v5 = 19 THEN
DRAWTEXT("Knocking on oversold", xV5, yR5, monospaced, bold, pz) ANCHOR(TOPRIGHT, XSHIFT, YSHIFT) COLOURED(c5R, c5G, c5B, 255)
ELSIF v5 = 20 THEN
DRAWTEXT("Knocking on oversold, it tends to bounce here", xV5, yR5, monospaced, bold, pz) ANCHOR(TOPRIGHT, XSHIFT, YSHIFT) COLOURED(c5R, c5G, c5B, 255)
ELSIF v5 = 21 THEN
DRAWTEXT("Knocking on oversold, it tends to keep falling here", xV5, yR5, monospaced, bold, pz) ANCHOR(TOPRIGHT, XSHIFT, YSHIFT) COLOURED(c5R, c5G, c5B, 255)
ELSIF v5 = 22 THEN
DRAWTEXT("Room to fall, #dSv#ATR to oversold", xV5, yR5, monospaced, bold, pz) ANCHOR(TOPRIGHT, XSHIFT, YSHIFT) COLOURED(c5R, c5G, c5B, 255)
ELSIF v5 = 23 THEN
DRAWTEXT("Room to fall, #dSv#ATR to oversold, it tends to bounce here", xV5, yR5, monospaced, bold, pz) ANCHOR(TOPRIGHT, XSHIFT, YSHIFT) COLOURED(c5R, c5G, c5B, 255)
ELSE
DRAWTEXT("Room to fall, #dSv#ATR to oversold, it tends to keep falling here", xV5, yR5, monospaced, bold, pz) ANCHOR(TOPRIGHT, XSHIFT, YSHIFT) COLOURED(c5R, c5G, c5B, 255)
ENDIF
ENDIF
IF panelPos = 3 THEN
DRAWRECTANGLE(pL, pT, pL + pW, pT - pH) ANCHOR(BOTTOMLEFT, XSHIFT, YSHIFT) COLOURED(pnR, pnG, pnB, 255) FILLCOLOR(pnR, pnG, pnB, 255)
DRAWTEXT("RSI MASTER", pL + padX + 5 * chW, yR0, monospaced, bold, pz) ANCHOR(BOTTOMLEFT, XSHIFT, YSHIFT) COLOURED(209, 212, 220, 255)
DRAWTEXT("#pxC#", xV0, yR0, monospaced, bold, pz) ANCHOR(BOTTOMLEFT, XSHIFT, YSHIFT) COLOURED(209, 212, 220, 153)
DRAWTEXT("RSI", pL + padX + 1.5 * chW, yR1, monospaced, bold, pz) ANCHOR(BOTTOMLEFT, XSHIFT, YSHIFT) COLOURED(209, 212, 220, 153)
IF v1 = 1 THEN
DRAWTEXT("#rsiR#· rising", xV1, yR1, monospaced, bold, pz) ANCHOR(BOTTOMLEFT, XSHIFT, YSHIFT) COLOURED(c1R, c1G, c1B, 255)
ELSIF v1 = 2 THEN
DRAWTEXT("#rsiR#· falling", xV1, yR1, monospaced, bold, pz) ANCHOR(BOTTOMLEFT, XSHIFT, YSHIFT) COLOURED(c1R, c1G, c1B, 255)
ELSE
DRAWTEXT("#rsiR#· flat", xV1, yR1, monospaced, bold, pz) ANCHOR(BOTTOMLEFT, XSHIFT, YSHIFT) COLOURED(c1R, c1G, c1B, 255)
ENDIF
DRAWTEXT("Overbought from", pL + padX + 7.5 * chW, yR2, monospaced, bold, pz) ANCHOR(BOTTOMLEFT, XSHIFT, YSHIFT) COLOURED(209, 212, 220, 153)
IF v2 = 1 THEN
DRAWTEXT("#pxO#· price #dOv#ATR inside", xV2, yR2, monospaced, bold, pz) ANCHOR(BOTTOMLEFT, XSHIFT, YSHIFT) COLOURED(obR, obG, obB, 255)
ELSE
DRAWTEXT("#pxO#· #dOv#ATR away", xV2, yR2, monospaced, bold, pz) ANCHOR(BOTTOMLEFT, XSHIFT, YSHIFT) COLOURED(obR, obG, obB, 255)
ENDIF
DRAWTEXT("Oversold from", pL + padX + 6.5 * chW, yR3, monospaced, bold, pz) ANCHOR(BOTTOMLEFT, XSHIFT, YSHIFT) COLOURED(209, 212, 220, 153)
IF v3 = 1 THEN
DRAWTEXT("#pxS#· price #dSv#ATR inside", xV3, yR3, monospaced, bold, pz) ANCHOR(BOTTOMLEFT, XSHIFT, YSHIFT) COLOURED(osR, osG, osB, 255)
ELSE
DRAWTEXT("#pxS#· #dSv#ATR away", xV3, yR3, monospaced, bold, pz) ANCHOR(BOTTOMLEFT, XSHIFT, YSHIFT) COLOURED(osR, osG, osB, 255)
ENDIF
DRAWTEXT("On this chart", pL + padX + 6.5 * chW, yR4, monospaced, bold, pz) ANCHOR(BOTTOMLEFT, XSHIFT, YSHIFT) COLOURED(209, 212, 220, 153)
IF v4 = 0 THEN
DRAWTEXT("No overbought entries judged yet", xV4, yR4, monospaced, bold, pz) ANCHOR(BOTTOMLEFT, XSHIFT, YSHIFT) COLOURED(209, 212, 220, 255)
ELSIF v4 = 1 THEN
DRAWTEXT("Overbought reversed #rOb#of the last #nOb#time", xV4, yR4, monospaced, bold, pz) ANCHOR(BOTTOMLEFT, XSHIFT, YSHIFT) COLOURED(209, 212, 220, 255)
ELSIF v4 = 2 THEN
DRAWTEXT("Overbought reversed #rOb#of the last #nOb#times", xV4, yR4, monospaced, bold, pz) ANCHOR(BOTTOMLEFT, XSHIFT, YSHIFT) COLOURED(209, 212, 220, 255)
ELSIF v4 = 3 THEN
DRAWTEXT("No oversold entries judged yet", xV4, yR4, monospaced, bold, pz) ANCHOR(BOTTOMLEFT, XSHIFT, YSHIFT) COLOURED(209, 212, 220, 255)
ELSIF v4 = 4 THEN
DRAWTEXT("Oversold bounced #rOs#of the last #nOs#time", xV4, yR4, monospaced, bold, pz) ANCHOR(BOTTOMLEFT, XSHIFT, YSHIFT) COLOURED(209, 212, 220, 255)
ELSE
DRAWTEXT("Oversold bounced #rOs#of the last #nOs#times", xV4, yR4, monospaced, bold, pz) ANCHOR(BOTTOMLEFT, XSHIFT, YSHIFT) COLOURED(209, 212, 220, 255)
ENDIF
DRAWTEXT("Read", pL + padX + 2 * chW, yR5, monospaced, bold, pz) ANCHOR(BOTTOMLEFT, XSHIFT, YSHIFT) COLOURED(209, 212, 220, 153)
IF v5 = 1 THEN
DRAWTEXT("Overbought, just in, confirms on close", xV5, yR5, monospaced, bold, pz) ANCHOR(BOTTOMLEFT, XSHIFT, YSHIFT) COLOURED(c5R, c5G, c5B, 255)
ELSIF v5 = 2 THEN
DRAWTEXT("Overbought, #nIn#bar in", xV5, yR5, monospaced, bold, pz) ANCHOR(BOTTOMLEFT, XSHIFT, YSHIFT) COLOURED(c5R, c5G, c5B, 255)
ELSIF v5 = 3 THEN
DRAWTEXT("Overbought, #nIn#bars in", xV5, yR5, monospaced, bold, pz) ANCHOR(BOTTOMLEFT, XSHIFT, YSHIFT) COLOURED(c5R, c5G, c5B, 255)
ELSIF v5 = 4 THEN
DRAWTEXT("Oversold, just in, confirms on close", xV5, yR5, monospaced, bold, pz) ANCHOR(BOTTOMLEFT, XSHIFT, YSHIFT) COLOURED(c5R, c5G, c5B, 255)
ELSIF v5 = 5 THEN
DRAWTEXT("Oversold, #nIn#bar in", xV5, yR5, monospaced, bold, pz) ANCHOR(BOTTOMLEFT, XSHIFT, YSHIFT) COLOURED(c5R, c5G, c5B, 255)
ELSIF v5 = 6 THEN
DRAWTEXT("Oversold, #nIn#bars in", xV5, yR5, monospaced, bold, pz) ANCHOR(BOTTOMLEFT, XSHIFT, YSHIFT) COLOURED(c5R, c5G, c5B, 255)
ELSIF v5 = 7 THEN
DRAWTEXT("Left overbought this bar, confirms on close", xV5, yR5, monospaced, bold, pz) ANCHOR(BOTTOMLEFT, XSHIFT, YSHIFT) COLOURED(c5R, c5G, c5B, 255)
ELSIF v5 = 8 THEN
DRAWTEXT("Left overbought #nAg#bar ago", xV5, yR5, monospaced, bold, pz) ANCHOR(BOTTOMLEFT, XSHIFT, YSHIFT) COLOURED(c5R, c5G, c5B, 255)
ELSIF v5 = 9 THEN
DRAWTEXT("Left overbought #nAg#bars ago", xV5, yR5, monospaced, bold, pz) ANCHOR(BOTTOMLEFT, XSHIFT, YSHIFT) COLOURED(c5R, c5G, c5B, 255)
ELSIF v5 = 10 THEN
DRAWTEXT("Left oversold this bar, confirms on close", xV5, yR5, monospaced, bold, pz) ANCHOR(BOTTOMLEFT, XSHIFT, YSHIFT) COLOURED(c5R, c5G, c5B, 255)
ELSIF v5 = 11 THEN
DRAWTEXT("Left oversold #nAg#bar ago", xV5, yR5, monospaced, bold, pz) ANCHOR(BOTTOMLEFT, XSHIFT, YSHIFT) COLOURED(c5R, c5G, c5B, 255)
ELSIF v5 = 12 THEN
DRAWTEXT("Left oversold #nAg#bars ago", xV5, yR5, monospaced, bold, pz) ANCHOR(BOTTOMLEFT, XSHIFT, YSHIFT) COLOURED(c5R, c5G, c5B, 255)
ELSIF v5 = 13 THEN
DRAWTEXT("Knocking on overbought", xV5, yR5, monospaced, bold, pz) ANCHOR(BOTTOMLEFT, XSHIFT, YSHIFT) COLOURED(c5R, c5G, c5B, 255)
ELSIF v5 = 14 THEN
DRAWTEXT("Knocking on overbought, it tends to reverse here", xV5, yR5, monospaced, bold, pz) ANCHOR(BOTTOMLEFT, XSHIFT, YSHIFT) COLOURED(c5R, c5G, c5B, 255)
ELSIF v5 = 15 THEN
DRAWTEXT("Knocking on overbought, it tends to keep going here", xV5, yR5, monospaced, bold, pz) ANCHOR(BOTTOMLEFT, XSHIFT, YSHIFT) COLOURED(c5R, c5G, c5B, 255)
ELSIF v5 = 16 THEN
DRAWTEXT("Room to run, #dOv#ATR to overbought", xV5, yR5, monospaced, bold, pz) ANCHOR(BOTTOMLEFT, XSHIFT, YSHIFT) COLOURED(c5R, c5G, c5B, 255)
ELSIF v5 = 17 THEN
DRAWTEXT("Room to run, #dOv#ATR to overbought, it tends to reverse here", xV5, yR5, monospaced, bold, pz) ANCHOR(BOTTOMLEFT, XSHIFT, YSHIFT) COLOURED(c5R, c5G, c5B, 255)
ELSIF v5 = 18 THEN
DRAWTEXT("Room to run, #dOv#ATR to overbought, it tends to keep going here", xV5, yR5, monospaced, bold, pz) ANCHOR(BOTTOMLEFT, XSHIFT, YSHIFT) COLOURED(c5R, c5G, c5B, 255)
ELSIF v5 = 19 THEN
DRAWTEXT("Knocking on oversold", xV5, yR5, monospaced, bold, pz) ANCHOR(BOTTOMLEFT, XSHIFT, YSHIFT) COLOURED(c5R, c5G, c5B, 255)
ELSIF v5 = 20 THEN
DRAWTEXT("Knocking on oversold, it tends to bounce here", xV5, yR5, monospaced, bold, pz) ANCHOR(BOTTOMLEFT, XSHIFT, YSHIFT) COLOURED(c5R, c5G, c5B, 255)
ELSIF v5 = 21 THEN
DRAWTEXT("Knocking on oversold, it tends to keep falling here", xV5, yR5, monospaced, bold, pz) ANCHOR(BOTTOMLEFT, XSHIFT, YSHIFT) COLOURED(c5R, c5G, c5B, 255)
ELSIF v5 = 22 THEN
DRAWTEXT("Room to fall, #dSv#ATR to oversold", xV5, yR5, monospaced, bold, pz) ANCHOR(BOTTOMLEFT, XSHIFT, YSHIFT) COLOURED(c5R, c5G, c5B, 255)
ELSIF v5 = 23 THEN
DRAWTEXT("Room to fall, #dSv#ATR to oversold, it tends to bounce here", xV5, yR5, monospaced, bold, pz) ANCHOR(BOTTOMLEFT, XSHIFT, YSHIFT) COLOURED(c5R, c5G, c5B, 255)
ELSE
DRAWTEXT("Room to fall, #dSv#ATR to oversold, it tends to keep falling here", xV5, yR5, monospaced, bold, pz) ANCHOR(BOTTOMLEFT, XSHIFT, YSHIFT) COLOURED(c5R, c5G, c5B, 255)
ENDIF
ENDIF
IF panelPos = 4 THEN
DRAWRECTANGLE(pL, pT, pL + pW, pT - pH) ANCHOR(BOTTOMRIGHT, XSHIFT, YSHIFT) COLOURED(pnR, pnG, pnB, 255) FILLCOLOR(pnR, pnG, pnB, 255)
DRAWTEXT("RSI MASTER", pL + padX + 5 * chW, yR0, monospaced, bold, pz) ANCHOR(BOTTOMRIGHT, XSHIFT, YSHIFT) COLOURED(209, 212, 220, 255)
DRAWTEXT("#pxC#", xV0, yR0, monospaced, bold, pz) ANCHOR(BOTTOMRIGHT, XSHIFT, YSHIFT) COLOURED(209, 212, 220, 153)
DRAWTEXT("RSI", pL + padX + 1.5 * chW, yR1, monospaced, bold, pz) ANCHOR(BOTTOMRIGHT, XSHIFT, YSHIFT) COLOURED(209, 212, 220, 153)
IF v1 = 1 THEN
DRAWTEXT("#rsiR#· rising", xV1, yR1, monospaced, bold, pz) ANCHOR(BOTTOMRIGHT, XSHIFT, YSHIFT) COLOURED(c1R, c1G, c1B, 255)
ELSIF v1 = 2 THEN
DRAWTEXT("#rsiR#· falling", xV1, yR1, monospaced, bold, pz) ANCHOR(BOTTOMRIGHT, XSHIFT, YSHIFT) COLOURED(c1R, c1G, c1B, 255)
ELSE
DRAWTEXT("#rsiR#· flat", xV1, yR1, monospaced, bold, pz) ANCHOR(BOTTOMRIGHT, XSHIFT, YSHIFT) COLOURED(c1R, c1G, c1B, 255)
ENDIF
DRAWTEXT("Overbought from", pL + padX + 7.5 * chW, yR2, monospaced, bold, pz) ANCHOR(BOTTOMRIGHT, XSHIFT, YSHIFT) COLOURED(209, 212, 220, 153)
IF v2 = 1 THEN
DRAWTEXT("#pxO#· price #dOv#ATR inside", xV2, yR2, monospaced, bold, pz) ANCHOR(BOTTOMRIGHT, XSHIFT, YSHIFT) COLOURED(obR, obG, obB, 255)
ELSE
DRAWTEXT("#pxO#· #dOv#ATR away", xV2, yR2, monospaced, bold, pz) ANCHOR(BOTTOMRIGHT, XSHIFT, YSHIFT) COLOURED(obR, obG, obB, 255)
ENDIF
DRAWTEXT("Oversold from", pL + padX + 6.5 * chW, yR3, monospaced, bold, pz) ANCHOR(BOTTOMRIGHT, XSHIFT, YSHIFT) COLOURED(209, 212, 220, 153)
IF v3 = 1 THEN
DRAWTEXT("#pxS#· price #dSv#ATR inside", xV3, yR3, monospaced, bold, pz) ANCHOR(BOTTOMRIGHT, XSHIFT, YSHIFT) COLOURED(osR, osG, osB, 255)
ELSE
DRAWTEXT("#pxS#· #dSv#ATR away", xV3, yR3, monospaced, bold, pz) ANCHOR(BOTTOMRIGHT, XSHIFT, YSHIFT) COLOURED(osR, osG, osB, 255)
ENDIF
DRAWTEXT("On this chart", pL + padX + 6.5 * chW, yR4, monospaced, bold, pz) ANCHOR(BOTTOMRIGHT, XSHIFT, YSHIFT) COLOURED(209, 212, 220, 153)
IF v4 = 0 THEN
DRAWTEXT("No overbought entries judged yet", xV4, yR4, monospaced, bold, pz) ANCHOR(BOTTOMRIGHT, XSHIFT, YSHIFT) COLOURED(209, 212, 220, 255)
ELSIF v4 = 1 THEN
DRAWTEXT("Overbought reversed #rOb#of the last #nOb#time", xV4, yR4, monospaced, bold, pz) ANCHOR(BOTTOMRIGHT, XSHIFT, YSHIFT) COLOURED(209, 212, 220, 255)
ELSIF v4 = 2 THEN
DRAWTEXT("Overbought reversed #rOb#of the last #nOb#times", xV4, yR4, monospaced, bold, pz) ANCHOR(BOTTOMRIGHT, XSHIFT, YSHIFT) COLOURED(209, 212, 220, 255)
ELSIF v4 = 3 THEN
DRAWTEXT("No oversold entries judged yet", xV4, yR4, monospaced, bold, pz) ANCHOR(BOTTOMRIGHT, XSHIFT, YSHIFT) COLOURED(209, 212, 220, 255)
ELSIF v4 = 4 THEN
DRAWTEXT("Oversold bounced #rOs#of the last #nOs#time", xV4, yR4, monospaced, bold, pz) ANCHOR(BOTTOMRIGHT, XSHIFT, YSHIFT) COLOURED(209, 212, 220, 255)
ELSE
DRAWTEXT("Oversold bounced #rOs#of the last #nOs#times", xV4, yR4, monospaced, bold, pz) ANCHOR(BOTTOMRIGHT, XSHIFT, YSHIFT) COLOURED(209, 212, 220, 255)
ENDIF
DRAWTEXT("Read", pL + padX + 2 * chW, yR5, monospaced, bold, pz) ANCHOR(BOTTOMRIGHT, XSHIFT, YSHIFT) COLOURED(209, 212, 220, 153)
IF v5 = 1 THEN
DRAWTEXT("Overbought, just in, confirms on close", xV5, yR5, monospaced, bold, pz) ANCHOR(BOTTOMRIGHT, XSHIFT, YSHIFT) COLOURED(c5R, c5G, c5B, 255)
ELSIF v5 = 2 THEN
DRAWTEXT("Overbought, #nIn#bar in", xV5, yR5, monospaced, bold, pz) ANCHOR(BOTTOMRIGHT, XSHIFT, YSHIFT) COLOURED(c5R, c5G, c5B, 255)
ELSIF v5 = 3 THEN
DRAWTEXT("Overbought, #nIn#bars in", xV5, yR5, monospaced, bold, pz) ANCHOR(BOTTOMRIGHT, XSHIFT, YSHIFT) COLOURED(c5R, c5G, c5B, 255)
ELSIF v5 = 4 THEN
DRAWTEXT("Oversold, just in, confirms on close", xV5, yR5, monospaced, bold, pz) ANCHOR(BOTTOMRIGHT, XSHIFT, YSHIFT) COLOURED(c5R, c5G, c5B, 255)
ELSIF v5 = 5 THEN
DRAWTEXT("Oversold, #nIn#bar in", xV5, yR5, monospaced, bold, pz) ANCHOR(BOTTOMRIGHT, XSHIFT, YSHIFT) COLOURED(c5R, c5G, c5B, 255)
ELSIF v5 = 6 THEN
DRAWTEXT("Oversold, #nIn#bars in", xV5, yR5, monospaced, bold, pz) ANCHOR(BOTTOMRIGHT, XSHIFT, YSHIFT) COLOURED(c5R, c5G, c5B, 255)
ELSIF v5 = 7 THEN
DRAWTEXT("Left overbought this bar, confirms on close", xV5, yR5, monospaced, bold, pz) ANCHOR(BOTTOMRIGHT, XSHIFT, YSHIFT) COLOURED(c5R, c5G, c5B, 255)
ELSIF v5 = 8 THEN
DRAWTEXT("Left overbought #nAg#bar ago", xV5, yR5, monospaced, bold, pz) ANCHOR(BOTTOMRIGHT, XSHIFT, YSHIFT) COLOURED(c5R, c5G, c5B, 255)
ELSIF v5 = 9 THEN
DRAWTEXT("Left overbought #nAg#bars ago", xV5, yR5, monospaced, bold, pz) ANCHOR(BOTTOMRIGHT, XSHIFT, YSHIFT) COLOURED(c5R, c5G, c5B, 255)
ELSIF v5 = 10 THEN
DRAWTEXT("Left oversold this bar, confirms on close", xV5, yR5, monospaced, bold, pz) ANCHOR(BOTTOMRIGHT, XSHIFT, YSHIFT) COLOURED(c5R, c5G, c5B, 255)
ELSIF v5 = 11 THEN
DRAWTEXT("Left oversold #nAg#bar ago", xV5, yR5, monospaced, bold, pz) ANCHOR(BOTTOMRIGHT, XSHIFT, YSHIFT) COLOURED(c5R, c5G, c5B, 255)
ELSIF v5 = 12 THEN
DRAWTEXT("Left oversold #nAg#bars ago", xV5, yR5, monospaced, bold, pz) ANCHOR(BOTTOMRIGHT, XSHIFT, YSHIFT) COLOURED(c5R, c5G, c5B, 255)
ELSIF v5 = 13 THEN
DRAWTEXT("Knocking on overbought", xV5, yR5, monospaced, bold, pz) ANCHOR(BOTTOMRIGHT, XSHIFT, YSHIFT) COLOURED(c5R, c5G, c5B, 255)
ELSIF v5 = 14 THEN
DRAWTEXT("Knocking on overbought, it tends to reverse here", xV5, yR5, monospaced, bold, pz) ANCHOR(BOTTOMRIGHT, XSHIFT, YSHIFT) COLOURED(c5R, c5G, c5B, 255)
ELSIF v5 = 15 THEN
DRAWTEXT("Knocking on overbought, it tends to keep going here", xV5, yR5, monospaced, bold, pz) ANCHOR(BOTTOMRIGHT, XSHIFT, YSHIFT) COLOURED(c5R, c5G, c5B, 255)
ELSIF v5 = 16 THEN
DRAWTEXT("Room to run, #dOv#ATR to overbought", xV5, yR5, monospaced, bold, pz) ANCHOR(BOTTOMRIGHT, XSHIFT, YSHIFT) COLOURED(c5R, c5G, c5B, 255)
ELSIF v5 = 17 THEN
DRAWTEXT("Room to run, #dOv#ATR to overbought, it tends to reverse here", xV5, yR5, monospaced, bold, pz) ANCHOR(BOTTOMRIGHT, XSHIFT, YSHIFT) COLOURED(c5R, c5G, c5B, 255)
ELSIF v5 = 18 THEN
DRAWTEXT("Room to run, #dOv#ATR to overbought, it tends to keep going here", xV5, yR5, monospaced, bold, pz) ANCHOR(BOTTOMRIGHT, XSHIFT, YSHIFT) COLOURED(c5R, c5G, c5B, 255)
ELSIF v5 = 19 THEN
DRAWTEXT("Knocking on oversold", xV5, yR5, monospaced, bold, pz) ANCHOR(BOTTOMRIGHT, XSHIFT, YSHIFT) COLOURED(c5R, c5G, c5B, 255)
ELSIF v5 = 20 THEN
DRAWTEXT("Knocking on oversold, it tends to bounce here", xV5, yR5, monospaced, bold, pz) ANCHOR(BOTTOMRIGHT, XSHIFT, YSHIFT) COLOURED(c5R, c5G, c5B, 255)
ELSIF v5 = 21 THEN
DRAWTEXT("Knocking on oversold, it tends to keep falling here", xV5, yR5, monospaced, bold, pz) ANCHOR(BOTTOMRIGHT, XSHIFT, YSHIFT) COLOURED(c5R, c5G, c5B, 255)
ELSIF v5 = 22 THEN
DRAWTEXT("Room to fall, #dSv#ATR to oversold", xV5, yR5, monospaced, bold, pz) ANCHOR(BOTTOMRIGHT, XSHIFT, YSHIFT) COLOURED(c5R, c5G, c5B, 255)
ELSIF v5 = 23 THEN
DRAWTEXT("Room to fall, #dSv#ATR to oversold, it tends to bounce here", xV5, yR5, monospaced, bold, pz) ANCHOR(BOTTOMRIGHT, XSHIFT, YSHIFT) COLOURED(c5R, c5G, c5B, 255)
ELSE
DRAWTEXT("Room to fall, #dSv#ATR to oversold, it tends to keep falling here", xV5, yR5, monospaced, bold, pz) ANCHOR(BOTTOMRIGHT, XSHIFT, YSHIFT) COLOURED(c5R, c5G, c5B, 255)
ENDIF
ENDIF
ENDIF
RETURN //close COLOURED(0, 0, 0, 0) AS "Price"