Iván González

Alpha Regime Dashboard: Trending, Transition or Choppy Market Classifier

Category: Indicators By: Iván González Created: November 5, 2026, 11:31 AM
November 5, 2026, 11:31 AM
Indicators
0 Comments
Alpha Regime Dashboard: Trending, Transition or Choppy Market Classifier

Introduction

 

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.

Theory Behind the Indicator

 

The score is built from three components:

  • Efficiency Ratio (20 bars): Kaufman’s net price change divided by the total path travelled. Close to 1 when price moves in a straight line, close to 0 when it zigzags.
  • ADX (14 bars): Wilder’s measure of trend strength, regardless of direction.
  • EMA slope in ATR units: the change of a 50-bar exponential average over the last 10 bars, divided by 10 times the 14-bar ATR. It tells how steep the trend is compared with the normal bar size.

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:

  • 65 or more: Trending.
  • 35 or less: Choppy.
  • In between: Transition.

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.

Key Features at a Glance

 

  • Single 0-100 score from three normalised measures of trend quality.
  • Adaptive thresholds: every component is ranked against its own history, so the same 65 / 35 levels work on stocks, indices, forex and crypto.
  • Confirmation filter against regime flicker.
  • Line and area coloured by state: green Trending Up, red Trending Down, grey Choppy, orange Transition.
  • Optional display of the three component ranks.
  • Dashboard with the state, score, regime age, each component with its percentile and the directional bias, in any corner of the panel.

How to Read the Indicator

 

  • Score line and colour: the higher the score, the cleaner the trend. The colour tells the regime that is currently accepted, which can lag the raw score by the confirmation bars.
  • Above 65: directional market. Favour breakout and trend-following setups in the direction of the bias.
  • Below 35: choppy market. Trend signals tend to fail; range and mean-reversion setups work better.
  • Between 35 and 65: transition. A trend is starting or fading; reduce size or wait.
  • Regime Age: how many bars the current regime has lasted. A young trend and a trend that has been running for 150 bars are not the same trade.
  • Component percentiles: show which measure drives the score. A high ADX rank with a low Efficiency Ratio rank, for instance, often means a strong but noisy move.

Practical Applications

 

  • Strategy switch: run trend systems only when the regime is Trending and range systems only when it is Choppy.
  • Filter for entries: take long setups only in Trending Up and short setups only in Trending Down.
  • Position sizing: trade full size in a confirmed trend, smaller size in Transition.
  • Market scanning: since the score is normalised, it can be compared across a watchlist to find the instruments with the cleanest trends.

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.

Indicator Configuration

 

  • lenER (default 20): Efficiency Ratio length.
  • lenADX (default 14): ADX length.
  • lenEMA (default 50): length of the trend EMA.
  • lenSlope (default 10): bars used to measure the EMA slope.
  • rankLen (default 250): window of the percentile ranks. Longer gives a slower, more stable reading.
  • smoothLen (default 3): smoothing of the score.
  • trendThr (default 65): Trending threshold.
  • chopThr (default 35): Choppy threshold.
  • confirmN (default 3): bars a new regime must last before it is accepted.
  • showComp (default 0): 1 = show the three component ranks.
  • showTable (default 1): show the dashboard.
  • dashPos (default 2): dashboard corner. 1 = top left, 2 = top right, 3 = bottom left, 4 = bottom right.
  • txtSize (default 2): dashboard text size. 1 = small, 2 = normal, 3 = large.
  • showBrand (default 1): show the footer of the dashboard.
  • Colours of each state (upR/upG/upB, dnR/dnG/dnB, chR/chG/chB, tsR/tsG/tsB) at the top of the code.

The Code

 

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

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

Comments

ProRealCode ProRealCode
Loading...