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.
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:
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…”.
On the last bar, while it is still forming, a touch and its grading are provisional until the bar closes.
//---------------------------------------------------------------
// 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"