Most trading methods only work in one kind of market. Breakouts and trend following need directional moves; mean reversion and range trading need a market that goes nowhere. The Alpha Regime Dashboard by IdentityKa answers the question that comes before any entry: is the market trending, choppy, or somewhere in between?
It combines three independent measures of trend quality into a single 0-100 Regime Score, classifies every bar as Trending Up, Trending Down, Trending, Transition or Choppy, and summarises the current state in a dashboard in the corner of its panel.
The score is built from three components:
Raw values of these measures mean different things on different markets: an ADX of 25 is a strong trend on one instrument and normal noise on another. So each component is converted into a percentile rank against its own last 250 bars: the share of those bars with a lower or equal value. A rank of 90 means the current reading is higher than 90 % of the recent history of that same market.
The Regime Score is the weighted average of the three ranks (40 % Efficiency Ratio, 30 % ADX, 30 % slope), smoothed over 3 bars:
To avoid flicker, a new regime is only accepted after it has held for 3 bars in a row. Inside a trending regime, the direction comes from the slope and the position of the close: slope up and close above the EMA is Trending Up, slope down and close below the EMA is Trending Down, anything else is Trending without bias.
The first 252 bars are a warm-up period while the ranks fill their 250-bar window: the dashboard shows “Warming up” and no score is drawn.
//---------------------------------------------------------------
// PRC_Alpha Regime
// version = 0
// 05.11.2026
// Iván González @ www.prorealcode.com
// Author: IdentityKa
// Sharing ProRealTime knowledge
//--------------------------------------------------------------------//
// Alpha Quant Toolkit #01 - Regime Dashboard
// Classifies the market into Trending / Transition / Choppy with three
// independent measures (Efficiency Ratio, ADX, ATR-normalised EMA slope),
// each turned into a percentile rank of its OWN history, so the same
// thresholds work on stocks, indices, FX and crypto.
//--------------------------------------------------------------------//
defparam drawonlastbaronly = true
// ===================== INPUTS =====================
// --- Calculation ---
lenER = 20 // Efficiency Ratio length
lenADX = 14 // ADX length
lenEMA = 50 // trend EMA length
lenSlope = 10 // bars used to measure the EMA slope in ATR units
rankLen = 250 // each component is ranked against its own last N bars
smoothLen = 3 // score smoothing
// --- Regime rules ---
trendThr = 65 // score at or above this level = Trending
chopThr = 35 // score at or below this level = Choppy
confirmN = 3 // a new regime must last this many bars in a row
// --- Display ---
showComp = 0 // 1 = show the three component ranks
// --- Dashboard ---
showTable = 1 // 1 = show the dashboard
dashPos = 2 // 1 = top left, 2 = top right, 3 = bottom left, 4 = bottom right
txtSize = 2 // 1 = small, 2 = normal, 3 = large
showBrand = 0 // 1 = show the footer
// Colours
upR = 25
upG = 211
upB = 162
dnR = 255
dnG = 77
dnB = 106
chR = 138
chG = 148
chB = 166
tsR = 255
tsG = 176
tsB = 32
// Component weights
wER = 0.40
wADX = 0.30
wSlope = 0.30
// ===================== CALCULATION =====================
// 1) Efficiency Ratio (0..1): net change / total path travelled
IF barindex >= lenER THEN
erNum = abs(close - close[lenER])
erDen = summation[lenER](abs(close - close[1]))
IF erDen = 0 THEN
erV = 0
ELSE
erV = erNum / erDen
ENDIF
erOk = 1
ELSE
erV = 0
erOk = 0
ENDIF
// 2) ADX (Wilder smoothing, each average seeded with a simple mean)
upMove = high - high[1]
dnMove = low[1] - low
plusDM = 0
minusDM = 0
IF upMove > dnMove AND upMove > 0 THEN
plusDM = upMove
ENDIF
IF dnMove > upMove AND dnMove > 0 THEN
minusDM = dnMove
ENDIF
trueR = max(high - low, max(abs(high - close[1]), abs(low - close[1])))
alphaD = 1 / lenADX
IF barindex = lenADX THEN
trS = average[lenADX](trueR)
plusS = average[lenADX](plusDM)
minusS = average[lenADX](minusDM)
ELSIF barindex > lenADX THEN
trS = alphaD * trueR + (1 - alphaD) * trS[1]
plusS = alphaD * plusDM + (1 - alphaD) * plusS[1]
minusS = alphaD * minusDM + (1 - alphaD) * minusS[1]
ENDIF
IF barindex >= lenADX THEN
// when the true range average is 0 the last DI values are kept
IF trS > 0 THEN
plusDI = 100 * plusS / trS
minusDI = 100 * minusS / trS
ENDIF
sumDI = plusDI + minusDI
IF sumDI = 0 THEN
dxV = abs(plusDI - minusDI)
ELSE
dxV = abs(plusDI - minusDI) / sumDI
ENDIF
ELSE
dxV = 0
ENDIF
warmADX = 2 * lenADX - 1
IF barindex = warmADX THEN
adxS = average[lenADX](dxV)
ELSIF barindex > warmADX THEN
adxS = alphaD * dxV + (1 - alphaD) * adxS[1]
ENDIF
IF barindex >= warmADX THEN
adxV = 100 * adxS
adxOk = 1
ELSE
adxV = 0
adxOk = 0
ENDIF
// 3) EMA slope in ATR units per bar (EMA seeded with a simple mean)
alphaE = 2 / (lenEMA + 1)
IF barindex = lenEMA - 1 THEN
emaT = average[lenEMA](close)
ELSIF barindex >= lenEMA THEN
emaT = alphaE * close + (1 - alphaE) * emaT[1]
ENDIF
atrV = averagetruerange[14](close)
IF barindex >= lenEMA - 1 + lenSlope AND barindex >= 13 THEN
IF atrV = 0 THEN
mySlope = 0
ELSE
mySlope = (emaT - emaT[lenSlope]) / (lenSlope * atrV)
ENDIF
slOk = 1
ELSE
mySlope = 0
slOk = 0
ENDIF
absSlope = abs(mySlope)
// Every bar stores its components (pure assignment: same value on every tick)
$erA[barindex] = erV
$erF[barindex] = erOk
$adA[barindex] = adxV
$adF[barindex] = adxOk
$slA[barindex] = absSlope
$slF[barindex] = slOk
// Percentile ranks against their own history (0..100): share of the previous
// rankLen values that are lower than or equal to the current one
isReady = 0
IF barindex >= rankLen THEN
isReady = 1
ENDIF
rawOk = 0
rankE = 0
rankA = 0
rankS = 0
IF isReady = 1 AND erOk = 1 AND adxOk = 1 AND slOk = 1 THEN
cntE = 0
cntA = 0
cntS = 0
FOR k = 1 TO rankLen DO
jb = barindex - k
IF $erF[jb] = 1 THEN
IF $erA[jb] <= erV THEN
cntE = cntE + 1
ENDIF
ENDIF
IF $adF[jb] = 1 THEN
IF $adA[jb] <= adxV THEN
cntA = cntA + 1
ENDIF
ENDIF
IF $slF[jb] = 1 THEN
IF $slA[jb] <= absSlope THEN
cntS = cntS + 1
ENDIF
ENDIF
NEXT
rankE = cntE * 100 / rankLen
rankA = cntA * 100 / rankLen
rankS = cntS * 100 / rankLen
rawOk = 1
ENDIF
rawScore = wER * rankE + wADX * rankA + wSlope * rankS
// The score exists once the three components and their ranks are warm, for smoothLen bars
// in a row (every component stays valid for good once it has started)
warmRank = max(max(rankLen, lenER), max(max(warmADX, lenEMA - 1 + lenSlope), 13))
warmScore = warmRank + smoothLen - 1
IF barindex < warmScore THEN
scoreV = undefined
scoreOk = 0
ELSE
scoreV = average[smoothLen](rawScore)
scoreOk = 1
ENDIF
// Direction bias
dirV = 0
IF slOk = 1 THEN
IF mySlope > 0 AND close > emaT THEN
dirV = 1
ELSIF mySlope < 0 AND close < emaT THEN
dirV = 0 - 1
ENDIF
ENDIF
// ===================== REGIME STATE MACHINE =====================
// regime: 1 = Trending, 0 = Transition, -1 = Choppy
IF scoreOk = 0 THEN
rawRegime = 0
ELSIF scoreV >= trendThr THEN
rawRegime = 1
ELSIF scoreV <= chopThr THEN
rawRegime = 0 - 1
ELSE
rawRegime = 0
ENDIF
ONCE regimeV = 0
ONCE pendR = 0
ONCE pendCount = 0
IF rawRegime <> regimeV THEN
IF rawRegime = pendR THEN
pendCount = pendCount + 1
ELSE
pendR = rawRegime
pendCount = 1
ENDIF
IF pendCount >= confirmN THEN
regimeV = rawRegime
pendCount = 0
ENDIF
ELSE
pendR = regimeV
pendCount = 0
ENDIF
IF barindex = 0 THEN
ageV = 1
ELSIF regimeV <> regimeV[1] THEN
ageV = 1
ELSE
ageV = ageV + 1
ENDIF
// stateCode: 2 = Trending Up, -2 = Trending Down, 3 = Trending (no bias), 0 = Transition, -1 = Choppy
IF regimeV = 1 THEN
IF dirV = 1 THEN
stateCode = 2
ELSIF dirV = 0 - 1 THEN
stateCode = 0 - 2
ELSE
stateCode = 3
ENDIF
ELSIF regimeV = 0 - 1 THEN
stateCode = 0 - 1
ELSE
stateCode = 0
ENDIF
IF stateCode = 2 OR stateCode = 3 THEN
stR = upR
stG = upG
stB = upB
ELSIF stateCode = 0 - 2 THEN
stR = dnR
stG = dnG
stB = dnB
ELSIF stateCode = 0 - 1 THEN
stR = chR
stG = chG
stB = chB
ELSE
stR = tsR
stG = tsG
stB = tsB
ENDIF
// ===================== PLOTS =====================
// Regime score as an area (fill down to zero) plus its line
IF scoreOk = 1 THEN
COLORBETWEEN(scoreV, 0, stR, stG, stB, 38)
ENDIF
IF showComp = 1 AND rawOk = 1 THEN
compA = 153
ELSE
compA = 0
ENDIF
lvTrend = trendThr
lvChop = chopThr
lvMid = 50
// ===================== DASHBOARD =====================
IF islastbarupdate AND showTable = 1 THEN
// Values shown in the dashboard
scR = round(scoreV * 10) / 10
erR = round(erV * 100) / 100
adR = round(adxV * 10) / 10
slR = round(mySlope * 100) / 100
pE = round(rankE)
pA = round(rankA)
pS = round(rankS)
IF dirV = 1 THEN
bsR = upR
bsG = upG
bsB = upB
ELSIF dirV = 0 - 1 THEN
bsR = dnR
bsG = dnG
bsB = dnB
ELSE
bsR = 100
bsG = 106
bsB = 120
ENDIF
// Text geometry: a monospaced font, so every character is chW pixels wide
IF txtSize = 1 THEN
pz = 9
ELSIF txtSize = 3 THEN
pz = 14
ELSE
pz = 11
ENDIF
chW = pz * 0.62
rowH = pz + 8
padX = 8
padY = 4
// Two columns: names (16 characters at most) and values (14)
pW = 33 * chW + 2 * padX
IF showBrand = 1 THEN
nRows = 9
ELSE
nRows = 8
ENDIF
pH = nRows * rowH + 2 * padY
// The dashboard sits in its corner, clear of the price scale on the right and, on the left, of the
// panel's legend (top) and of the platform's mark (bottom)
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
xVal = pL + padX + 19 * chW + 7 * chW
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
yR8 = pT - padY - rowH * 8.5
yHd = pT - padY - rowH
// Names aligned left: each one centred on half its own length
xN1 = pL + padX + 5 * chW / 2
xN2 = pL + padX + 12 * chW / 2
xN3 = pL + padX + 10 * chW / 2
xN4 = pL + padX + 16 * chW / 2
xN5 = pL + padX + 3 * chW / 2
xN6 = pL + padX + 15 * chW / 2
xN7 = pL + padX + 16 * chW / 2
IF dashPos = 1 THEN
DRAWRECTANGLE(pL, pT, pL + pW, pT - pH) ANCHOR(TOPLEFT, XSHIFT, YSHIFT) COLOURED(120, 123, 134, 128) FILLCOLOR(120, 123, 134, 38)
DRAWRECTANGLE(pL, pT, pL + pW, yHd - padY) ANCHOR(TOPLEFT, XSHIFT, YSHIFT) COLOURED(120, 123, 134, 128) FILLCOLOR(120, 123, 134, 64)
DRAWTEXT("MARKET REGIME", xMid, yR0, monospaced, bold, pz) ANCHOR(TOPLEFT, XSHIFT, YSHIFT) COLOURED(0, 0, 0, 255)
DRAWTEXT("State", xN1, yR1, monospaced, standard, pz) ANCHOR(TOPLEFT, XSHIFT, YSHIFT) COLOURED(100, 106, 120, 255)
IF isReady = 0 THEN
DRAWTEXT("Warming up", xVal, yR1, monospaced, bold, pz) ANCHOR(TOPLEFT, XSHIFT, YSHIFT) COLOURED(stR, stG, stB, 255)
ELSIF stateCode = 2 THEN
DRAWTEXT("Trending Up", xVal, yR1, monospaced, bold, pz) ANCHOR(TOPLEFT, XSHIFT, YSHIFT) COLOURED(stR, stG, stB, 255)
ELSIF stateCode = 0 - 2 THEN
DRAWTEXT("Trending Down", xVal, yR1, monospaced, bold, pz) ANCHOR(TOPLEFT, XSHIFT, YSHIFT) COLOURED(stR, stG, stB, 255)
ELSIF stateCode = 3 THEN
DRAWTEXT("Trending", xVal, yR1, monospaced, bold, pz) ANCHOR(TOPLEFT, XSHIFT, YSHIFT) COLOURED(stR, stG, stB, 255)
ELSIF stateCode = 0 - 1 THEN
DRAWTEXT("Choppy", xVal, yR1, monospaced, bold, pz) ANCHOR(TOPLEFT, XSHIFT, YSHIFT) COLOURED(stR, stG, stB, 255)
ELSE
DRAWTEXT("Transition", xVal, yR1, monospaced, bold, pz) ANCHOR(TOPLEFT, XSHIFT, YSHIFT) COLOURED(stR, stG, stB, 255)
ENDIF
DRAWTEXT("Regime Score", xN2, yR2, monospaced, standard, pz) ANCHOR(TOPLEFT, XSHIFT, YSHIFT) COLOURED(100, 106, 120, 255)
IF scoreOk = 1 THEN
DRAWTEXT("#scR# / 100", xVal, yR2, monospaced, standard, pz) ANCHOR(TOPLEFT, XSHIFT, YSHIFT) COLOURED(0, 0, 0, 255)
ELSE
DRAWTEXT("- / 100", xVal, yR2, monospaced, standard, pz) ANCHOR(TOPLEFT, XSHIFT, YSHIFT) COLOURED(0, 0, 0, 255)
ENDIF
DRAWTEXT("Regime Age", xN3, yR3, monospaced, standard, pz) ANCHOR(TOPLEFT, XSHIFT, YSHIFT) COLOURED(100, 106, 120, 255)
DRAWTEXT("#ageV# bars", xVal, yR3, monospaced, standard, pz) ANCHOR(TOPLEFT, XSHIFT, YSHIFT) COLOURED(0, 0, 0, 255)
DRAWTEXT("Efficiency Ratio", xN4, yR4, monospaced, standard, pz) ANCHOR(TOPLEFT, XSHIFT, YSHIFT) COLOURED(100, 106, 120, 255)
IF rawOk = 1 THEN
DRAWTEXT("#erR# (P#pE#)", xVal, yR4, monospaced, standard, pz) ANCHOR(TOPLEFT, XSHIFT, YSHIFT) COLOURED(0, 0, 0, 255)
ELSIF erOk = 1 THEN
DRAWTEXT("#erR# (P-)", xVal, yR4, monospaced, standard, pz) ANCHOR(TOPLEFT, XSHIFT, YSHIFT) COLOURED(0, 0, 0, 255)
ELSE
DRAWTEXT("- (P-)", xVal, yR4, monospaced, standard, pz) ANCHOR(TOPLEFT, XSHIFT, YSHIFT) COLOURED(0, 0, 0, 255)
ENDIF
DRAWTEXT("ADX", xN5, yR5, monospaced, standard, pz) ANCHOR(TOPLEFT, XSHIFT, YSHIFT) COLOURED(100, 106, 120, 255)
IF rawOk = 1 THEN
DRAWTEXT("#adR# (P#pA#)", xVal, yR5, monospaced, standard, pz) ANCHOR(TOPLEFT, XSHIFT, YSHIFT) COLOURED(0, 0, 0, 255)
ELSIF adxOk = 1 THEN
DRAWTEXT("#adR# (P-)", xVal, yR5, monospaced, standard, pz) ANCHOR(TOPLEFT, XSHIFT, YSHIFT) COLOURED(0, 0, 0, 255)
ELSE
DRAWTEXT("- (P-)", xVal, yR5, monospaced, standard, pz) ANCHOR(TOPLEFT, XSHIFT, YSHIFT) COLOURED(0, 0, 0, 255)
ENDIF
DRAWTEXT("Slope (ATR/bar)", xN6, yR6, monospaced, standard, pz) ANCHOR(TOPLEFT, XSHIFT, YSHIFT) COLOURED(100, 106, 120, 255)
IF rawOk = 1 THEN
DRAWTEXT("#slR# (P#pS#)", xVal, yR6, monospaced, standard, pz) ANCHOR(TOPLEFT, XSHIFT, YSHIFT) COLOURED(0, 0, 0, 255)
ELSIF slOk = 1 THEN
DRAWTEXT("#slR# (P-)", xVal, yR6, monospaced, standard, pz) ANCHOR(TOPLEFT, XSHIFT, YSHIFT) COLOURED(0, 0, 0, 255)
ELSE
DRAWTEXT("- (P-)", xVal, yR6, monospaced, standard, pz) ANCHOR(TOPLEFT, XSHIFT, YSHIFT) COLOURED(0, 0, 0, 255)
ENDIF
DRAWTEXT("Directional Bias", xN7, yR7, monospaced, standard, pz) ANCHOR(TOPLEFT, XSHIFT, YSHIFT) COLOURED(100, 106, 120, 255)
IF dirV = 1 THEN
DRAWTEXT("Up", xVal, yR7, monospaced, bold, pz) ANCHOR(TOPLEFT, XSHIFT, YSHIFT) COLOURED(bsR, bsG, bsB, 255)
ELSIF dirV = 0 - 1 THEN
DRAWTEXT("Down", xVal, yR7, monospaced, bold, pz) ANCHOR(TOPLEFT, XSHIFT, YSHIFT) COLOURED(bsR, bsG, bsB, 255)
ELSE
DRAWTEXT("Flat", xVal, yR7, monospaced, bold, pz) ANCHOR(TOPLEFT, XSHIFT, YSHIFT) COLOURED(bsR, bsG, bsB, 255)
ENDIF
IF showBrand = 1 THEN
DRAWTEXT("Alpha Quant Toolkit - identityKa", xMid, yR8, monospaced, standard, pz - 2) ANCHOR(TOPLEFT, XSHIFT, YSHIFT) COLOURED(100, 106, 120, 255)
ENDIF
ENDIF
IF dashPos = 2 THEN
DRAWRECTANGLE(pL, pT, pL + pW, pT - pH) ANCHOR(TOPRIGHT, XSHIFT, YSHIFT) COLOURED(120, 123, 134, 128) FILLCOLOR(120, 123, 134, 38)
DRAWRECTANGLE(pL, pT, pL + pW, yHd - padY) ANCHOR(TOPRIGHT, XSHIFT, YSHIFT) COLOURED(120, 123, 134, 128) FILLCOLOR(120, 123, 134, 64)
DRAWTEXT("MARKET REGIME", xMid, yR0, monospaced, bold, pz) ANCHOR(TOPRIGHT, XSHIFT, YSHIFT) COLOURED(0, 0, 0, 255)
DRAWTEXT("State", xN1, yR1, monospaced, standard, pz) ANCHOR(TOPRIGHT, XSHIFT, YSHIFT) COLOURED(100, 106, 120, 255)
IF isReady = 0 THEN
DRAWTEXT("Warming up", xVal, yR1, monospaced, bold, pz) ANCHOR(TOPRIGHT, XSHIFT, YSHIFT) COLOURED(stR, stG, stB, 255)
ELSIF stateCode = 2 THEN
DRAWTEXT("Trending Up", xVal, yR1, monospaced, bold, pz) ANCHOR(TOPRIGHT, XSHIFT, YSHIFT) COLOURED(stR, stG, stB, 255)
ELSIF stateCode = 0 - 2 THEN
DRAWTEXT("Trending Down", xVal, yR1, monospaced, bold, pz) ANCHOR(TOPRIGHT, XSHIFT, YSHIFT) COLOURED(stR, stG, stB, 255)
ELSIF stateCode = 3 THEN
DRAWTEXT("Trending", xVal, yR1, monospaced, bold, pz) ANCHOR(TOPRIGHT, XSHIFT, YSHIFT) COLOURED(stR, stG, stB, 255)
ELSIF stateCode = 0 - 1 THEN
DRAWTEXT("Choppy", xVal, yR1, monospaced, bold, pz) ANCHOR(TOPRIGHT, XSHIFT, YSHIFT) COLOURED(stR, stG, stB, 255)
ELSE
DRAWTEXT("Transition", xVal, yR1, monospaced, bold, pz) ANCHOR(TOPRIGHT, XSHIFT, YSHIFT) COLOURED(stR, stG, stB, 255)
ENDIF
DRAWTEXT("Regime Score", xN2, yR2, monospaced, standard, pz) ANCHOR(TOPRIGHT, XSHIFT, YSHIFT) COLOURED(100, 106, 120, 255)
IF scoreOk = 1 THEN
DRAWTEXT("#scR# / 100", xVal, yR2, monospaced, standard, pz) ANCHOR(TOPRIGHT, XSHIFT, YSHIFT) COLOURED(0, 0, 0, 255)
ELSE
DRAWTEXT("- / 100", xVal, yR2, monospaced, standard, pz) ANCHOR(TOPRIGHT, XSHIFT, YSHIFT) COLOURED(0, 0, 0, 255)
ENDIF
DRAWTEXT("Regime Age", xN3, yR3, monospaced, standard, pz) ANCHOR(TOPRIGHT, XSHIFT, YSHIFT) COLOURED(100, 106, 120, 255)
DRAWTEXT("#ageV# bars", xVal, yR3, monospaced, standard, pz) ANCHOR(TOPRIGHT, XSHIFT, YSHIFT) COLOURED(0, 0, 0, 255)
DRAWTEXT("Efficiency Ratio", xN4, yR4, monospaced, standard, pz) ANCHOR(TOPRIGHT, XSHIFT, YSHIFT) COLOURED(100, 106, 120, 255)
IF rawOk = 1 THEN
DRAWTEXT("#erR# (P#pE#)", xVal, yR4, monospaced, standard, pz) ANCHOR(TOPRIGHT, XSHIFT, YSHIFT) COLOURED(0, 0, 0, 255)
ELSIF erOk = 1 THEN
DRAWTEXT("#erR# (P-)", xVal, yR4, monospaced, standard, pz) ANCHOR(TOPRIGHT, XSHIFT, YSHIFT) COLOURED(0, 0, 0, 255)
ELSE
DRAWTEXT("- (P-)", xVal, yR4, monospaced, standard, pz) ANCHOR(TOPRIGHT, XSHIFT, YSHIFT) COLOURED(0, 0, 0, 255)
ENDIF
DRAWTEXT("ADX", xN5, yR5, monospaced, standard, pz) ANCHOR(TOPRIGHT, XSHIFT, YSHIFT) COLOURED(100, 106, 120, 255)
IF rawOk = 1 THEN
DRAWTEXT("#adR# (P#pA#)", xVal, yR5, monospaced, standard, pz) ANCHOR(TOPRIGHT, XSHIFT, YSHIFT) COLOURED(0, 0, 0, 255)
ELSIF adxOk = 1 THEN
DRAWTEXT("#adR# (P-)", xVal, yR5, monospaced, standard, pz) ANCHOR(TOPRIGHT, XSHIFT, YSHIFT) COLOURED(0, 0, 0, 255)
ELSE
DRAWTEXT("- (P-)", xVal, yR5, monospaced, standard, pz) ANCHOR(TOPRIGHT, XSHIFT, YSHIFT) COLOURED(0, 0, 0, 255)
ENDIF
DRAWTEXT("Slope (ATR/bar)", xN6, yR6, monospaced, standard, pz) ANCHOR(TOPRIGHT, XSHIFT, YSHIFT) COLOURED(100, 106, 120, 255)
IF rawOk = 1 THEN
DRAWTEXT("#slR# (P#pS#)", xVal, yR6, monospaced, standard, pz) ANCHOR(TOPRIGHT, XSHIFT, YSHIFT) COLOURED(0, 0, 0, 255)
ELSIF slOk = 1 THEN
DRAWTEXT("#slR# (P-)", xVal, yR6, monospaced, standard, pz) ANCHOR(TOPRIGHT, XSHIFT, YSHIFT) COLOURED(0, 0, 0, 255)
ELSE
DRAWTEXT("- (P-)", xVal, yR6, monospaced, standard, pz) ANCHOR(TOPRIGHT, XSHIFT, YSHIFT) COLOURED(0, 0, 0, 255)
ENDIF
DRAWTEXT("Directional Bias", xN7, yR7, monospaced, standard, pz) ANCHOR(TOPRIGHT, XSHIFT, YSHIFT) COLOURED(100, 106, 120, 255)
IF dirV = 1 THEN
DRAWTEXT("Up", xVal, yR7, monospaced, bold, pz) ANCHOR(TOPRIGHT, XSHIFT, YSHIFT) COLOURED(bsR, bsG, bsB, 255)
ELSIF dirV = 0 - 1 THEN
DRAWTEXT("Down", xVal, yR7, monospaced, bold, pz) ANCHOR(TOPRIGHT, XSHIFT, YSHIFT) COLOURED(bsR, bsG, bsB, 255)
ELSE
DRAWTEXT("Flat", xVal, yR7, monospaced, bold, pz) ANCHOR(TOPRIGHT, XSHIFT, YSHIFT) COLOURED(bsR, bsG, bsB, 255)
ENDIF
IF showBrand = 1 THEN
DRAWTEXT("Alpha Quant Toolkit - identityKa", xMid, yR8, monospaced, standard, pz - 2) ANCHOR(TOPRIGHT, XSHIFT, YSHIFT) COLOURED(100, 106, 120, 255)
ENDIF
ENDIF
IF dashPos = 3 THEN
DRAWRECTANGLE(pL, pT, pL + pW, pT - pH) ANCHOR(BOTTOMLEFT, XSHIFT, YSHIFT) COLOURED(120, 123, 134, 128) FILLCOLOR(120, 123, 134, 38)
DRAWRECTANGLE(pL, pT, pL + pW, yHd - padY) ANCHOR(BOTTOMLEFT, XSHIFT, YSHIFT) COLOURED(120, 123, 134, 128) FILLCOLOR(120, 123, 134, 64)
DRAWTEXT("MARKET REGIME", xMid, yR0, monospaced, bold, pz) ANCHOR(BOTTOMLEFT, XSHIFT, YSHIFT) COLOURED(0, 0, 0, 255)
DRAWTEXT("State", xN1, yR1, monospaced, standard, pz) ANCHOR(BOTTOMLEFT, XSHIFT, YSHIFT) COLOURED(100, 106, 120, 255)
IF isReady = 0 THEN
DRAWTEXT("Warming up", xVal, yR1, monospaced, bold, pz) ANCHOR(BOTTOMLEFT, XSHIFT, YSHIFT) COLOURED(stR, stG, stB, 255)
ELSIF stateCode = 2 THEN
DRAWTEXT("Trending Up", xVal, yR1, monospaced, bold, pz) ANCHOR(BOTTOMLEFT, XSHIFT, YSHIFT) COLOURED(stR, stG, stB, 255)
ELSIF stateCode = 0 - 2 THEN
DRAWTEXT("Trending Down", xVal, yR1, monospaced, bold, pz) ANCHOR(BOTTOMLEFT, XSHIFT, YSHIFT) COLOURED(stR, stG, stB, 255)
ELSIF stateCode = 3 THEN
DRAWTEXT("Trending", xVal, yR1, monospaced, bold, pz) ANCHOR(BOTTOMLEFT, XSHIFT, YSHIFT) COLOURED(stR, stG, stB, 255)
ELSIF stateCode = 0 - 1 THEN
DRAWTEXT("Choppy", xVal, yR1, monospaced, bold, pz) ANCHOR(BOTTOMLEFT, XSHIFT, YSHIFT) COLOURED(stR, stG, stB, 255)
ELSE
DRAWTEXT("Transition", xVal, yR1, monospaced, bold, pz) ANCHOR(BOTTOMLEFT, XSHIFT, YSHIFT) COLOURED(stR, stG, stB, 255)
ENDIF
DRAWTEXT("Regime Score", xN2, yR2, monospaced, standard, pz) ANCHOR(BOTTOMLEFT, XSHIFT, YSHIFT) COLOURED(100, 106, 120, 255)
IF scoreOk = 1 THEN
DRAWTEXT("#scR# / 100", xVal, yR2, monospaced, standard, pz) ANCHOR(BOTTOMLEFT, XSHIFT, YSHIFT) COLOURED(0, 0, 0, 255)
ELSE
DRAWTEXT("- / 100", xVal, yR2, monospaced, standard, pz) ANCHOR(BOTTOMLEFT, XSHIFT, YSHIFT) COLOURED(0, 0, 0, 255)
ENDIF
DRAWTEXT("Regime Age", xN3, yR3, monospaced, standard, pz) ANCHOR(BOTTOMLEFT, XSHIFT, YSHIFT) COLOURED(100, 106, 120, 255)
DRAWTEXT("#ageV# bars", xVal, yR3, monospaced, standard, pz) ANCHOR(BOTTOMLEFT, XSHIFT, YSHIFT) COLOURED(0, 0, 0, 255)
DRAWTEXT("Efficiency Ratio", xN4, yR4, monospaced, standard, pz) ANCHOR(BOTTOMLEFT, XSHIFT, YSHIFT) COLOURED(100, 106, 120, 255)
IF rawOk = 1 THEN
DRAWTEXT("#erR# (P#pE#)", xVal, yR4, monospaced, standard, pz) ANCHOR(BOTTOMLEFT, XSHIFT, YSHIFT) COLOURED(0, 0, 0, 255)
ELSIF erOk = 1 THEN
DRAWTEXT("#erR# (P-)", xVal, yR4, monospaced, standard, pz) ANCHOR(BOTTOMLEFT, XSHIFT, YSHIFT) COLOURED(0, 0, 0, 255)
ELSE
DRAWTEXT("- (P-)", xVal, yR4, monospaced, standard, pz) ANCHOR(BOTTOMLEFT, XSHIFT, YSHIFT) COLOURED(0, 0, 0, 255)
ENDIF
DRAWTEXT("ADX", xN5, yR5, monospaced, standard, pz) ANCHOR(BOTTOMLEFT, XSHIFT, YSHIFT) COLOURED(100, 106, 120, 255)
IF rawOk = 1 THEN
DRAWTEXT("#adR# (P#pA#)", xVal, yR5, monospaced, standard, pz) ANCHOR(BOTTOMLEFT, XSHIFT, YSHIFT) COLOURED(0, 0, 0, 255)
ELSIF adxOk = 1 THEN
DRAWTEXT("#adR# (P-)", xVal, yR5, monospaced, standard, pz) ANCHOR(BOTTOMLEFT, XSHIFT, YSHIFT) COLOURED(0, 0, 0, 255)
ELSE
DRAWTEXT("- (P-)", xVal, yR5, monospaced, standard, pz) ANCHOR(BOTTOMLEFT, XSHIFT, YSHIFT) COLOURED(0, 0, 0, 255)
ENDIF
DRAWTEXT("Slope (ATR/bar)", xN6, yR6, monospaced, standard, pz) ANCHOR(BOTTOMLEFT, XSHIFT, YSHIFT) COLOURED(100, 106, 120, 255)
IF rawOk = 1 THEN
DRAWTEXT("#slR# (P#pS#)", xVal, yR6, monospaced, standard, pz) ANCHOR(BOTTOMLEFT, XSHIFT, YSHIFT) COLOURED(0, 0, 0, 255)
ELSIF slOk = 1 THEN
DRAWTEXT("#slR# (P-)", xVal, yR6, monospaced, standard, pz) ANCHOR(BOTTOMLEFT, XSHIFT, YSHIFT) COLOURED(0, 0, 0, 255)
ELSE
DRAWTEXT("- (P-)", xVal, yR6, monospaced, standard, pz) ANCHOR(BOTTOMLEFT, XSHIFT, YSHIFT) COLOURED(0, 0, 0, 255)
ENDIF
DRAWTEXT("Directional Bias", xN7, yR7, monospaced, standard, pz) ANCHOR(BOTTOMLEFT, XSHIFT, YSHIFT) COLOURED(100, 106, 120, 255)
IF dirV = 1 THEN
DRAWTEXT("Up", xVal, yR7, monospaced, bold, pz) ANCHOR(BOTTOMLEFT, XSHIFT, YSHIFT) COLOURED(bsR, bsG, bsB, 255)
ELSIF dirV = 0 - 1 THEN
DRAWTEXT("Down", xVal, yR7, monospaced, bold, pz) ANCHOR(BOTTOMLEFT, XSHIFT, YSHIFT) COLOURED(bsR, bsG, bsB, 255)
ELSE
DRAWTEXT("Flat", xVal, yR7, monospaced, bold, pz) ANCHOR(BOTTOMLEFT, XSHIFT, YSHIFT) COLOURED(bsR, bsG, bsB, 255)
ENDIF
IF showBrand = 1 THEN
DRAWTEXT("Alpha Quant Toolkit - identityKa", xMid, yR8, monospaced, standard, pz - 2) ANCHOR(BOTTOMLEFT, XSHIFT, YSHIFT) COLOURED(100, 106, 120, 255)
ENDIF
ENDIF
IF dashPos = 4 THEN
DRAWRECTANGLE(pL, pT, pL + pW, pT - pH) ANCHOR(BOTTOMRIGHT, XSHIFT, YSHIFT) COLOURED(120, 123, 134, 128) FILLCOLOR(120, 123, 134, 38)
DRAWRECTANGLE(pL, pT, pL + pW, yHd - padY) ANCHOR(BOTTOMRIGHT, XSHIFT, YSHIFT) COLOURED(120, 123, 134, 128) FILLCOLOR(120, 123, 134, 64)
DRAWTEXT("MARKET REGIME", xMid, yR0, monospaced, bold, pz) ANCHOR(BOTTOMRIGHT, XSHIFT, YSHIFT) COLOURED(0, 0, 0, 255)
DRAWTEXT("State", xN1, yR1, monospaced, standard, pz) ANCHOR(BOTTOMRIGHT, XSHIFT, YSHIFT) COLOURED(100, 106, 120, 255)
IF isReady = 0 THEN
DRAWTEXT("Warming up", xVal, yR1, monospaced, bold, pz) ANCHOR(BOTTOMRIGHT, XSHIFT, YSHIFT) COLOURED(stR, stG, stB, 255)
ELSIF stateCode = 2 THEN
DRAWTEXT("Trending Up", xVal, yR1, monospaced, bold, pz) ANCHOR(BOTTOMRIGHT, XSHIFT, YSHIFT) COLOURED(stR, stG, stB, 255)
ELSIF stateCode = 0 - 2 THEN
DRAWTEXT("Trending Down", xVal, yR1, monospaced, bold, pz) ANCHOR(BOTTOMRIGHT, XSHIFT, YSHIFT) COLOURED(stR, stG, stB, 255)
ELSIF stateCode = 3 THEN
DRAWTEXT("Trending", xVal, yR1, monospaced, bold, pz) ANCHOR(BOTTOMRIGHT, XSHIFT, YSHIFT) COLOURED(stR, stG, stB, 255)
ELSIF stateCode = 0 - 1 THEN
DRAWTEXT("Choppy", xVal, yR1, monospaced, bold, pz) ANCHOR(BOTTOMRIGHT, XSHIFT, YSHIFT) COLOURED(stR, stG, stB, 255)
ELSE
DRAWTEXT("Transition", xVal, yR1, monospaced, bold, pz) ANCHOR(BOTTOMRIGHT, XSHIFT, YSHIFT) COLOURED(stR, stG, stB, 255)
ENDIF
DRAWTEXT("Regime Score", xN2, yR2, monospaced, standard, pz) ANCHOR(BOTTOMRIGHT, XSHIFT, YSHIFT) COLOURED(100, 106, 120, 255)
IF scoreOk = 1 THEN
DRAWTEXT("#scR# / 100", xVal, yR2, monospaced, standard, pz) ANCHOR(BOTTOMRIGHT, XSHIFT, YSHIFT) COLOURED(0, 0, 0, 255)
ELSE
DRAWTEXT("- / 100", xVal, yR2, monospaced, standard, pz) ANCHOR(BOTTOMRIGHT, XSHIFT, YSHIFT) COLOURED(0, 0, 0, 255)
ENDIF
DRAWTEXT("Regime Age", xN3, yR3, monospaced, standard, pz) ANCHOR(BOTTOMRIGHT, XSHIFT, YSHIFT) COLOURED(100, 106, 120, 255)
DRAWTEXT("#ageV# bars", xVal, yR3, monospaced, standard, pz) ANCHOR(BOTTOMRIGHT, XSHIFT, YSHIFT) COLOURED(0, 0, 0, 255)
DRAWTEXT("Efficiency Ratio", xN4, yR4, monospaced, standard, pz) ANCHOR(BOTTOMRIGHT, XSHIFT, YSHIFT) COLOURED(100, 106, 120, 255)
IF rawOk = 1 THEN
DRAWTEXT("#erR# (P#pE#)", xVal, yR4, monospaced, standard, pz) ANCHOR(BOTTOMRIGHT, XSHIFT, YSHIFT) COLOURED(0, 0, 0, 255)
ELSIF erOk = 1 THEN
DRAWTEXT("#erR# (P-)", xVal, yR4, monospaced, standard, pz) ANCHOR(BOTTOMRIGHT, XSHIFT, YSHIFT) COLOURED(0, 0, 0, 255)
ELSE
DRAWTEXT("- (P-)", xVal, yR4, monospaced, standard, pz) ANCHOR(BOTTOMRIGHT, XSHIFT, YSHIFT) COLOURED(0, 0, 0, 255)
ENDIF
DRAWTEXT("ADX", xN5, yR5, monospaced, standard, pz) ANCHOR(BOTTOMRIGHT, XSHIFT, YSHIFT) COLOURED(100, 106, 120, 255)
IF rawOk = 1 THEN
DRAWTEXT("#adR# (P#pA#)", xVal, yR5, monospaced, standard, pz) ANCHOR(BOTTOMRIGHT, XSHIFT, YSHIFT) COLOURED(0, 0, 0, 255)
ELSIF adxOk = 1 THEN
DRAWTEXT("#adR# (P-)", xVal, yR5, monospaced, standard, pz) ANCHOR(BOTTOMRIGHT, XSHIFT, YSHIFT) COLOURED(0, 0, 0, 255)
ELSE
DRAWTEXT("- (P-)", xVal, yR5, monospaced, standard, pz) ANCHOR(BOTTOMRIGHT, XSHIFT, YSHIFT) COLOURED(0, 0, 0, 255)
ENDIF
DRAWTEXT("Slope (ATR/bar)", xN6, yR6, monospaced, standard, pz) ANCHOR(BOTTOMRIGHT, XSHIFT, YSHIFT) COLOURED(100, 106, 120, 255)
IF rawOk = 1 THEN
DRAWTEXT("#slR# (P#pS#)", xVal, yR6, monospaced, standard, pz) ANCHOR(BOTTOMRIGHT, XSHIFT, YSHIFT) COLOURED(0, 0, 0, 255)
ELSIF slOk = 1 THEN
DRAWTEXT("#slR# (P-)", xVal, yR6, monospaced, standard, pz) ANCHOR(BOTTOMRIGHT, XSHIFT, YSHIFT) COLOURED(0, 0, 0, 255)
ELSE
DRAWTEXT("- (P-)", xVal, yR6, monospaced, standard, pz) ANCHOR(BOTTOMRIGHT, XSHIFT, YSHIFT) COLOURED(0, 0, 0, 255)
ENDIF
DRAWTEXT("Directional Bias", xN7, yR7, monospaced, standard, pz) ANCHOR(BOTTOMRIGHT, XSHIFT, YSHIFT) COLOURED(100, 106, 120, 255)
IF dirV = 1 THEN
DRAWTEXT("Up", xVal, yR7, monospaced, bold, pz) ANCHOR(BOTTOMRIGHT, XSHIFT, YSHIFT) COLOURED(bsR, bsG, bsB, 255)
ELSIF dirV = 0 - 1 THEN
DRAWTEXT("Down", xVal, yR7, monospaced, bold, pz) ANCHOR(BOTTOMRIGHT, XSHIFT, YSHIFT) COLOURED(bsR, bsG, bsB, 255)
ELSE
DRAWTEXT("Flat", xVal, yR7, monospaced, bold, pz) ANCHOR(BOTTOMRIGHT, XSHIFT, YSHIFT) COLOURED(bsR, bsG, bsB, 255)
ENDIF
IF showBrand = 1 THEN
DRAWTEXT("Alpha Quant Toolkit - identityKa", xMid, yR8, monospaced, standard, pz - 2) ANCHOR(BOTTOMRIGHT, XSHIFT, YSHIFT) COLOURED(100, 106, 120, 255)
ENDIF
ENDIF
ENDIF
RETURN scoreV COLOURED(stR, stG, stB, 255) STYLE(line, 2) AS "Regime Score", lvTrend COLOURED(8, 153, 129, 153) STYLE(dottedline2, 1) AS "Trending Threshold", lvChop COLOURED(120, 123, 134, 153) STYLE(dottedline2, 1) AS "Choppy Threshold", lvMid COLOURED(120, 123, 134, 64) STYLE(dottedline, 1) AS "Midline", rankE COLOURED(0, 188, 212, compA) AS "Rank Efficiency Ratio", rankA COLOURED(156, 39, 176, compA) AS "Rank ADX", rankS COLOURED(255, 152, 0, compA) AS "Rank Slope"