Iván González

Participation-Adjusted Momentum

Category: Indicators By: Iván González Created: November 6, 2026, 10:59 AM
November 6, 2026, 10:59 AM
Indicators
0 Comments
Participation-Adjusted Momentum

Introduction

 

A sharp move on thin volume and a sharp move on heavy, two-sided trading look the same on a classic momentum oscillator. They are not the same: the first is fragile and often reverses, the second has real participation behind it.

The Participation-Adjusted Momentum oscillator by TradeDots (TD-PAM) starts from a standardised rate of change and scales it by the quality of the participation behind each bar. Strong readings only stay strong when volume, the location of the close and the efficiency of the fills confirm them. Every bar is also classified into one of five states, shown by colour.

Theory Behind the Indicator

 

Raw momentum is the 14-bar rate of change turned into a z-score over the last 100 bars: how many standard deviations today’s change is above or below its recent average. This makes the readings comparable across instruments and timeframes.

Participation combines two things:

  • The volume percentile: the share of the previous 100 bars with a volume lower than or equal to the current one.
  • The close location in the bar, aligned with the direction of the momentum: a bullish reading is confirmed by a close near the high, a bearish one by a close near the low.

Participation is the volume percentile multiplied by that alignment, from 0 to 1.

Range efficiency measures how much the bar travelled per unit of volume. A wide bar on little volume means thin fills; a narrow range on heavy volume means thick, absorbed trading. It is ranked against the last 100 bars and inverted, so thicker fills score higher.

The quality blend is 0.4 x participation + 0.4 x range efficiency + 0.2, and the adjusted momentum is the raw z-score multiplied by it. A move with poor participation is shrunk; a move with strong participation keeps most of its size.

Key Features at a Glance

 

  • Momentum oscillator that discounts moves without volume behind them.
  • Five states by colour: Strong Bull (green), Strong Bear (red), momentum without volume (orange), Quiet Accumulation (blue) and Noisy / low quality (grey).
  • Histogram and line of the adjusted momentum, optional raw z-score line.
  • Zero line and +1 / -1 sigma reference bands.
  • Dashboard with the state and every component, each value in a coloured cell.
  • Four alert series for the start of each state.

How to Read the Indicator

 

  • Strong Bull: raw z-score of +1 or more with participation of at least 0.55. A move with real buying behind it.
  • Strong Bear: z-score of -1 or less with participation of at least 0.55.
  • Thin (orange): strong momentum, up or down, with participation below 0.35. The move is suspicious: price is moving but few are trading it.
  • Quiet Accumulation (blue): little momentum (|z| of 0.5 or less) while volume ranks in the top 40 %. Heavy activity that does not move price yet, often seen before a breakout.
  • Noisy (grey): none of the above.
  • The height of the histogram is the adjusted momentum: compare it with the raw line to see how much of a move the participation filter keeps.

Practical Applications

 

  • Breakout confirmation: trust a breakout bar that prints Strong Bull or Strong Bear, be wary of one that prints orange.
  • Exhaustion warnings: a trend whose new extremes come with orange bars is running on thin participation.
  • Watchlist for accumulation: blue bars at a support or inside a base point to absorption before a move.
  • Alerts: the series “Alert Strong Bull”, “Alert Strong Bear”, “Alert Quiet Accumulation” and “Alert Momentum Without Volume” are 1 on the bar where each state starts, and can be used in the platform’s alert window.

The first 113 bars are a warm-up while the z-score window fills; nothing is drawn before that.

Indicator Configuration

 

  • momoLen (default 14): rate of change length.
  • normLen (default 100): lookback of the z-score and of the percentile ranks.
  • strongZ (default 1.0): z-score threshold for strong momentum.
  • quietMaxZ (default 0.5): maximum absolute z-score for Quiet Accumulation.
  • quietVolMin (default 60): minimum volume percentile for Quiet Accumulation.
  • showZero (default 1): 1 = solid zero line, 0 = dotted.
  • showBands (default 1): show the +1 / -1 sigma bands.
  • showRaw (default 0): show the raw momentum (z-score) line.
  • showDash (default 1): show the dashboard.
  • dashPos (default 2): dashboard corner. 1 = top left, 2 = top right, 3 = bottom left, 4 = bottom right.
  • panelSize (default 3): dashboard text size. 1 = tiny, 2 = small, 3 = normal, 4 = large.
  • Colours of each state (buR/buG/buB, beR/beG/beB, thR/thG/thB, quR/quG/quB, noR/noG/noB) at the top of the code.

The Code

 

//---------------------------------------------------------------
// PRC_Participation Momentum
// version = 0
// 06.11.2026
// Iván González @ www.prorealcode.com
// Author: TradeDots
// Sharing ProRealTime knowledge
//--------------------------------------------------------------------//
// Participation-Adjusted Momentum (TD-PAM)
// Momentum is more trustworthy when participation confirms it. The
// standardised ROC is weighted by the volume percentile, the position
// of the close in the bar and the range-per-volume efficiency.
// States: green = strong bull, red = strong bear, orange = momentum
// without volume, blue = quiet accumulation, grey = noisy.
//--------------------------------------------------------------------//
defparam drawonlastbaronly = true

