Iván González

Linear Regression Channel with Touch Statistics

Category: Indicators By: Iván González Created: November 10, 2026, 11:47 AM
November 10, 2026, 11:47 AM
Indicators
0 Comments
Linear Regression Channel with Touch Statistics

Introduction

 

A linear regression channel is one of the classic ways to frame a trend: a best-fit line through the last N closes, with two bands at a fixed number of standard deviations around it. The usual reading is that a touch of a band is a stretched move that tends to snap back to the line. This indicator by Dots3Red does not take that for granted: it measures it.

Every time price reaches one of the bands, the indicator follows what happens next and keeps score. The dashboard tells you, on the instrument and timeframe you are looking at, how often a touch of the upper or lower band actually returned to the regression line, separately for rising and falling channels.

Theory Behind the Indicator

 

The channel. On every bar, a least-squares line is fitted to the last 100 closes (by default). The regression value on the current bar is the centre of the channel, and its slope tells whether the channel is rising or falling. The bands sit at 2 standard deviations of the residuals (the distance of each close to the line) above and below it.

The correlation r. The dashboard also shows the correlation between price and time over the same window. Near +1 or -1, price has followed a straight line closely and the channel describes the market well; near 0, the “trend” is a weak fit and the bands mean less.

What counts as a touch. An upper touch is a bar whose high crosses the upper band (the previous high was below it). A lower touch is a bar whose low crosses the lower band. Bands are those of each bar at that moment, which is why the optional rolling bands are useful to check the history.

How a touch is graded. Touches are split into four cases: upper or lower band, in a rising or falling channel. Only the first touch of each case is graded; while it is pending, later touches of the same case are ignored. A pending touch is resolved as:

  • Reverted: price comes back to the regression line, taken at its value on the bar of the touch.
  • Failed: price pushes 1 standard deviation beyond the band first (by default), or neither happens within 20 bars. If both happen on the same bar, it counts as failed.

The “Reverted” column of the dashboard is the share of graded touches that came back to the line. It is only shown once a case has at least 10 graded touches; before that, it reads “Collecting…”.

Key Features at a Glance

 

  • Linear regression channel of the last N bars, drawn on the last bar, with optional extension to the right and fill.
  • Touch detection on both bands with a ▼ / ▲ label and the current reversion rate of that case.
  • Four separate statistics: upper / lower band in rising / falling channels.
  • Clear grading rule: back to the line before a failure level or a time limit.
  • Dashboard with the touches graded and the reversion rate of each case, the direction of the current channel, its correlation r and the position of the close in standard deviations.
  • Optional rolling bands showing where the channel edges were on every past bar.

How to Read the Indicator

 

  • Labels: ▼ above the bar marks the first upper touch of its case, ▲ below the bar the first lower touch. The number is the reversion rate of that case at that moment, so it shows how the statistic evolved through the chart.
  • Reverted above 55 % (green): touches of that band in that kind of channel have tended to come back to the line. Fading the touch has had an edge on this instrument and timeframe.
  • Reverted below 45 % (red): touches have tended to keep going. The band behaves more like a breakout level than a reversal level.
  • Rising vs falling: compare the cases. In many markets, lower touches in a rising channel revert far more often than upper touches in the same channel, which simply reflects that pullbacks in a trend are bought.
  • Channel Now: the current direction and r. A low r is a warning that the current channel is a poor fit.
  • Price vs Line: where the close sits in standard deviations from the line. At +2 or -2 it is on the band.

Practical Applications

 

  • Validate a mean-reversion idea before trading it: if the relevant case shows 40 % on your market, the “buy the lower band” setup has not worked there.
  • Choose the side: trade only the cases with a rate clearly above 50 % and enough graded touches.
  • Tune the parameters: change the length, the band width or the failure distance and watch how the statistics change. Keep in mind that every change is a new test on the same data.
  • Set targets and stops: the grading rule itself (target at the line, stop 1 deviation beyond the band, 20-bar time limit) is a ready-made trade plan you can evaluate visually.

On the last bar, while it is still forming, a touch and its grading are provisional until the bar closes.

Indicator Configuration

 

  • len (default 100): regression length, from 10 to 300 bars.
  • mult (default 2.0): channel width in standard deviations of the residuals.
  • stopSd (default 1.0): a touch fails if price goes this many standard deviations beyond the band before returning to the line.
  • horizon (default 20): a touch that reaches neither the line nor the failure level within this many bars counts as failed.
  • minN (default 10): minimum graded touches before a rate is shown.
  • showCur (default 1): draw the current channel.
  • extRight (default 1): extend the current channel to the right.
  • showFill (default 1): fill the current channel.
  • fillTr (default 92): fill transparency, from 50 to 100.
  • showRoll (default 0): 1 = plot the rolling bands on every past bar.
  • wLine (default 2): line thickness, from 1 to 5.
  • showLbl (default 1): touch labels.
  • showHud (default 1): show the dashboard.
  • dashPos (default 2): dashboard corner. 1 = top left, 2 = top right, 3 = bottom left, 4 = bottom right.
  • Colours of the regression line and of the bands (midR/midG/midB, upR/upG/upB, dnR/dnG/dnB) at the top of the code.
  • The price used for the regression is the one selected in the indicator settings (close by default).

The Code

 

//---------------------------------------------------------------
// PRC_LinReg Touch Stats
// version = 0
// 10.11.2026
// Iván González @ www.prorealcode.com
// Author: Dots3Red
// Sharing ProRealTime knowledge
//--------------------------------------------------------------------//
defparam drawonlastbaronly = true
//--------------------------------------------------------------------//
// --- Regression channel ---
len = 100            // regression length (10 to 300)
mult = 2.0           // channel width in standard deviations of the residuals
// --- Touch grading ---
stopSd = 1.0         // a touch fails if price goes this many deviations beyond the band first
horizon = 20         // a touch that resolves nothing within this many bars counts as failed
minN = 10            // minimum graded touches before a rate is shown
// --- Visuals ---
showCur = 1          // 1 = draw the current channel
extRight = 1         // 1 = extend the current channel to the right
showFill = 1         // 1 = fill the current channel
fillTr = 92          // fill transparency, 50 to 100 (100 = invisible)
showRoll = 0         // 1 = plot the rolling bands on every past bar
wLine = 2            // line thickness, 1 to 5
showLbl = 1          // 1 = touch labels
// --- Dashboard ---
showHud = 1          // 1 = show the dashboard
dashPos = 2          // 1 = top left, 2 = top right, 3 = bottom left, 4 = bottom right
//--------------------------------------------------------------------//
// Colours
midR = 255           // regression line
midG = 183
midB = 0
upR = 255            // upper line and upper touch labels
upG = 0
upB = 170
dnR = 0              // lower line and lower touch labels
dnG = 240
dnB = 255
//--------------------------------------------------------------------//
src = customclose
$srcA[barindex] = src
n = len

// Least-squares line over the last len bars, x = 0 on the oldest bar
IF barindex < n - 1 THEN
   lr0 = undefined
   lr1 = undefined
   slope = undefined
   rVal = undefined
   sdV = undefined
   upV = undefined
   dnV = undefined
