Iván González

RSI Master: Overbought and Oversold Drawn as Prices on the Chart

Category: Indicators By: Iván González Created: November 2, 2026, 1:40 PM
November 2, 2026, 1:40 PM
Indicators
0 Comments
RSI Master: Overbought and Oversold Drawn as Prices on the Chart

Introduction

 

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.

Theory Behind the Indicator

 

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.

Key Features at a Glance

 

  • Overbought and oversold edges computed as prices, straight from the RSI formula
  • Glowing zones above and below price, with adjustable depth and brightness
  • RSI candles that warm and cool with the RSI
  • Entry dots and exit arrows, drawn on closed bars
  • Panel with the RSI, the distance to each zone in ATRs, the record of past entries and a one-line read (companion indicator RSI Master Panel)
  • Five themes: Neon, Classic, Aurora, Ice and Custom

How to Read the Indicator

 

  • Inside a band: the RSI is above 70 (or below 30) on this close. How deep inside the band price sits is how far past the level the RSI has gone.
  • Between the bands: the distance to each edge is the room price has. The panel gives it in ATRs: 0.4 ATR to overbought means one ordinary bar can get there; 3 ATR is a long way.
  • The candles: a warm candle is an RSI on its way to overbought, a cool one an RSI on its way to oversold. Grey means nothing is happening.
  • Dots and arrows: a dot is the first close into a zone; an arrow is the close back out of it.
  • The record (“Overbought reversed 7 of the last 10 times”): once at least 5 entries have been judged, the panel adds what this chart tends to do there: reverse, or keep going.

Practical Applications

 

  • Targets: the overbought edge is a natural first target for a long taken near the oversold zone, and vice versa. It moves with price, so it is a live target, not a fixed one.
  • Mean reversion with a record: on a chart where overbought entries reverse most of the time, the exit arrow out of overbought is worth more than on a chart where they tend to keep going.
  • Trend strength: in a strong trend price can ride inside the overbought band for many bars. The panel counts them (“Overbought, 6 bars in”), which says more than a single RSI reading.
  • Stops: the far edge of the band is a reference for how much room the RSI still allows before the move becomes extreme.

Indicator Configuration

 

RSI

  • lenIn (default 14, 2 to 100): RSI length.
  • obIn (default 70) and osIn (default 30): overbought and oversold levels.
  • smIn (default 3, 1 to 10): smoothing of the zone edges, in bars.

Look

  • themeIn (default 1): 1 = Neon, 2 = Classic, 3 = Aurora, 4 = Ice, 5 = Custom with the colours cuOs and cuOb.
  • bright (default 3, 1 to 5): brightness of the zones and halos.
  • depthIn (default 2.2, 0.5 to 6): how far the zone glow reaches past its edge, in ATRs.
  • showCandles (default 1), showMid (default 0), showDots (default 1), showTurns (default 1): RSI candles, midline (RSI 50), entry dots and exit arrows.

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.

The Code

 

//-----------------------------------------------------------------------
//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"

The Code: RSI Master Panel

 

//-----------------------------------------------------------------------
//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"

Download
Filename: PRC_RSI-Master-Panel.itf
Downloads: 0
Download
Filename: PRC_RSI-Master.itf
Downloads: 0
Iván González
Iván González Legend
Code artist, my biography is a blank page waiting to be scripted. Imagine a bio so awesome it hasn't been coded yet.
Author’s Profile

Comments

ProRealCode ProRealCode
Loading...