// ===================== INPUTS =====================
// --- Core settings ---
momoLen = 14        // ROC length
normLen = 100       // percentile / z-score lookback
strongZ = 1.0       // strong momentum: |z| at or above this level
quietMaxZ = 0.5     // quiet accumulation: |z| at or below this level
quietVolMin = 60    // quiet accumulation: minimum volume percentile
// --- Visual settings ---
showZero = 1        // 1 = solid zero line, 0 = dotted
showBands = 1       // 1 = show the +1 / -1 sigma bands
showRaw = 0         // 1 = show the raw momentum (z-score) line
showDash = 1        // 1 = show the dashboard
dashPos = 2         // 1 = top left, 2 = top right, 3 = bottom left, 4 = bottom right
panelSize = 3       // 1 = tiny, 2 = small, 3 = normal, 4 = large

// Colours (bull, bear, thin, quiet, noisy)
buR = 156
buG = 255
buB = 135
beR = 249
beG = 57
beB = 106
thR = 255
thG = 102
thB = 51
quR = 0
quG = 119
quB = 182
noR = 120
noG = 123
noB = 134

// ===================== CORE COMPUTATIONS =====================
// Raw momentum: rate of change standardised as a z-score over normLen bars
IF barindex >= momoLen THEN
   rocV = 100 * (close - close[momoLen]) / close[momoLen]
ELSE
   rocV = 0
ENDIF
warmZ = momoLen + normLen - 1
IF barindex >= warmZ THEN
   mZ = average[normLen](rocV)
   sZ = std[normLen](rocV)
   IF sZ = 0 THEN
      rawMomo = 0
   ELSE
      rawMomo = (rocV - mZ) / sZ
   ENDIF
   zOk = 1
ELSE
   rawMomo = 0
   zOk = 0
ENDIF

// Close location in the bar (0..100)
barRng = high - low
IF barRng = 0 THEN
   clv = 50
ELSE
   clv = (close - low) / barRng * 100
ENDIF

// Range per unit of volume: a wide bar on little volume = thin fills
rangePerVol = barRng / max(volume, 1)

// Every bar stores its volume and range per volume (pure assignment: same value on every tick)
$volA[barindex] = volume
$rpvA[barindex] = rangePerVol

// Percentile ranks (0..100): share of the previous normLen values lower than or equal to the current one
IF barindex >= normLen THEN
   cntV = 0
   cntR = 0
   FOR k = 1 TO normLen DO
      jb = barindex - k
      IF $volA[jb] <= volume THEN
         cntV = cntV + 1
      ENDIF
      IF $rpvA[jb] <= rangePerVol THEN
         cntR = cntR + 1
      ENDIF
   NEXT
   volPct = cntV * 100 / normLen
   rangeEffPct = cntR * 100 / normLen
ELSE
   // no rank yet: the volume percentile defaults to 50
   volPct = 50
   rangeEffPct = 50
ENDIF
rangeEffScore = (100 - rangeEffPct) / 100

// Participation = volume percentile x close location aligned with the direction
IF rawMomo > 0 THEN
   dirNow = 1
   participation = (volPct / 100) * (clv / 100)
ELSIF rawMomo < 0 THEN
   dirNow = 0 - 1
   participation = (volPct / 100) * ((100 - clv) / 100)
ELSE
   dirNow = 0
   participation = (volPct / 100) * 0.5
ENDIF

// Adjusted momentum
qualityBlend = 0.4 * participation + 0.4 * rangeEffScore + 0.2
adjMomo = rawMomo * qualityBlend

// ===================== STATE CLASSIFICATION =====================
strongBull = 0
strongBear = 0
thinMomo = 0
quietAccum = 0
IF zOk = 1 THEN
   IF rawMomo >= strongZ AND participation >= 0.55 THEN
      strongBull = 1
   ENDIF
   IF rawMomo <= 0 - strongZ AND participation >= 0.55 THEN
      strongBear = 1
   ENDIF
   IF abs(rawMomo) >= strongZ AND participation < 0.35 THEN
      thinMomo = 1
   ENDIF
   IF abs(rawMomo) <= quietMaxZ AND volPct >= quietVolMin THEN
      quietAccum = 1
   ENDIF
ENDIF

// stateCode: 1 = Strong Bull, 2 = Strong Bear, 3 = Thin, 4 = Quiet Accumulation, 0 = Noisy
IF strongBull = 1 THEN
   stateCode = 1
   sR = buR
   sG = buG
   sB = buB
   sA = 255
ELSIF strongBear = 1 THEN
   stateCode = 2
   sR = beR
   sG = beG
   sB = beB
   sA = 255
ELSIF thinMomo = 1 THEN
   stateCode = 3
   sR = thR
   sG = thG
   sB = thB
   sA = 255
ELSIF quietAccum = 1 THEN
   stateCode = 4
   sR = quR
   sG = quG
   sB = quB
   sA = 255
ELSE
   stateCode = 0
   sR = noR
   sG = noG
   sB = noB
   sA = 128
ENDIF
histA = round(sA * 0.75)