ELSE
   rVal = undefined
   sx = 0
   sxx = 0
   sy = 0
   sxy = 0
   syy = 0
   FOR i = 0 TO n - 1 DO
      xj = n - 1 - i
      yv = $srcA[barindex - i]
      sx = sx + xj
      sxx = sxx + xj * xj
      sy = sy + yv
      sxy = sxy + xj * yv
      syy = syy + yv * yv
   NEXT
   den = n * sxx - sx * sx
   bCoef = (n * sxy - sx * sy) / den
   aCoef = (sy - bCoef * sx) / n
   lr0 = aCoef + bCoef * (n - 1)
   lr1 = aCoef + bCoef * (n - 2)
   slope = lr0 - lr1
   // Pearson correlation between price and time over the same window
   vy = n * syy - sy * sy
   IF vy > 0 THEN
      rVal = (n * sxy - sx * sy) / sqrt(den * vy)
   ENDIF
   // Standard deviation of the residuals around the line
   ss = 0
   FOR i = 0 TO n - 1 DO
      res = $srcA[barindex - i] - (lr0 - slope * i)
      ss = ss + res * res
   NEXT
   sdV = sqrt(ss / n)
   upV = lr0 + mult * sdV
   dnV = lr0 - mult * sdV
ENDIF

// Touch grading: one pending first touch per slot
// slot 0 = upper touch in a rising channel, 1 = upper in a falling channel
// slot 2 = lower touch in a rising channel, 3 = lower in a falling channel
ONCE pB0 = 0 - 1
ONCE pB1 = 0 - 1
ONCE pB2 = 0 - 1
ONCE pB3 = 0 - 1
ONCE stN0 = 0
ONCE stN1 = 0
ONCE stN2 = 0
ONCE stN3 = 0
ONCE stH0 = 0
ONCE stH1 = 0
ONCE stH2 = 0
ONCE stH3 = 0
ONCE nLb = 0

atrV = averagetruerange[14](close)
IF barindex < 14 THEN
   atrV = high - low
ENDIF

IF barindex >= n AND sdV > 0 THEN
   IF pB0 >= 0 AND barindex > pB0 THEN
      hitT = low <= pT0
      hitS = high >= pS0
      timed = barindex - pB0 >= horizon
      IF hitT OR hitS OR timed THEN
         stN0 = stN0 + 1
         IF hitT AND NOT hitS THEN
            stH0 = stH0 + 1
         ENDIF
         pB0 = 0 - 1
      ENDIF
   ENDIF
   IF pB1 >= 0 AND barindex > pB1 THEN
      hitT = low <= pT1
      hitS = high >= pS1
      timed = barindex - pB1 >= horizon
      IF hitT OR hitS OR timed THEN
         stN1 = stN1 + 1
         IF hitT AND NOT hitS THEN
            stH1 = stH1 + 1
         ENDIF
         pB1 = 0 - 1
      ENDIF
   ENDIF
   IF pB2 >= 0 AND barindex > pB2 THEN
      hitT = high >= pT2
      hitS = low <= pS2
      timed = barindex - pB2 >= horizon
      IF hitT OR hitS OR timed THEN
         stN2 = stN2 + 1
         IF hitT AND NOT hitS THEN
            stH2 = stH2 + 1
         ENDIF
         pB2 = 0 - 1
      ENDIF
   ENDIF
   IF pB3 >= 0 AND barindex > pB3 THEN
      hitT = high >= pT3
      hitS = low <= pS3
      timed = barindex - pB3 >= horizon
      IF hitT OR hitS OR timed THEN
         stN3 = stN3 + 1
         IF hitT AND NOT hitS THEN
            stH3 = stH3 + 1
         ENDIF
         pB3 = 0 - 1
      ENDIF
   ENDIF
   tUp = high >= upV AND high[1] < upV[1]
   tDn = low <= dnV AND low[1] > dnV[1]
   IF slope > 0 THEN
      rising = 0
   ELSE
      rising = 1
   ENDIF

   IF tUp THEN
      IF rising = 0 THEN
         IF pB0 < 0 THEN
            pB0 = barindex
            pT0 = lr0
            pS0 = upV + stopSd * sdV
            newLbl = 1
            IF stN0 >= minN THEN
               lblRate = round(stH0 / stN0 * 100)
            ELSE
               lblRate = 0 - 1
            ENDIF
         ELSE
            newLbl = 0
         ENDIF
      ELSE
         IF pB1 < 0 THEN
            pB1 = barindex
            pT1 = lr0
            pS1 = upV + stopSd * sdV
            newLbl = 1
            IF stN1 >= minN THEN
               lblRate = round(stH1 / stN1 * 100)
            ELSE
               lblRate = 0 - 1
            ENDIF
         ELSE
            newLbl = 0
         ENDIF
      ENDIF
      IF newLbl = 1 AND showLbl = 1 THEN
         // Labels are stored and redrawn on the last bar (the channel is redrawn there too)
         $lbX[nLb] = barindex
         $lbY[nLb] = high + 0.4 * atrV
         $lbY2[nLb] = high + 1.1 * atrV
         $lbD[nLb] = 1
         $lbR[nLb] = lblRate
         nLb = nLb + 1
      ENDIF
   ENDIF

   IF tDn THEN
      IF rising = 0 THEN
         IF pB2 < 0 THEN
            pB2 = barindex
            pT2 = lr0
            pS2 = dnV - stopSd * sdV
            newLbl = 1
            IF stN2 >= minN THEN
               lblRate = round(stH2 / stN2 * 100)
            ELSE
               lblRate = 0 - 1
            ENDIF
         ELSE
            newLbl = 0
         ENDIF
      ELSE
         IF pB3 < 0 THEN
            pB3 = barindex
            pT3 = lr0
            pS3 = dnV - stopSd * sdV
            newLbl = 1
            IF stN3 >= minN THEN
               lblRate = round(stH3 / stN3 * 100)
            ELSE
               lblRate = 0 - 1
            ENDIF
         ELSE
            newLbl = 0
         ENDIF
      ENDIF
      IF newLbl = 1 AND showLbl = 1 THEN
         $lbX[nLb] = barindex
         $lbY[nLb] = low - 0.4 * atrV
         $lbY2[nLb] = low - 1.1 * atrV
         $lbD[nLb] = 2
         $lbR[nLb] = lblRate
         nLb = nLb + 1
      ENDIF
   ENDIF
ENDIF