// Alert feeds: 1 on the bar where a state starts
alBull = (strongBull = 1 AND strongBull[1] = 0)
alBear = (strongBear = 1 AND strongBear[1] = 0)
alQuiet = (quietAccum = 1 AND quietAccum[1] = 0)
alThin = (thinMomo = 1 AND thinMomo[1] = 0)

// ===================== VISUALS =====================
IF barindex < warmZ THEN
   adjPlot = undefined
   rawPlot = undefined
ELSE
   adjPlot = adjMomo
   rawPlot = rawMomo
ENDIF
IF showRaw = 1 THEN
   rawA = 128
ELSE
   rawA = 0
ENDIF
IF showZero = 1 THEN
   zeroSolA = 102
   zeroDotA = 0
ELSE
   zeroSolA = 0
   zeroDotA = 102
ENDIF
IF showBands = 1 THEN
   bandA = 77
ELSE
   bandA = 0
ENDIF

lvMinus = 0 - 1

// ===================== DASHBOARD =====================
IF islastbarupdate AND showDash = 1 THEN
   // Values shown in the dashboard
   rawR = round(rawMomo * 100) / 100
   adjR = round(adjMomo * 100) / 100
   volR = round(volPct)
   parR = round(participation * 100) / 100
   effR = round(rangeEffScore * 100) / 100
   qbR = round(qualityBlend * 100) / 100

   // Cell colours: state, gradients from bear to bull over -2..+2, threshold cells
   IF stateCode = 1 THEN
      c0R = buR
      c0G = buG
      c0B = buB
      c0A = 217
   ELSIF stateCode = 2 THEN
      c0R = beR
      c0G = beG
      c0B = beB
      c0A = 217
   ELSIF stateCode = 3 THEN
      c0R = thR
      c0G = thG
      c0B = thB
      c0A = 191
   ELSIF stateCode = 4 THEN
      c0R = quR
      c0G = quG
      c0B = quB
      c0A = 179
   ELSE
      c0R = noR
      c0G = noG
      c0B = noB
      c0A = 64
   ENDIF
   t1 = max(0, min(1, (rawMomo + 2) / 4))
   c1R = beR + (buR - beR) * t1
   c1G = beG + (buG - beG) * t1
   c1B = beB + (buB - beB) * t1
   t2 = max(0, min(1, (adjMomo + 2) / 4))
   c2R = beR + (buR - beR) * t2
   c2G = beG + (buG - beG) * t2
   c2B = beB + (buB - beB) * t2
   IF volPct >= 70 THEN
      c3R = buR
      c3G = buG
      c3B = buB
      c3A = 191
   ELSIF volPct >= 40 THEN
      c3R = thR
      c3G = thG
      c3B = thB
      c3A = 179
   ELSE
      c3R = beR
      c3G = beG
      c3B = beB
      c3A = 179
   ENDIF
   IF participation >= 0.5 THEN
      c4R = buR
      c4G = buG
      c4B = buB
      c4A = 191
   ELSE
      c4R = thR
      c4G = thG
      c4B = thB
      c4A = 179
   ENDIF
   IF rangeEffScore >= 0.5 THEN
      c5R = buR
      c5G = buG
      c5B = buB
      c5A = 191
   ELSE
      c5R = beR
      c5G = beG
      c5B = beB
      c5A = 179
   ENDIF
   IF qualityBlend >= 0.6 THEN
      c6R = buR
      c6G = buG
      c6B = buB
      c6A = 191
   ELSE
      c6R = thR
      c6G = thG
      c6B = thB
      c6A = 179
   ENDIF

   // Text geometry: a monospaced font, so every character is chW pixels wide
   IF panelSize = 1 THEN
      pz = 8
   ELSIF panelSize = 2 THEN
      pz = 9
   ELSIF panelSize = 4 THEN
      pz = 14
   ELSE
      pz = 11
   ENDIF
   chW = pz * 0.62
   rowH = pz + 8
   padX = 8
   padY = 4
   // Two columns: names (22 characters at most) and values (24), the values in a coloured cell
   pW = 49 * chW + 2 * padX
   pH = 7 * 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
   cL = pL + padX + 23 * chW
   cR = pL + pW - padX
   xVal = (cL + cR) / 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
   yT0 = pT - padY - 1
   yT1 = pT - padY - rowH - 1
   yT2 = pT - padY - rowH * 2 - 1
   yT3 = pT - padY - rowH * 3 - 1
   yT4 = pT - padY - rowH * 4 - 1
   yT5 = pT - padY - rowH * 5 - 1
   yT6 = pT - padY - rowH * 6 - 1
   yHd = pT - padY - rowH
   // Names aligned left: each one centred on half its own length
   xN0 = pL + padX + 22 * chW / 2
   xN1 = pL + padX + 12 * chW / 2
   xN2 = pL + padX + 13 * chW / 2
   xN3 = pL + padX + 10 * chW / 2
   xN4 = pL + padX + 13 * chW / 2
   xN5 = pL + padX + 16 * chW / 2
   xN6 = pL + padX + 13 * 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)
      DRAWRECTANGLE(cL, yT0, cR, yT0 - rowH + 2) ANCHOR(TOPLEFT, XSHIFT, YSHIFT) COLOURED(c0R, c0G, c0B, 0) FILLCOLOR(c0R, c0G, c0B, c0A)
      DRAWRECTANGLE(cL, yT1, cR, yT1 - rowH + 2) ANCHOR(TOPLEFT, XSHIFT, YSHIFT) COLOURED(c1R, c1G, c1B, 0) FILLCOLOR(c1R, c1G, c1B, 217)
      DRAWRECTANGLE(cL, yT2, cR, yT2 - rowH + 2) ANCHOR(TOPLEFT, XSHIFT, YSHIFT) COLOURED(c2R, c2G, c2B, 0) FILLCOLOR(c2R, c2G, c2B, 217)
      DRAWRECTANGLE(cL, yT3, cR, yT3 - rowH + 2) ANCHOR(TOPLEFT, XSHIFT, YSHIFT) COLOURED(c3R, c3G, c3B, 0) FILLCOLOR(c3R, c3G, c3B, c3A)
      DRAWRECTANGLE(cL, yT4, cR, yT4 - rowH + 2) ANCHOR(TOPLEFT, XSHIFT, YSHIFT) COLOURED(c4R, c4G, c4B, 0) FILLCOLOR(c4R, c4G, c4B, c4A)
      DRAWRECTANGLE(cL, yT5, cR, yT5 - rowH + 2) ANCHOR(TOPLEFT, XSHIFT, YSHIFT) COLOURED(c5R, c5G, c5B, 0) FILLCOLOR(c5R, c5G, c5B, c5A)
      DRAWRECTANGLE(cL, yT6, cR, yT6 - rowH + 2) ANCHOR(TOPLEFT, XSHIFT, YSHIFT) COLOURED(c6R, c6G, c6B, 0) FILLCOLOR(c6R, c6G, c6B, c6A)
      DRAWTEXT("TD-PAM - Participation", xN0, yR0, monospaced, bold, pz) ANCHOR(TOPLEFT, XSHIFT, YSHIFT) COLOURED(0, 0, 0, 255)
      IF stateCode = 1 THEN
         DRAWTEXT("Strong Bull", xVal, yR0, monospaced, bold, pz) ANCHOR(TOPLEFT, XSHIFT, YSHIFT) COLOURED(32, 70, 52, 255)
      ELSIF stateCode = 2 THEN
         DRAWTEXT("Strong Bear", xVal, yR0, monospaced, bold, pz) ANCHOR(TOPLEFT, XSHIFT, YSHIFT) COLOURED(27, 27, 27, 255)
      ELSIF stateCode = 3 THEN
         DRAWTEXT("Thin (low participation)", xVal, yR0, monospaced, bold, pz) ANCHOR(TOPLEFT, XSHIFT, YSHIFT) COLOURED(27, 27, 27, 255)
      ELSIF stateCode = 4 THEN
         DRAWTEXT("Quiet Accumulation", xVal, yR0, monospaced, bold, pz) ANCHOR(TOPLEFT, XSHIFT, YSHIFT) COLOURED(27, 27, 27, 255)
      ELSE
         DRAWTEXT("Noisy / Low Quality", xVal, yR0, monospaced, bold, pz) ANCHOR(TOPLEFT, XSHIFT, YSHIFT) COLOURED(27, 27, 27, 255)
      ENDIF
      DRAWTEXT("Raw Momo (z)", xN1, yR1, monospaced, standard, pz) ANCHOR(TOPLEFT, XSHIFT, YSHIFT) COLOURED(100, 106, 120, 255)
      DRAWTEXT("#rawR#", xVal, yR1, monospaced, standard, pz) ANCHOR(TOPLEFT, XSHIFT, YSHIFT) COLOURED(27, 27, 27, 255)
      DRAWTEXT("Adjusted Momo", xN2, yR2, monospaced, standard, pz) ANCHOR(TOPLEFT, XSHIFT, YSHIFT) COLOURED(100, 106, 120, 255)
      DRAWTEXT("#adjR#", xVal, yR2, monospaced, standard, pz) ANCHOR(TOPLEFT, XSHIFT, YSHIFT) COLOURED(27, 27, 27, 255)
      DRAWTEXT("Volume Pct", xN3, yR3, monospaced, standard, pz) ANCHOR(TOPLEFT, XSHIFT, YSHIFT) COLOURED(100, 106, 120, 255)
      DRAWTEXT("#volR#%", xVal, yR3, monospaced, standard, pz) ANCHOR(TOPLEFT, XSHIFT, YSHIFT) COLOURED(27, 27, 27, 255)
      DRAWTEXT("Participation", xN4, yR4, monospaced, standard, pz) ANCHOR(TOPLEFT, XSHIFT, YSHIFT) COLOURED(100, 106, 120, 255)
      DRAWTEXT("#parR#", xVal, yR4, monospaced, standard, pz) ANCHOR(TOPLEFT, XSHIFT, YSHIFT) COLOURED(27, 27, 27, 255)
      DRAWTEXT("Range Efficiency", xN5, yR5, monospaced, standard, pz) ANCHOR(TOPLEFT, XSHIFT, YSHIFT) COLOURED(100, 106, 120, 255)
      DRAWTEXT("#effR#", xVal, yR5, monospaced, standard, pz) ANCHOR(TOPLEFT, XSHIFT, YSHIFT) COLOURED(27, 27, 27, 255)
      DRAWTEXT("Quality Blend", xN6, yR6, monospaced, standard, pz) ANCHOR(TOPLEFT, XSHIFT, YSHIFT) COLOURED(100, 106, 120, 255)
      DRAWTEXT("#qbR#", xVal, yR6, monospaced, standard, pz) ANCHOR(TOPLEFT, XSHIFT, YSHIFT) COLOURED(27, 27, 27, 255)
   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)
      DRAWRECTANGLE(cL, yT0, cR, yT0 - rowH + 2) ANCHOR(TOPRIGHT, XSHIFT, YSHIFT) COLOURED(c0R, c0G, c0B, 0) FILLCOLOR(c0R, c0G, c0B, c0A)
      DRAWRECTANGLE(cL, yT1, cR, yT1 - rowH + 2) ANCHOR(TOPRIGHT, XSHIFT, YSHIFT) COLOURED(c1R, c1G, c1B, 0) FILLCOLOR(c1R, c1G, c1B, 217)
      DRAWRECTANGLE(cL, yT2, cR, yT2 - rowH + 2) ANCHOR(TOPRIGHT, XSHIFT, YSHIFT) COLOURED(c2R, c2G, c2B, 0) FILLCOLOR(c2R, c2G, c2B, 217)
      DRAWRECTANGLE(cL, yT3, cR, yT3 - rowH + 2) ANCHOR(TOPRIGHT, XSHIFT, YSHIFT) COLOURED(c3R, c3G, c3B, 0) FILLCOLOR(c3R, c3G, c3B, c3A)
      DRAWRECTANGLE(cL, yT4, cR, yT4 - rowH + 2) ANCHOR(TOPRIGHT, XSHIFT, YSHIFT) COLOURED(c4R, c4G, c4B, 0) FILLCOLOR(c4R, c4G, c4B, c4A)
      DRAWRECTANGLE(cL, yT5, cR, yT5 - rowH + 2) ANCHOR(TOPRIGHT, XSHIFT, YSHIFT) COLOURED(c5R, c5G, c5B, 0) FILLCOLOR(c5R, c5G, c5B, c5A)
      DRAWRECTANGLE(cL, yT6, cR, yT6 - rowH + 2) ANCHOR(TOPRIGHT, XSHIFT, YSHIFT) COLOURED(c6R, c6G, c6B, 0) FILLCOLOR(c6R, c6G, c6B, c6A)
      DRAWTEXT("TD-PAM - Participation", xN0, yR0, monospaced, bold, pz) ANCHOR(TOPRIGHT, XSHIFT, YSHIFT) COLOURED(0, 0, 0, 255)
      IF stateCode = 1 THEN
         DRAWTEXT("Strong Bull", xVal, yR0, monospaced, bold, pz) ANCHOR(TOPRIGHT, XSHIFT, YSHIFT) COLOURED(32, 70, 52, 255)
      ELSIF stateCode = 2 THEN
         DRAWTEXT("Strong Bear", xVal, yR0, monospaced, bold, pz) ANCHOR(TOPRIGHT, XSHIFT, YSHIFT) COLOURED(27, 27, 27, 255)
      ELSIF stateCode = 3 THEN
         DRAWTEXT("Thin (low participation)", xVal, yR0, monospaced, bold, pz) ANCHOR(TOPRIGHT, XSHIFT, YSHIFT) COLOURED(27, 27, 27, 255)
      ELSIF stateCode = 4 THEN
         DRAWTEXT("Quiet Accumulation", xVal, yR0, monospaced, bold, pz) ANCHOR(TOPRIGHT, XSHIFT, YSHIFT) COLOURED(27, 27, 27, 255)
      ELSE
         DRAWTEXT("Noisy / Low Quality", xVal, yR0, monospaced, bold, pz) ANCHOR(TOPRIGHT, XSHIFT, YSHIFT) COLOURED(27, 27, 27, 255)
      ENDIF
      DRAWTEXT("Raw Momo (z)", xN1, yR1, monospaced, standard, pz) ANCHOR(TOPRIGHT, XSHIFT, YSHIFT) COLOURED(100, 106, 120, 255)
      DRAWTEXT("#rawR#", xVal, yR1, monospaced, standard, pz) ANCHOR(TOPRIGHT, XSHIFT, YSHIFT) COLOURED(27, 27, 27, 255)
      DRAWTEXT("Adjusted Momo", xN2, yR2, monospaced, standard, pz) ANCHOR(TOPRIGHT, XSHIFT, YSHIFT) COLOURED(100, 106, 120, 255)
      DRAWTEXT("#adjR#", xVal, yR2, monospaced, standard, pz) ANCHOR(TOPRIGHT, XSHIFT, YSHIFT) COLOURED(27, 27, 27, 255)
      DRAWTEXT("Volume Pct", xN3, yR3, monospaced, standard, pz) ANCHOR(TOPRIGHT, XSHIFT, YSHIFT) COLOURED(100, 106, 120, 255)
      DRAWTEXT("#volR#%", xVal, yR3, monospaced, standard, pz) ANCHOR(TOPRIGHT, XSHIFT, YSHIFT) COLOURED(27, 27, 27, 255)
      DRAWTEXT("Participation", xN4, yR4, monospaced, standard, pz) ANCHOR(TOPRIGHT, XSHIFT, YSHIFT) COLOURED(100, 106, 120, 255)
      DRAWTEXT("#parR#", xVal, yR4, monospaced, standard, pz) ANCHOR(TOPRIGHT, XSHIFT, YSHIFT) COLOURED(27, 27, 27, 255)
      DRAWTEXT("Range Efficiency", xN5, yR5, monospaced, standard, pz) ANCHOR(TOPRIGHT, XSHIFT, YSHIFT) COLOURED(100, 106, 120, 255)
      DRAWTEXT("#effR#", xVal, yR5, monospaced, standard, pz) ANCHOR(TOPRIGHT, XSHIFT, YSHIFT) COLOURED(27, 27, 27, 255)
      DRAWTEXT("Quality Blend", xN6, yR6, monospaced, standard, pz) ANCHOR(TOPRIGHT, XSHIFT, YSHIFT) COLOURED(100, 106, 120, 255)
      DRAWTEXT("#qbR#", xVal, yR6, monospaced, standard, pz) ANCHOR(TOPRIGHT, XSHIFT, YSHIFT) COLOURED(27, 27, 27, 255)
   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)
      DRAWRECTANGLE(cL, yT0, cR, yT0 - rowH + 2) ANCHOR(BOTTOMLEFT, XSHIFT, YSHIFT) COLOURED(c0R, c0G, c0B, 0) FILLCOLOR(c0R, c0G, c0B, c0A)
      DRAWRECTANGLE(cL, yT1, cR, yT1 - rowH + 2) ANCHOR(BOTTOMLEFT, XSHIFT, YSHIFT) COLOURED(c1R, c1G, c1B, 0) FILLCOLOR(c1R, c1G, c1B, 217)
      DRAWRECTANGLE(cL, yT2, cR, yT2 - rowH + 2) ANCHOR(BOTTOMLEFT, XSHIFT, YSHIFT) COLOURED(c2R, c2G, c2B, 0) FILLCOLOR(c2R, c2G, c2B, 217)
      DRAWRECTANGLE(cL, yT3, cR, yT3 - rowH + 2) ANCHOR(BOTTOMLEFT, XSHIFT, YSHIFT) COLOURED(c3R, c3G, c3B, 0) FILLCOLOR(c3R, c3G, c3B, c3A)
      DRAWRECTANGLE(cL, yT4, cR, yT4 - rowH + 2) ANCHOR(BOTTOMLEFT, XSHIFT, YSHIFT) COLOURED(c4R, c4G, c4B, 0) FILLCOLOR(c4R, c4G, c4B, c4A)
      DRAWRECTANGLE(cL, yT5, cR, yT5 - rowH + 2) ANCHOR(BOTTOMLEFT, XSHIFT, YSHIFT) COLOURED(c5R, c5G, c5B, 0) FILLCOLOR(c5R, c5G, c5B, c5A)
      DRAWRECTANGLE(cL, yT6, cR, yT6 - rowH + 2) ANCHOR(BOTTOMLEFT, XSHIFT, YSHIFT) COLOURED(c6R, c6G, c6B, 0) FILLCOLOR(c6R, c6G, c6B, c6A)
      DRAWTEXT("TD-PAM - Participation", xN0, yR0, monospaced, bold, pz) ANCHOR(BOTTOMLEFT, XSHIFT, YSHIFT) COLOURED(0, 0, 0, 255)
      IF stateCode = 1 THEN
         DRAWTEXT("Strong Bull", xVal, yR0, monospaced, bold, pz) ANCHOR(BOTTOMLEFT, XSHIFT, YSHIFT) COLOURED(32, 70, 52, 255)
      ELSIF stateCode = 2 THEN
         DRAWTEXT("Strong Bear", xVal, yR0, monospaced, bold, pz) ANCHOR(BOTTOMLEFT, XSHIFT, YSHIFT) COLOURED(27, 27, 27, 255)
      ELSIF stateCode = 3 THEN
         DRAWTEXT("Thin (low participation)", xVal, yR0, monospaced, bold, pz) ANCHOR(BOTTOMLEFT, XSHIFT, YSHIFT) COLOURED(27, 27, 27, 255)
      ELSIF stateCode = 4 THEN
         DRAWTEXT("Quiet Accumulation", xVal, yR0, monospaced, bold, pz) ANCHOR(BOTTOMLEFT, XSHIFT, YSHIFT) COLOURED(27, 27, 27, 255)
      ELSE
         DRAWTEXT("Noisy / Low Quality", xVal, yR0, monospaced, bold, pz) ANCHOR(BOTTOMLEFT, XSHIFT, YSHIFT) COLOURED(27, 27, 27, 255)
      ENDIF
      DRAWTEXT("Raw Momo (z)", xN1, yR1, monospaced, standard, pz) ANCHOR(BOTTOMLEFT, XSHIFT, YSHIFT) COLOURED(100, 106, 120, 255)
      DRAWTEXT("#rawR#", xVal, yR1, monospaced, standard, pz) ANCHOR(BOTTOMLEFT, XSHIFT, YSHIFT) COLOURED(27, 27, 27, 255)
      DRAWTEXT("Adjusted Momo", xN2, yR2, monospaced, standard, pz) ANCHOR(BOTTOMLEFT, XSHIFT, YSHIFT) COLOURED(100, 106, 120, 255)
      DRAWTEXT("#adjR#", xVal, yR2, monospaced, standard, pz) ANCHOR(BOTTOMLEFT, XSHIFT, YSHIFT) COLOURED(27, 27, 27, 255)
      DRAWTEXT("Volume Pct", xN3, yR3, monospaced, standard, pz) ANCHOR(BOTTOMLEFT, XSHIFT, YSHIFT) COLOURED(100, 106, 120, 255)
      DRAWTEXT("#volR#%", xVal, yR3, monospaced, standard, pz) ANCHOR(BOTTOMLEFT, XSHIFT, YSHIFT) COLOURED(27, 27, 27, 255)
      DRAWTEXT("Participation", xN4, yR4, monospaced, standard, pz) ANCHOR(BOTTOMLEFT, XSHIFT, YSHIFT) COLOURED(100, 106, 120, 255)
      DRAWTEXT("#parR#", xVal, yR4, monospaced, standard, pz) ANCHOR(BOTTOMLEFT, XSHIFT, YSHIFT) COLOURED(27, 27, 27, 255)
      DRAWTEXT("Range Efficiency", xN5, yR5, monospaced, standard, pz) ANCHOR(BOTTOMLEFT, XSHIFT, YSHIFT) COLOURED(100, 106, 120, 255)
      DRAWTEXT("#effR#", xVal, yR5, monospaced, standard, pz) ANCHOR(BOTTOMLEFT, XSHIFT, YSHIFT) COLOURED(27, 27, 27, 255)
      DRAWTEXT("Quality Blend", xN6, yR6, monospaced, standard, pz) ANCHOR(BOTTOMLEFT, XSHIFT, YSHIFT) COLOURED(100, 106, 120, 255)
      DRAWTEXT("#qbR#", xVal, yR6, monospaced, standard, pz) ANCHOR(BOTTOMLEFT, XSHIFT, YSHIFT) COLOURED(27, 27, 27, 255)
   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)
      DRAWRECTANGLE(cL, yT0, cR, yT0 - rowH + 2) ANCHOR(BOTTOMRIGHT, XSHIFT, YSHIFT) COLOURED(c0R, c0G, c0B, 0) FILLCOLOR(c0R, c0G, c0B, c0A)
      DRAWRECTANGLE(cL, yT1, cR, yT1 - rowH + 2) ANCHOR(BOTTOMRIGHT, XSHIFT, YSHIFT) COLOURED(c1R, c1G, c1B, 0) FILLCOLOR(c1R, c1G, c1B, 217)
      DRAWRECTANGLE(cL, yT2, cR, yT2 - rowH + 2) ANCHOR(BOTTOMRIGHT, XSHIFT, YSHIFT) COLOURED(c2R, c2G, c2B, 0) FILLCOLOR(c2R, c2G, c2B, 217)
      DRAWRECTANGLE(cL, yT3, cR, yT3 - rowH + 2) ANCHOR(BOTTOMRIGHT, XSHIFT, YSHIFT) COLOURED(c3R, c3G, c3B, 0) FILLCOLOR(c3R, c3G, c3B, c3A)
      DRAWRECTANGLE(cL, yT4, cR, yT4 - rowH + 2) ANCHOR(BOTTOMRIGHT, XSHIFT, YSHIFT) COLOURED(c4R, c4G, c4B, 0) FILLCOLOR(c4R, c4G, c4B, c4A)
      DRAWRECTANGLE(cL, yT5, cR, yT5 - rowH + 2) ANCHOR(BOTTOMRIGHT, XSHIFT, YSHIFT) COLOURED(c5R, c5G, c5B, 0) FILLCOLOR(c5R, c5G, c5B, c5A)
      DRAWRECTANGLE(cL, yT6, cR, yT6 - rowH + 2) ANCHOR(BOTTOMRIGHT, XSHIFT, YSHIFT) COLOURED(c6R, c6G, c6B, 0) FILLCOLOR(c6R, c6G, c6B, c6A)
      DRAWTEXT("TD-PAM - Participation", xN0, yR0, monospaced, bold, pz) ANCHOR(BOTTOMRIGHT, XSHIFT, YSHIFT) COLOURED(0, 0, 0, 255)
      IF stateCode = 1 THEN
         DRAWTEXT("Strong Bull", xVal, yR0, monospaced, bold, pz) ANCHOR(BOTTOMRIGHT, XSHIFT, YSHIFT) COLOURED(32, 70, 52, 255)
      ELSIF stateCode = 2 THEN
         DRAWTEXT("Strong Bear", xVal, yR0, monospaced, bold, pz) ANCHOR(BOTTOMRIGHT, XSHIFT, YSHIFT) COLOURED(27, 27, 27, 255)
      ELSIF stateCode = 3 THEN
         DRAWTEXT("Thin (low participation)", xVal, yR0, monospaced, bold, pz) ANCHOR(BOTTOMRIGHT, XSHIFT, YSHIFT) COLOURED(27, 27, 27, 255)
      ELSIF stateCode = 4 THEN
         DRAWTEXT("Quiet Accumulation", xVal, yR0, monospaced, bold, pz) ANCHOR(BOTTOMRIGHT, XSHIFT, YSHIFT) COLOURED(27, 27, 27, 255)
      ELSE
         DRAWTEXT("Noisy / Low Quality", xVal, yR0, monospaced, bold, pz) ANCHOR(BOTTOMRIGHT, XSHIFT, YSHIFT) COLOURED(27, 27, 27, 255)
      ENDIF
      DRAWTEXT("Raw Momo (z)", xN1, yR1, monospaced, standard, pz) ANCHOR(BOTTOMRIGHT, XSHIFT, YSHIFT) COLOURED(100, 106, 120, 255)
      DRAWTEXT("#rawR#", xVal, yR1, monospaced, standard, pz) ANCHOR(BOTTOMRIGHT, XSHIFT, YSHIFT) COLOURED(27, 27, 27, 255)
      DRAWTEXT("Adjusted Momo", xN2, yR2, monospaced, standard, pz) ANCHOR(BOTTOMRIGHT, XSHIFT, YSHIFT) COLOURED(100, 106, 120, 255)
      DRAWTEXT("#adjR#", xVal, yR2, monospaced, standard, pz) ANCHOR(BOTTOMRIGHT, XSHIFT, YSHIFT) COLOURED(27, 27, 27, 255)
      DRAWTEXT("Volume Pct", xN3, yR3, monospaced, standard, pz) ANCHOR(BOTTOMRIGHT, XSHIFT, YSHIFT) COLOURED(100, 106, 120, 255)
      DRAWTEXT("#volR#%", xVal, yR3, monospaced, standard, pz) ANCHOR(BOTTOMRIGHT, XSHIFT, YSHIFT) COLOURED(27, 27, 27, 255)
      DRAWTEXT("Participation", xN4, yR4, monospaced, standard, pz) ANCHOR(BOTTOMRIGHT, XSHIFT, YSHIFT) COLOURED(100, 106, 120, 255)
      DRAWTEXT("#parR#", xVal, yR4, monospaced, standard, pz) ANCHOR(BOTTOMRIGHT, XSHIFT, YSHIFT) COLOURED(27, 27, 27, 255)
      DRAWTEXT("Range Efficiency", xN5, yR5, monospaced, standard, pz) ANCHOR(BOTTOMRIGHT, XSHIFT, YSHIFT) COLOURED(100, 106, 120, 255)
      DRAWTEXT("#effR#", xVal, yR5, monospaced, standard, pz) ANCHOR(BOTTOMRIGHT, XSHIFT, YSHIFT) COLOURED(27, 27, 27, 255)
      DRAWTEXT("Quality Blend", xN6, yR6, monospaced, standard, pz) ANCHOR(BOTTOMRIGHT, XSHIFT, YSHIFT) COLOURED(100, 106, 120, 255)
      DRAWTEXT("#qbR#", xVal, yR6, monospaced, standard, pz) ANCHOR(BOTTOMRIGHT, XSHIFT, YSHIFT) COLOURED(27, 27, 27, 255)
   ENDIF