//--------------------------------------------------------------------//
// Drawing on the last bar
IF islastbarupdate THEN
   // Touch labels (the last 500, like the original)
   IF nLb > 0 THEN
      kFirst = max(0, nLb - 500)
      FOR k = kFirst TO nLb - 1 DO
         lx = $lbX[k]
         ly = $lbY[k]
         ly2 = $lbY2[k]
         lRate = $lbR[k]
         IF $lbD[k] = 1 THEN
            DRAWTEXT("▼", lx, ly) COLOURED(upR, upG, upB, 255)
            IF lRate >= 0 THEN
               DRAWTEXT("#lRate#%", lx, ly2) COLOURED(upR, upG, upB, 255)
            ENDIF
         ELSE
            DRAWTEXT("▲", lx, ly) COLOURED(dnR, dnG, dnB, 255)
            IF lRate >= 0 THEN
               DRAWTEXT("#lRate#%", lx, ly2) COLOURED(dnR, dnG, dnB, 255)
            ENDIF
         ENDIF
      NEXT
   ENDIF

   // Current channel
   IF showCur = 1 AND sdV <> undefined THEN
      x1 = barindex - n + 1
      y1 = lr0 - slope * (n - 1)
      y1Up = y1 + mult * sdV
      y1Dn = y1 - mult * sdV
      IF showFill = 1 AND fillTr < 100 THEN
         fA = round(255 * (100 - fillTr) / 100)
         // Fill between the two edges; extended 200 bars when the lines are extended
         IF extRight = 1 THEN
            x2f = barindex + 200
         ELSE
            x2f = barindex
         ENDIF
         y2Up = lr0 + slope * (x2f - barindex) + mult * sdV
         y2Dn = lr0 + slope * (x2f - barindex) - mult * sdV
         DRAWTRIANGLE(x1, y1Up, x2f, y2Up, x2f, y2Dn) COLOURED(midR, midG, midB, 0) FILLCOLOR(midR, midG, midB, fA)
         DRAWTRIANGLE(x1, y1Up, x2f, y2Dn, x1, y1Dn) COLOURED(midR, midG, midB, 0) FILLCOLOR(midR, midG, midB, fA)
      ENDIF
      IF wLine <= 1 THEN
         IF extRight = 1 THEN
            DRAWRAY(x1, y1, barindex, lr0) COLOURED(midR, midG, midB, 255) STYLE(line, 1)
            DRAWRAY(x1, y1Up, barindex, upV) COLOURED(upR, upG, upB, 255) STYLE(line, 1)
            DRAWRAY(x1, y1Dn, barindex, dnV) COLOURED(dnR, dnG, dnB, 255) STYLE(line, 1)
         ELSE
            DRAWSEGMENT(x1, y1, barindex, lr0) COLOURED(midR, midG, midB, 255) STYLE(line, 1)
            DRAWSEGMENT(x1, y1Up, barindex, upV) COLOURED(upR, upG, upB, 255) STYLE(line, 1)
            DRAWSEGMENT(x1, y1Dn, barindex, dnV) COLOURED(dnR, dnG, dnB, 255) STYLE(line, 1)
         ENDIF
      ELSIF wLine = 2 THEN
         IF extRight = 1 THEN
            DRAWRAY(x1, y1, barindex, lr0) COLOURED(midR, midG, midB, 255) STYLE(line, 2)
            DRAWRAY(x1, y1Up, barindex, upV) COLOURED(upR, upG, upB, 255) STYLE(line, 2)
            DRAWRAY(x1, y1Dn, barindex, dnV) COLOURED(dnR, dnG, dnB, 255) STYLE(line, 2)
         ELSE
            DRAWSEGMENT(x1, y1, barindex, lr0) COLOURED(midR, midG, midB, 255) STYLE(line, 2)
            DRAWSEGMENT(x1, y1Up, barindex, upV) COLOURED(upR, upG, upB, 255) STYLE(line, 2)
            DRAWSEGMENT(x1, y1Dn, barindex, dnV) COLOURED(dnR, dnG, dnB, 255) STYLE(line, 2)
         ENDIF
      ELSIF wLine = 3 THEN
         IF extRight = 1 THEN
            DRAWRAY(x1, y1, barindex, lr0) COLOURED(midR, midG, midB, 255) STYLE(line, 3)
            DRAWRAY(x1, y1Up, barindex, upV) COLOURED(upR, upG, upB, 255) STYLE(line, 3)
            DRAWRAY(x1, y1Dn, barindex, dnV) COLOURED(dnR, dnG, dnB, 255) STYLE(line, 3)
         ELSE
            DRAWSEGMENT(x1, y1, barindex, lr0) COLOURED(midR, midG, midB, 255) STYLE(line, 3)
            DRAWSEGMENT(x1, y1Up, barindex, upV) COLOURED(upR, upG, upB, 255) STYLE(line, 3)
            DRAWSEGMENT(x1, y1Dn, barindex, dnV) COLOURED(dnR, dnG, dnB, 255) STYLE(line, 3)
         ENDIF
      ELSIF wLine = 4 THEN
         IF extRight = 1 THEN
            DRAWRAY(x1, y1, barindex, lr0) COLOURED(midR, midG, midB, 255) STYLE(line, 4)
            DRAWRAY(x1, y1Up, barindex, upV) COLOURED(upR, upG, upB, 255) STYLE(line, 4)
            DRAWRAY(x1, y1Dn, barindex, dnV) COLOURED(dnR, dnG, dnB, 255) STYLE(line, 4)
         ELSE
            DRAWSEGMENT(x1, y1, barindex, lr0) COLOURED(midR, midG, midB, 255) STYLE(line, 4)
            DRAWSEGMENT(x1, y1Up, barindex, upV) COLOURED(upR, upG, upB, 255) STYLE(line, 4)
            DRAWSEGMENT(x1, y1Dn, barindex, dnV) COLOURED(dnR, dnG, dnB, 255) STYLE(line, 4)
         ENDIF
      ELSE
         IF extRight = 1 THEN
            DRAWRAY(x1, y1, barindex, lr0) COLOURED(midR, midG, midB, 255) STYLE(line, 5)
            DRAWRAY(x1, y1Up, barindex, upV) COLOURED(upR, upG, upB, 255) STYLE(line, 5)
            DRAWRAY(x1, y1Dn, barindex, dnV) COLOURED(dnR, dnG, dnB, 255) STYLE(line, 5)
         ELSE
            DRAWSEGMENT(x1, y1, barindex, lr0) COLOURED(midR, midG, midB, 255) STYLE(line, 5)
            DRAWSEGMENT(x1, y1Up, barindex, upV) COLOURED(upR, upG, upB, 255) STYLE(line, 5)
            DRAWSEGMENT(x1, y1Dn, barindex, dnV) COLOURED(dnR, dnG, dnB, 255) STYLE(line, 5)
         ENDIF
      ENDIF
   ENDIF

   // Dashboard
   IF showHud = 1 THEN
      // Rates per slot (-1 = still collecting)
      n0 = stN0
      n1 = stN1
      n2 = stN2
      n3 = stN3
      IF stN0 >= minN THEN
         rt0 = round(stH0 / stN0 * 100)
      ELSE
         rt0 = 0 - 1
      ENDIF
      IF stN1 >= minN THEN
         rt1 = round(stH1 / stN1 * 100)
      ELSE
         rt1 = 0 - 1
      ENDIF
      IF stN2 >= minN THEN
         rt2 = round(stH2 / stN2 * 100)
      ELSE
         rt2 = 0 - 1
      ENDIF
      IF stN3 >= minN THEN
         rt3 = round(stH3 / stN3 * 100)
      ELSE
         rt3 = 0 - 1
      ENDIF
      // Rate colour: green from 55 %, red up to 45 %, black in between
      IF rt0 < 0 THEN
         c0R = 100
         c0G = 106
         c0B = 120
      ELSIF rt0 >= 55 THEN
         c0R = 0
         c0G = 170
         c0B = 128
      ELSIF rt0 <= 45 THEN
         c0R = 230
         c0G = 40
         c0B = 80
      ELSE
         c0R = 0
         c0G = 0
         c0B = 0
      ENDIF
      IF rt1 < 0 THEN
         c1R = 100
         c1G = 106
         c1B = 120
      ELSIF rt1 >= 55 THEN
         c1R = 0
         c1G = 170
         c1B = 128
      ELSIF rt1 <= 45 THEN
         c1R = 230
         c1G = 40
         c1B = 80
      ELSE
         c1R = 0
         c1G = 0
         c1B = 0
      ENDIF
      IF rt2 < 0 THEN
         c2R = 100
         c2G = 106
         c2B = 120
      ELSIF rt2 >= 55 THEN
         c2R = 0
         c2G = 170
         c2B = 128
      ELSIF rt2 <= 45 THEN
         c2R = 230
         c2G = 40
         c2B = 80
      ELSE
         c2R = 0
         c2G = 0
         c2B = 0
      ENDIF
      IF rt3 < 0 THEN
         c3R = 100
         c3G = 106
         c3B = 120
      ELSIF rt3 >= 55 THEN
         c3R = 0
         c3G = 170
         c3B = 128
      ELSIF rt3 <= 45 THEN
         c3R = 230
         c3G = 40
         c3B = 80
      ELSE
         c3R = 0
         c3G = 0
         c3B = 0
      ENDIF
      // Current channel state
      IF rVal <> undefined THEN
         rShow = round(rVal * 100) / 100
      ELSE
         rShow = 0
      ENDIF
      IF sdV > 0 THEN
         posV = round((close - lr0) / sdV * 100) / 100
         posOk = 1
      ELSE
         posV = 0
         posOk = 0
      ENDIF

      // Panel geometry: monospaced font, so every character is chW pixels wide
      pz = 10
      chW = pz * 0.62
      rowH = pz + 8
      padX = 6
      padY = 4
      w0 = 14 * chW + 2 * padX
      w1 = 10 * chW + 2 * padX
      w2 = 7 * chW + 2 * padX
      w3 = 13 * chW + 2 * padX
      pW = w0 + w1 + w2 + w3
      pH = 8 * rowH + 2 * padY
      // The dashboard sits in its corner, clear of the price scale on the right
      IF dashPos = 1 THEN
         pL = 10
         pT = 0 - 40
      ELSIF dashPos = 3 THEN
         pL = 10
         pT = 40 + pH
      ELSIF dashPos = 4 THEN
         pL = 0 - 85 - pW
         pT = 12 + pH
      ELSE
         pL = 0 - 85 - pW
         pT = 0 - 12
      ENDIF
      xMid = pL + pW / 2
      xC0 = pL + w0 / 2
      xC1 = pL + w0 + w1 / 2
      xC2 = pL + w0 + w1 + w2 / 2
      xC3 = pL + w0 + w1 + w2 + w3 / 2
      xC13 = pL + w0 + (w1 + w2 + w3) / 2
      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
      yR6 = pT - padY - rowH * 6.5
      yR7 = pT - padY - rowH * 7.5
      yHd = pT - padY - rowH
      IF dashPos = 1 THEN
         DRAWRECTANGLE(pL, pT, pL + pW, pT - pH) ANCHOR(TOPLEFT, XSHIFT, YSHIFT) COLOURED(51, 65, 85, 255) FILLCOLOR(120, 123, 134, 38)
         DRAWRECTANGLE(pL, pT, pL + pW, yHd) ANCHOR(TOPLEFT, XSHIFT, YSHIFT) COLOURED(51, 65, 85, 255) FILLCOLOR(120, 123, 134, 90)
         DRAWTEXT("LINREG CHANNEL [D3R]", xMid, yR0, monospaced, bold, pz) ANCHOR(TOPLEFT, XSHIFT, YSHIFT) COLOURED(0, 0, 0, 255)
         DRAWTEXT("Touch", xC0, yR1, monospaced, standard, pz) ANCHOR(TOPLEFT, XSHIFT, YSHIFT) COLOURED(100, 106, 120, 255)
         DRAWTEXT("Channel", xC1, yR1, monospaced, standard, pz) ANCHOR(TOPLEFT, XSHIFT, YSHIFT) COLOURED(100, 106, 120, 255)
         DRAWTEXT("Graded", xC2, yR1, monospaced, standard, pz) ANCHOR(TOPLEFT, XSHIFT, YSHIFT) COLOURED(100, 106, 120, 255)
         DRAWTEXT("Reverted", xC3, yR1, monospaced, standard, pz) ANCHOR(TOPLEFT, XSHIFT, YSHIFT) COLOURED(100, 106, 120, 255)
         DRAWTEXT("Upper", xC0, yR2, monospaced, standard, pz) ANCHOR(TOPLEFT, XSHIFT, YSHIFT) COLOURED(255, 0, 170, 255)
         DRAWTEXT("Rising", xC1, yR2, monospaced, standard, pz) ANCHOR(TOPLEFT, XSHIFT, YSHIFT) COLOURED(0, 0, 0, 255)
         DRAWTEXT("#n0#", xC2, yR2, monospaced, standard, pz) ANCHOR(TOPLEFT, XSHIFT, YSHIFT) COLOURED(0, 0, 0, 255)
         IF rt0 < 0 THEN
            DRAWTEXT("Collecting...", xC3, yR2, monospaced, standard, pz) ANCHOR(TOPLEFT, XSHIFT, YSHIFT) COLOURED(c0R, c0G, c0B, 255)
         ELSE
            DRAWTEXT("#rt0#%", xC3, yR2, monospaced, standard, pz) ANCHOR(TOPLEFT, XSHIFT, YSHIFT) COLOURED(c0R, c0G, c0B, 255)
         ENDIF
         DRAWTEXT("Upper", xC0, yR3, monospaced, standard, pz) ANCHOR(TOPLEFT, XSHIFT, YSHIFT) COLOURED(255, 0, 170, 255)
         DRAWTEXT("Falling", xC1, yR3, monospaced, standard, pz) ANCHOR(TOPLEFT, XSHIFT, YSHIFT) COLOURED(0, 0, 0, 255)
         DRAWTEXT("#n1#", xC2, yR3, monospaced, standard, pz) ANCHOR(TOPLEFT, XSHIFT, YSHIFT) COLOURED(0, 0, 0, 255)
         IF rt1 < 0 THEN
            DRAWTEXT("Collecting...", xC3, yR3, monospaced, standard, pz) ANCHOR(TOPLEFT, XSHIFT, YSHIFT) COLOURED(c1R, c1G, c1B, 255)
         ELSE
            DRAWTEXT("#rt1#%", xC3, yR3, monospaced, standard, pz) ANCHOR(TOPLEFT, XSHIFT, YSHIFT) COLOURED(c1R, c1G, c1B, 255)
         ENDIF
         DRAWTEXT("Lower", xC0, yR4, monospaced, standard, pz) ANCHOR(TOPLEFT, XSHIFT, YSHIFT) COLOURED(0, 160, 190, 255)
         DRAWTEXT("Rising", xC1, yR4, monospaced, standard, pz) ANCHOR(TOPLEFT, XSHIFT, YSHIFT) COLOURED(0, 0, 0, 255)
         DRAWTEXT("#n2#", xC2, yR4, monospaced, standard, pz) ANCHOR(TOPLEFT, XSHIFT, YSHIFT) COLOURED(0, 0, 0, 255)
         IF rt2 < 0 THEN
            DRAWTEXT("Collecting...", xC3, yR4, monospaced, standard, pz) ANCHOR(TOPLEFT, XSHIFT, YSHIFT) COLOURED(c2R, c2G, c2B, 255)
         ELSE
            DRAWTEXT("#rt2#%", xC3, yR4, monospaced, standard, pz) ANCHOR(TOPLEFT, XSHIFT, YSHIFT) COLOURED(c2R, c2G, c2B, 255)
         ENDIF
         DRAWTEXT("Lower", xC0, yR5, monospaced, standard, pz) ANCHOR(TOPLEFT, XSHIFT, YSHIFT) COLOURED(0, 160, 190, 255)
         DRAWTEXT("Falling", xC1, yR5, monospaced, standard, pz) ANCHOR(TOPLEFT, XSHIFT, YSHIFT) COLOURED(0, 0, 0, 255)
         DRAWTEXT("#n3#", xC2, yR5, monospaced, standard, pz) ANCHOR(TOPLEFT, XSHIFT, YSHIFT) COLOURED(0, 0, 0, 255)
         IF rt3 < 0 THEN
            DRAWTEXT("Collecting...", xC3, yR5, monospaced, standard, pz) ANCHOR(TOPLEFT, XSHIFT, YSHIFT) COLOURED(c3R, c3G, c3B, 255)
         ELSE
            DRAWTEXT("#rt3#%", xC3, yR5, monospaced, standard, pz) ANCHOR(TOPLEFT, XSHIFT, YSHIFT) COLOURED(c3R, c3G, c3B, 255)
         ENDIF
         DRAWTEXT("Channel Now", xC0, yR6, monospaced, standard, pz) ANCHOR(TOPLEFT, XSHIFT, YSHIFT) COLOURED(100, 106, 120, 255)
         IF slope > 0 THEN
            DRAWTEXT("Rising · r #rShow#", xC13, yR6, monospaced, standard, pz) ANCHOR(TOPLEFT, XSHIFT, YSHIFT) COLOURED(0, 160, 190, 255)
         ELSE
            DRAWTEXT("Falling · r #rShow#", xC13, yR6, monospaced, standard, pz) ANCHOR(TOPLEFT, XSHIFT, YSHIFT) COLOURED(255, 0, 170, 255)
         ENDIF
         DRAWTEXT("Price vs Line", xC0, yR7, monospaced, standard, pz) ANCHOR(TOPLEFT, XSHIFT, YSHIFT) COLOURED(100, 106, 120, 255)
         IF posOk = 0 THEN
            DRAWTEXT("-", xC13, yR7, monospaced, standard, pz) ANCHOR(TOPLEFT, XSHIFT, YSHIFT) COLOURED(100, 106, 120, 255)
         ELSIF posV >= 0 THEN
            DRAWTEXT("+#posV# σ", xC13, yR7, monospaced, standard, pz) ANCHOR(TOPLEFT, XSHIFT, YSHIFT) COLOURED(255, 0, 170, 255)
         ELSE
            DRAWTEXT("#posV# σ", xC13, yR7, monospaced, standard, pz) ANCHOR(TOPLEFT, XSHIFT, YSHIFT) COLOURED(0, 160, 190, 255)
         ENDIF
      ENDIF
      IF dashPos = 2 THEN
         DRAWRECTANGLE(pL, pT, pL + pW, pT - pH) ANCHOR(TOPRIGHT, XSHIFT, YSHIFT) COLOURED(51, 65, 85, 255) FILLCOLOR(120, 123, 134, 38)
         DRAWRECTANGLE(pL, pT, pL + pW, yHd) ANCHOR(TOPRIGHT, XSHIFT, YSHIFT) COLOURED(51, 65, 85, 255) FILLCOLOR(120, 123, 134, 90)
         DRAWTEXT("LINREG CHANNEL [D3R]", xMid, yR0, monospaced, bold, pz) ANCHOR(TOPRIGHT, XSHIFT, YSHIFT) COLOURED(0, 0, 0, 255)
         DRAWTEXT("Touch", xC0, yR1, monospaced, standard, pz) ANCHOR(TOPRIGHT, XSHIFT, YSHIFT) COLOURED(100, 106, 120, 255)
         DRAWTEXT("Channel", xC1, yR1, monospaced, standard, pz) ANCHOR(TOPRIGHT, XSHIFT, YSHIFT) COLOURED(100, 106, 120, 255)
         DRAWTEXT("Graded", xC2, yR1, monospaced, standard, pz) ANCHOR(TOPRIGHT, XSHIFT, YSHIFT) COLOURED(100, 106, 120, 255)
         DRAWTEXT("Reverted", xC3, yR1, monospaced, standard, pz) ANCHOR(TOPRIGHT, XSHIFT, YSHIFT) COLOURED(100, 106, 120, 255)
         DRAWTEXT("Upper", xC0, yR2, monospaced, standard, pz) ANCHOR(TOPRIGHT, XSHIFT, YSHIFT) COLOURED(255, 0, 170, 255)
         DRAWTEXT("Rising", xC1, yR2, monospaced, standard, pz) ANCHOR(TOPRIGHT, XSHIFT, YSHIFT) COLOURED(0, 0, 0, 255)
         DRAWTEXT("#n0#", xC2, yR2, monospaced, standard, pz) ANCHOR(TOPRIGHT, XSHIFT, YSHIFT) COLOURED(0, 0, 0, 255)
         IF rt0 < 0 THEN
            DRAWTEXT("Collecting...", xC3, yR2, monospaced, standard, pz) ANCHOR(TOPRIGHT, XSHIFT, YSHIFT) COLOURED(c0R, c0G, c0B, 255)
         ELSE
            DRAWTEXT("#rt0#%", xC3, yR2, monospaced, standard, pz) ANCHOR(TOPRIGHT, XSHIFT, YSHIFT) COLOURED(c0R, c0G, c0B, 255)
         ENDIF
         DRAWTEXT("Upper", xC0, yR3, monospaced, standard, pz) ANCHOR(TOPRIGHT, XSHIFT, YSHIFT) COLOURED(255, 0, 170, 255)
         DRAWTEXT("Falling", xC1, yR3, monospaced, standard, pz) ANCHOR(TOPRIGHT, XSHIFT, YSHIFT) COLOURED(0, 0, 0, 255)
         DRAWTEXT("#n1#", xC2, yR3, monospaced, standard, pz) ANCHOR(TOPRIGHT, XSHIFT, YSHIFT) COLOURED(0, 0, 0, 255)
         IF rt1 < 0 THEN
            DRAWTEXT("Collecting...", xC3, yR3, monospaced, standard, pz) ANCHOR(TOPRIGHT, XSHIFT, YSHIFT) COLOURED(c1R, c1G, c1B, 255)
         ELSE
            DRAWTEXT("#rt1#%", xC3, yR3, monospaced, standard, pz) ANCHOR(TOPRIGHT, XSHIFT, YSHIFT) COLOURED(c1R, c1G, c1B, 255)
         ENDIF
         DRAWTEXT("Lower", xC0, yR4, monospaced, standard, pz) ANCHOR(TOPRIGHT, XSHIFT, YSHIFT) COLOURED(0, 160, 190, 255)
         DRAWTEXT("Rising", xC1, yR4, monospaced, standard, pz) ANCHOR(TOPRIGHT, XSHIFT, YSHIFT) COLOURED(0, 0, 0, 255)
         DRAWTEXT("#n2#", xC2, yR4, monospaced, standard, pz) ANCHOR(TOPRIGHT, XSHIFT, YSHIFT) COLOURED(0, 0, 0, 255)
         IF rt2 < 0 THEN
            DRAWTEXT("Collecting...", xC3, yR4, monospaced, standard, pz) ANCHOR(TOPRIGHT, XSHIFT, YSHIFT) COLOURED(c2R, c2G, c2B, 255)
         ELSE
            DRAWTEXT("#rt2#%", xC3, yR4, monospaced, standard, pz) ANCHOR(TOPRIGHT, XSHIFT, YSHIFT) COLOURED(c2R, c2G, c2B, 255)
         ENDIF
         DRAWTEXT("Lower", xC0, yR5, monospaced, standard, pz) ANCHOR(TOPRIGHT, XSHIFT, YSHIFT) COLOURED(0, 160, 190, 255)
         DRAWTEXT("Falling", xC1, yR5, monospaced, standard, pz) ANCHOR(TOPRIGHT, XSHIFT, YSHIFT) COLOURED(0, 0, 0, 255)
         DRAWTEXT("#n3#", xC2, yR5, monospaced, standard, pz) ANCHOR(TOPRIGHT, XSHIFT, YSHIFT) COLOURED(0, 0, 0, 255)
         IF rt3 < 0 THEN
            DRAWTEXT("Collecting...", xC3, yR5, monospaced, standard, pz) ANCHOR(TOPRIGHT, XSHIFT, YSHIFT) COLOURED(c3R, c3G, c3B, 255)
         ELSE
            DRAWTEXT("#rt3#%", xC3, yR5, monospaced, standard, pz) ANCHOR(TOPRIGHT, XSHIFT, YSHIFT) COLOURED(c3R, c3G, c3B, 255)
         ENDIF
         DRAWTEXT("Channel Now", xC0, yR6, monospaced, standard, pz) ANCHOR(TOPRIGHT, XSHIFT, YSHIFT) COLOURED(100, 106, 120, 255)
         IF slope > 0 THEN
            DRAWTEXT("Rising · r #rShow#", xC13, yR6, monospaced, standard, pz) ANCHOR(TOPRIGHT, XSHIFT, YSHIFT) COLOURED(0, 160, 190, 255)
         ELSE
            DRAWTEXT("Falling · r #rShow#", xC13, yR6, monospaced, standard, pz) ANCHOR(TOPRIGHT, XSHIFT, YSHIFT) COLOURED(255, 0, 170, 255)
         ENDIF
         DRAWTEXT("Price vs Line", xC0, yR7, monospaced, standard, pz) ANCHOR(TOPRIGHT, XSHIFT, YSHIFT) COLOURED(100, 106, 120, 255)
         IF posOk = 0 THEN
            DRAWTEXT("-", xC13, yR7, monospaced, standard, pz) ANCHOR(TOPRIGHT, XSHIFT, YSHIFT) COLOURED(100, 106, 120, 255)
         ELSIF posV >= 0 THEN
            DRAWTEXT("+#posV# σ", xC13, yR7, monospaced, standard, pz) ANCHOR(TOPRIGHT, XSHIFT, YSHIFT) COLOURED(255, 0, 170, 255)
         ELSE
            DRAWTEXT("#posV# σ", xC13, yR7, monospaced, standard, pz) ANCHOR(TOPRIGHT, XSHIFT, YSHIFT) COLOURED(0, 160, 190, 255)
         ENDIF
      ENDIF
      IF dashPos = 3 THEN
         DRAWRECTANGLE(pL, pT, pL + pW, pT - pH) ANCHOR(BOTTOMLEFT, XSHIFT, YSHIFT) COLOURED(51, 65, 85, 255) FILLCOLOR(120, 123, 134, 38)
         DRAWRECTANGLE(pL, pT, pL + pW, yHd) ANCHOR(BOTTOMLEFT, XSHIFT, YSHIFT) COLOURED(51, 65, 85, 255) FILLCOLOR(120, 123, 134, 90)
         DRAWTEXT("LINREG CHANNEL [D3R]", xMid, yR0, monospaced, bold, pz) ANCHOR(BOTTOMLEFT, XSHIFT, YSHIFT) COLOURED(0, 0, 0, 255)
         DRAWTEXT("Touch", xC0, yR1, monospaced, standard, pz) ANCHOR(BOTTOMLEFT, XSHIFT, YSHIFT) COLOURED(100, 106, 120, 255)
         DRAWTEXT("Channel", xC1, yR1, monospaced, standard, pz) ANCHOR(BOTTOMLEFT, XSHIFT, YSHIFT) COLOURED(100, 106, 120, 255)
         DRAWTEXT("Graded", xC2, yR1, monospaced, standard, pz) ANCHOR(BOTTOMLEFT, XSHIFT, YSHIFT) COLOURED(100, 106, 120, 255)
         DRAWTEXT("Reverted", xC3, yR1, monospaced, standard, pz) ANCHOR(BOTTOMLEFT, XSHIFT, YSHIFT) COLOURED(100, 106, 120, 255)
         DRAWTEXT("Upper", xC0, yR2, monospaced, standard, pz) ANCHOR(BOTTOMLEFT, XSHIFT, YSHIFT) COLOURED(255, 0, 170, 255)
         DRAWTEXT("Rising", xC1, yR2, monospaced, standard, pz) ANCHOR(BOTTOMLEFT, XSHIFT, YSHIFT) COLOURED(0, 0, 0, 255)
         DRAWTEXT("#n0#", xC2, yR2, monospaced, standard, pz) ANCHOR(BOTTOMLEFT, XSHIFT, YSHIFT) COLOURED(0, 0, 0, 255)
         IF rt0 < 0 THEN
            DRAWTEXT("Collecting...", xC3, yR2, monospaced, standard, pz) ANCHOR(BOTTOMLEFT, XSHIFT, YSHIFT) COLOURED(c0R, c0G, c0B, 255)
         ELSE
            DRAWTEXT("#rt0#%", xC3, yR2, monospaced, standard, pz) ANCHOR(BOTTOMLEFT, XSHIFT, YSHIFT) COLOURED(c0R, c0G, c0B, 255)
         ENDIF
         DRAWTEXT("Upper", xC0, yR3, monospaced, standard, pz) ANCHOR(BOTTOMLEFT, XSHIFT, YSHIFT) COLOURED(255, 0, 170, 255)
         DRAWTEXT("Falling", xC1, yR3, monospaced, standard, pz) ANCHOR(BOTTOMLEFT, XSHIFT, YSHIFT) COLOURED(0, 0, 0, 255)
         DRAWTEXT("#n1#", xC2, yR3, monospaced, standard, pz) ANCHOR(BOTTOMLEFT, XSHIFT, YSHIFT) COLOURED(0, 0, 0, 255)
         IF rt1 < 0 THEN
            DRAWTEXT("Collecting...", xC3, yR3, monospaced, standard, pz) ANCHOR(BOTTOMLEFT, XSHIFT, YSHIFT) COLOURED(c1R, c1G, c1B, 255)
         ELSE
            DRAWTEXT("#rt1#%", xC3, yR3, monospaced, standard, pz) ANCHOR(BOTTOMLEFT, XSHIFT, YSHIFT) COLOURED(c1R, c1G, c1B, 255)
         ENDIF
         DRAWTEXT("Lower", xC0, yR4, monospaced, standard, pz) ANCHOR(BOTTOMLEFT, XSHIFT, YSHIFT) COLOURED(0, 160, 190, 255)
         DRAWTEXT("Rising", xC1, yR4, monospaced, standard, pz) ANCHOR(BOTTOMLEFT, XSHIFT, YSHIFT) COLOURED(0, 0, 0, 255)
         DRAWTEXT("#n2#", xC2, yR4, monospaced, standard, pz) ANCHOR(BOTTOMLEFT, XSHIFT, YSHIFT) COLOURED(0, 0, 0, 255)
         IF rt2 < 0 THEN
            DRAWTEXT("Collecting...", xC3, yR4, monospaced, standard, pz) ANCHOR(BOTTOMLEFT, XSHIFT, YSHIFT) COLOURED(c2R, c2G, c2B, 255)
         ELSE
            DRAWTEXT("#rt2#%", xC3, yR4, monospaced, standard, pz) ANCHOR(BOTTOMLEFT, XSHIFT, YSHIFT) COLOURED(c2R, c2G, c2B, 255)
         ENDIF
         DRAWTEXT("Lower", xC0, yR5, monospaced, standard, pz) ANCHOR(BOTTOMLEFT, XSHIFT, YSHIFT) COLOURED(0, 160, 190, 255)
         DRAWTEXT("Falling", xC1, yR5, monospaced, standard, pz) ANCHOR(BOTTOMLEFT, XSHIFT, YSHIFT) COLOURED(0, 0, 0, 255)
         DRAWTEXT("#n3#", xC2, yR5, monospaced, standard, pz) ANCHOR(BOTTOMLEFT, XSHIFT, YSHIFT) COLOURED(0, 0, 0, 255)
         IF rt3 < 0 THEN
            DRAWTEXT("Collecting...", xC3, yR5, monospaced, standard, pz) ANCHOR(BOTTOMLEFT, XSHIFT, YSHIFT) COLOURED(c3R, c3G, c3B, 255)
         ELSE
            DRAWTEXT("#rt3#%", xC3, yR5, monospaced, standard, pz) ANCHOR(BOTTOMLEFT, XSHIFT, YSHIFT) COLOURED(c3R, c3G, c3B, 255)
         ENDIF
         DRAWTEXT("Channel Now", xC0, yR6, monospaced, standard, pz) ANCHOR(BOTTOMLEFT, XSHIFT, YSHIFT) COLOURED(100, 106, 120, 255)
         IF slope > 0 THEN
            DRAWTEXT("Rising · r #rShow#", xC13, yR6, monospaced, standard, pz) ANCHOR(BOTTOMLEFT, XSHIFT, YSHIFT) COLOURED(0, 160, 190, 255)
         ELSE
            DRAWTEXT("Falling · r #rShow#", xC13, yR6, monospaced, standard, pz) ANCHOR(BOTTOMLEFT, XSHIFT, YSHIFT) COLOURED(255, 0, 170, 255)
         ENDIF
         DRAWTEXT("Price vs Line", xC0, yR7, monospaced, standard, pz) ANCHOR(BOTTOMLEFT, XSHIFT, YSHIFT) COLOURED(100, 106, 120, 255)
         IF posOk = 0 THEN
            DRAWTEXT("-", xC13, yR7, monospaced, standard, pz) ANCHOR(BOTTOMLEFT, XSHIFT, YSHIFT) COLOURED(100, 106, 120, 255)
         ELSIF posV >= 0 THEN
            DRAWTEXT("+#posV# σ", xC13, yR7, monospaced, standard, pz) ANCHOR(BOTTOMLEFT, XSHIFT, YSHIFT) COLOURED(255, 0, 170, 255)
         ELSE
            DRAWTEXT("#posV# σ", xC13, yR7, monospaced, standard, pz) ANCHOR(BOTTOMLEFT, XSHIFT, YSHIFT) COLOURED(0, 160, 190, 255)
         ENDIF
      ENDIF
      IF dashPos = 4 THEN
         DRAWRECTANGLE(pL, pT, pL + pW, pT - pH) ANCHOR(BOTTOMRIGHT, XSHIFT, YSHIFT) COLOURED(51, 65, 85, 255) FILLCOLOR(120, 123, 134, 38)
         DRAWRECTANGLE(pL, pT, pL + pW, yHd) ANCHOR(BOTTOMRIGHT, XSHIFT, YSHIFT) COLOURED(51, 65, 85, 255) FILLCOLOR(120, 123, 134, 90)
         DRAWTEXT("LINREG CHANNEL [D3R]", xMid, yR0, monospaced, bold, pz) ANCHOR(BOTTOMRIGHT, XSHIFT, YSHIFT) COLOURED(0, 0, 0, 255)
         DRAWTEXT("Touch", xC0, yR1, monospaced, standard, pz) ANCHOR(BOTTOMRIGHT, XSHIFT, YSHIFT) COLOURED(100, 106, 120, 255)
         DRAWTEXT("Channel", xC1, yR1, monospaced, standard, pz) ANCHOR(BOTTOMRIGHT, XSHIFT, YSHIFT) COLOURED(100, 106, 120, 255)
         DRAWTEXT("Graded", xC2, yR1, monospaced, standard, pz) ANCHOR(BOTTOMRIGHT, XSHIFT, YSHIFT) COLOURED(100, 106, 120, 255)
         DRAWTEXT("Reverted", xC3, yR1, monospaced, standard, pz) ANCHOR(BOTTOMRIGHT, XSHIFT, YSHIFT) COLOURED(100, 106, 120, 255)
         DRAWTEXT("Upper", xC0, yR2, monospaced, standard, pz) ANCHOR(BOTTOMRIGHT, XSHIFT, YSHIFT) COLOURED(255, 0, 170, 255)
         DRAWTEXT("Rising", xC1, yR2, monospaced, standard, pz) ANCHOR(BOTTOMRIGHT, XSHIFT, YSHIFT) COLOURED(0, 0, 0, 255)
         DRAWTEXT("#n0#", xC2, yR2, monospaced, standard, pz) ANCHOR(BOTTOMRIGHT, XSHIFT, YSHIFT) COLOURED(0, 0, 0, 255)
         IF rt0 < 0 THEN
            DRAWTEXT("Collecting...", xC3, yR2, monospaced, standard, pz) ANCHOR(BOTTOMRIGHT, XSHIFT, YSHIFT) COLOURED(c0R, c0G, c0B, 255)
         ELSE
            DRAWTEXT("#rt0#%", xC3, yR2, monospaced, standard, pz) ANCHOR(BOTTOMRIGHT, XSHIFT, YSHIFT) COLOURED(c0R, c0G, c0B, 255)
         ENDIF
         DRAWTEXT("Upper", xC0, yR3, monospaced, standard, pz) ANCHOR(BOTTOMRIGHT, XSHIFT, YSHIFT) COLOURED(255, 0, 170, 255)
         DRAWTEXT("Falling", xC1, yR3, monospaced, standard, pz) ANCHOR(BOTTOMRIGHT, XSHIFT, YSHIFT) COLOURED(0, 0, 0, 255)
         DRAWTEXT("#n1#", xC2, yR3, monospaced, standard, pz) ANCHOR(BOTTOMRIGHT, XSHIFT, YSHIFT) COLOURED(0, 0, 0, 255)
         IF rt1 < 0 THEN
            DRAWTEXT("Collecting...", xC3, yR3, monospaced, standard, pz) ANCHOR(BOTTOMRIGHT, XSHIFT, YSHIFT) COLOURED(c1R, c1G, c1B, 255)
         ELSE
            DRAWTEXT("#rt1#%", xC3, yR3, monospaced, standard, pz) ANCHOR(BOTTOMRIGHT, XSHIFT, YSHIFT) COLOURED(c1R, c1G, c1B, 255)
         ENDIF
         DRAWTEXT("Lower", xC0, yR4, monospaced, standard, pz) ANCHOR(BOTTOMRIGHT, XSHIFT, YSHIFT) COLOURED(0, 160, 190, 255)
         DRAWTEXT("Rising", xC1, yR4, monospaced, standard, pz) ANCHOR(BOTTOMRIGHT, XSHIFT, YSHIFT) COLOURED(0, 0, 0, 255)
         DRAWTEXT("#n2#", xC2, yR4, monospaced, standard, pz) ANCHOR(BOTTOMRIGHT, XSHIFT, YSHIFT) COLOURED(0, 0, 0, 255)
         IF rt2 < 0 THEN
            DRAWTEXT("Collecting...", xC3, yR4, monospaced, standard, pz) ANCHOR(BOTTOMRIGHT, XSHIFT, YSHIFT) COLOURED(c2R, c2G, c2B, 255)
         ELSE
            DRAWTEXT("#rt2#%", xC3, yR4, monospaced, standard, pz) ANCHOR(BOTTOMRIGHT, XSHIFT, YSHIFT) COLOURED(c2R, c2G, c2B, 255)
         ENDIF
         DRAWTEXT("Lower", xC0, yR5, monospaced, standard, pz) ANCHOR(BOTTOMRIGHT, XSHIFT, YSHIFT) COLOURED(0, 160, 190, 255)
         DRAWTEXT("Falling", xC1, yR5, monospaced, standard, pz) ANCHOR(BOTTOMRIGHT, XSHIFT, YSHIFT) COLOURED(0, 0, 0, 255)
         DRAWTEXT("#n3#", xC2, yR5, monospaced, standard, pz) ANCHOR(BOTTOMRIGHT, XSHIFT, YSHIFT) COLOURED(0, 0, 0, 255)
         IF rt3 < 0 THEN
            DRAWTEXT("Collecting...", xC3, yR5, monospaced, standard, pz) ANCHOR(BOTTOMRIGHT, XSHIFT, YSHIFT) COLOURED(c3R, c3G, c3B, 255)
         ELSE
            DRAWTEXT("#rt3#%", xC3, yR5, monospaced, standard, pz) ANCHOR(BOTTOMRIGHT, XSHIFT, YSHIFT) COLOURED(c3R, c3G, c3B, 255)
         ENDIF
         DRAWTEXT("Channel Now", xC0, yR6, monospaced, standard, pz) ANCHOR(BOTTOMRIGHT, XSHIFT, YSHIFT) COLOURED(100, 106, 120, 255)
         IF slope > 0 THEN
            DRAWTEXT("Rising · r #rShow#", xC13, yR6, monospaced, standard, pz) ANCHOR(BOTTOMRIGHT, XSHIFT, YSHIFT) COLOURED(0, 160, 190, 255)
         ELSE
            DRAWTEXT("Falling · r #rShow#", xC13, yR6, monospaced, standard, pz) ANCHOR(BOTTOMRIGHT, XSHIFT, YSHIFT) COLOURED(255, 0, 170, 255)
         ENDIF
         DRAWTEXT("Price vs Line", xC0, yR7, monospaced, standard, pz) ANCHOR(BOTTOMRIGHT, XSHIFT, YSHIFT) COLOURED(100, 106, 120, 255)
         IF posOk = 0 THEN
            DRAWTEXT("-", xC13, yR7, monospaced, standard, pz) ANCHOR(BOTTOMRIGHT, XSHIFT, YSHIFT) COLOURED(100, 106, 120, 255)
         ELSIF posV >= 0 THEN
            DRAWTEXT("+#posV# σ", xC13, yR7, monospaced, standard, pz) ANCHOR(BOTTOMRIGHT, XSHIFT, YSHIFT) COLOURED(255, 0, 170, 255)
         ELSE
            DRAWTEXT("#posV# σ", xC13, yR7, monospaced, standard, pz) ANCHOR(BOTTOMRIGHT, XSHIFT, YSHIFT) COLOURED(0, 160, 190, 255)
         ENDIF
      ENDIF
   ENDIF
ENDIF

// Rolling bands: where the channel edges were on every past bar (hidden by default)
IF showRoll = 1 THEN
   rollA = 128
ELSE
   rollA = 0
ENDIF

RETURN upV COLOURED(upR, upG, upB, rollA) STYLE(line, 1) AS "Rolling Upper", lr0 COLOURED(midR, midG, midB, rollA) STYLE(line, 1) AS "Rolling Line", dnV COLOURED(dnR, dnG, dnB, rollA) STYLE(line, 1) AS "Rolling Lower"

Download
Filename: PRC_LinReg-Touch-Stats.itf
Downloads: 8
Iván González
Iván González Legend
I usually let my code do the talking, which explains why my bio is as empty as a newly created file. Bio to be initialized...
Author’s Profile

Comments

ProRealCode ProRealCode
Loading...