ENDIF

RETURN adjPlot COLOURED(sR, sG, sB, histA) STYLE(histogram) AS "Adjusted Momentum", adjPlot COLOURED(sR, sG, sB, sA) STYLE(line, 1) AS "Adjusted Momentum (line)", rawPlot COLOURED(120, 123, 134, rawA) STYLE(line, 1) AS "Raw Momentum (z)", 0 COLOURED(120, 123, 134, zeroSolA) STYLE(line, 1) AS "Zero", 0 COLOURED(120, 123, 134, zeroDotA) STYLE(dottedline, 1) AS "Zero (dotted)", 1 COLOURED(buR, buG, buB, bandA) STYLE(dottedline2, 1) AS "+1 Sigma", lvMinus COLOURED(beR, beG, beB, bandA) STYLE(dottedline2, 1) AS "-1 Sigma", participation COLOURED(120, 123, 134, 0) AS "Participation", dirNow COLOURED(120, 123, 134, 0) AS "Direction", alBull COLOURED(buR, buG, buB, 0) AS "Alert Strong Bull", alBear COLOURED(beR, beG, beB, 0) AS "Alert Strong Bear", alQuiet COLOURED(quR, quG, quB, 0) AS "Alert Quiet Accumulation", alThin COLOURED(thR, thG, thB, 0) AS "Alert Momentum Without Volume"

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

Comments

ProRealCode ProRealCode
Loading...