Iván González

VWAP & Volume-Spike Suite: Monthly Anchored VWAP

Category: Indicators By: Iván González Created: October 29, 2026, 4:48 PM
October 29, 2026, 4:48 PM
Indicators
0 Comments
VWAP & Volume-Spike Suite: Monthly Anchored VWAP

Introduction

 

The VWAP is the volume-weighted fair price of a period: the level where, on average, the volume of that period changed hands. Anchored to the start of each month, it becomes a reference that swing traders can use on daily and weekly charts: price far below it is cheap compared with the month’s fair value, price far above it is rich.

The VWAP & Volume-Spike Suite by RichmondHillCM combines that monthly VWAP and its standard-deviation bands with a second, independent signal: bars where volume is clearly above its average. Each volume spike is marked with an up or down triangle according to its direction, and a summary table keeps the key levels and the current state of the market in one place.

Theory Behind the Indicator

 

Monthly anchored VWAP. On the first bar of each month the indicator starts three running sums: volume, price × volume and price² × volume, using the typical price (high + low + close) / 3. The VWAP is price × volume divided by volume, and the standard deviation comes from the volume-weighted variance (average of price² minus VWAP²). The bands sit at VWAP ± k standard deviations; the table also shows the ±1, ±2 and ±3 sigma levels.

Volume spike. A bar is a spike when its volume is above its 28-bar simple average multiplied by the threshold (1.7 by default). Bars with no volume never give a spike.

Direction. The spike becomes bullish or bearish according to the chosen definition:

  • VWAP (default): close above the monthly VWAP is bullish, below it bearish.
  • Candle: close above the open is bullish, below it bearish.
  • Close-Close: close above the previous close is bullish, below it bearish.

Key Features at a Glance

 

  • Monthly anchored VWAP with an adjustable sigma band and a shaded band zone.
  • Volume-spike triangles with optional “VOL▲” / “VOL▼” labels.
  • Three ways to define the direction of a spike.
  • Optional confirmation on bar close, so the live bar never shows a signal that may disappear.
  • Names of the VWAP and the bands at the right edge of the chart.
  • Summary table: ±1/2/3 sigma levels, the VWAP, the zone of the price, volume versus its average, the current spike and the running count of up and down triangles.

How to Read the Indicator

 

  • Teal thick line: the monthly VWAP, the mean pivot of the month. Reclaiming it is bullish, losing it bearish.
  • Lower band: cheap versus fair value, the long or entry zone.
  • Upper band: rich versus fair value, the zone to scale out or look for shorts.
  • Green triangle below the bar: heavy volume in the bullish direction. Red triangle above the bar: heavy volume in the bearish direction.
  • VWAP Zone in the table: Above Upper, Upper Half, Lower Half or Below Lower, according to where the close sits against the plotted band.
  • Up ▲ / Down ▼: how many bullish and bearish spikes the indicator has found on the loaded history.

On a weekly chart each month holds 4 or 5 bars of VWAP data, which is the setting the author recommends. On intraday charts the VWAP covers the whole month, so it moves slowly and works as a higher-level reference.

Practical Applications

 

  • Mean-reversion entries: a bullish volume spike near or below the lower band shows buyers stepping in where price is cheap against the month’s fair value.
  • Trend confirmation: in the default VWAP mode, a series of bullish spikes above the VWAP confirms that the heavy volume is on the buy side.
  • Profit taking: the upper band and the +2 and +3 sigma levels in the table give objective zones to scale out.
  • Alerts: the VWAP and the two bands are plotted as series, so price alerts can be set on them in the platform, for example the close crossing the monthly VWAP.

Indicator Configuration

 

  • showVwap (default 1): show the monthly VWAP.
  • showBands (default 1): show the sigma bands.
  • vwapMult (default 1.0): width of the plotted band in standard deviations.
  • fillBands (default 1): shade the zone between the bands.
  • showVwapLbl (default 1): write the names of the VWAP and the bands at the right edge.
  • showTriangles (default 1): show the volume-spike triangles.
  • volumeMaLength (default 28): length of the volume moving average.
  • volumeThreshold (default 1.7): spike threshold, as a multiple of the average volume.
  • dirMode (default 0): direction of a spike. 0 = close versus the VWAP, 1 = candle colour, 2 = close versus the previous close.
  • showSpikeText (default 1): add the “VOL” label to each triangle.
  • confirmOnClose (default 0): 1 = only signal on closed bars.
  • showTable (default 1): show the summary table.
  • tblVert (default 0): position of the table, 0 = top right, 1 = bottom right.

The VWAP and the bands are drawn as continuous lines. If you prefer them as steps, choose the “Stair” style for each line in the indicator properties.

The Code

 

//---------------------------------------------------------------
// PRC_VWAP Volume Spike
// version = 0
// 28.10.2026
// Iván González @ www.prorealcode.com
// Author: RichmondHillCM
// Sharing ProRealTime knowledge
//--------------------------------------------------------------------//
DEFPARAM DRAWONLASTBARONLY = true

// ===================== INPUTS: MONTHLY VWAP + BANDS =====================
showVwap = 1           // 1 = show the monthly VWAP
showBands = 1          // 1 = show the sigma bands
vwapMult = 1.0         // band width (sigma multiplier, min 0.1)
fillBands = 1          // 1 = shade the band zone
showVwapLbl = 1        // 1 = label the VWAP and the bands on the last bar

// ===================== INPUTS: VOLUME SPIKE =====================
showTriangles = 1      // 1 = show the up/down volume-spike triangles
volumeMaLength = 28    // volume moving average length
volumeThreshold = 1.7  // spike threshold (x average volume, min 1)
dirMode = 0            // direction: 0 = close vs VWAP, 1 = candle (close vs open), 2 = close vs prior close
showSpikeText = 1      // 1 = label the triangles (VOL up / VOL down)
confirmOnClose = 0     // 1 = only signal on closed bars (no intrabar repaint)

// ===================== INPUTS: SUMMARY TABLE =====================
showTable = 1          // 1 = show the summary table
tblVert = 0            // table position: 0 = top right, 1 = bottom right

vwapSrc = typicalprice // VWAP source: (high + low + close) / 3

// ===================== VOLUME SPIKE =====================
volMa = average[volumeMaLength](volume)
maOk = 0
IF barindex >= volumeMaLength - 1 THEN
   maOk = 1
ENDIF
volSpike = 0
IF volume > 0 AND maOk = 1 AND volume > volMa * volumeThreshold THEN
   volSpike = 1
ENDIF
vrOk = 0
IF maOk = 1 AND volMa <> 0 THEN
   vrOk = 1
   volRatio = volume / volMa
ENDIF

// ===================== ANCHORED MONTHLY VWAP + SIGMA BANDS =====================
// the sums restart on the first bar of each month
newMonth = 0
IF barindex = 0 THEN
   newMonth = 1
ELSIF openmonth <> openmonth[1] OR openyear <> openyear[1] THEN
   newMonth = 1
ENDIF
IF newMonth = 1 THEN
   sumV = volume
   sumPV = vwapSrc * volume
   sumPPV = vwapSrc * vwapSrc * volume
ELSE
   sumV = sumV + volume
   sumPV = sumPV + vwapSrc * volume
   sumPPV = sumPPV + vwapSrc * vwapSrc * volume
ENDIF
// with no volume in the month so far the VWAP does not exist: lines hidden
vOk = 0
IF sumV > 0 THEN
   vOk = 1
   vwapV = sumPV / sumV
   variance = sumPPV / sumV - vwapV * vwapV
   IF variance < 0 THEN
      variance = 0
   ENDIF
   sigma = sqrt(variance)
ELSIF barindex = 0 THEN
   vwapV = vwapSrc
   sigma = 0
ENDIF
vwapUp1 = vwapV + sigma
vwapUp2 = vwapV + 2 * sigma
vwapUp3 = vwapV + 3 * sigma
vwapLo1 = vwapV - sigma
vwapLo2 = vwapV - 2 * sigma
vwapLo3 = vwapV - 3 * sigma
vwapUpper = vwapV + vwapMult * sigma
vwapLower = vwapV - vwapMult * sigma

// ===================== SIGNALS =====================
dirUp = 0
dirDn = 0
IF dirMode = 0 THEN
   IF vOk = 1 AND close > vwapV THEN
      dirUp = 1
   ENDIF
   IF vOk = 1 AND close < vwapV THEN
      dirDn = 1
   ENDIF
ELSIF dirMode = 1 THEN
   IF close > open THEN
      dirUp = 1
   ENDIF
   IF close < open THEN
      dirDn = 1
   ENDIF
ELSE
   IF close > close[1] THEN
      dirUp = 1
   ENDIF
   IF close < close[1] THEN
      dirDn = 1
   ENDIF
ENDIF
// the live bar is the only one that is not closed yet
barOk = 1
IF confirmOnClose = 1 AND islastbarupdate THEN
   barOk = 0
ENDIF
spikeUp = 0
spikeDn = 0
IF volSpike = 1 AND dirUp = 1 AND barOk = 1 THEN
   spikeUp = 1
ENDIF
IF volSpike = 1 AND dirDn = 1 AND barOk = 1 THEN
   spikeDn = 1
ENDIF

// ===================== STATISTICS =====================
once cntUp = 0
once cntDn = 0
cntUp = cntUp + spikeUp
cntDn = cntDn + spikeDn

// 0 = no VWAP, 1 = above upper, 2 = below lower, 3 = upper half, 4 = lower half
IF vOk = 0 THEN
   vwapZone = 0
ELSIF close > vwapUpper THEN
   vwapZone = 1
ELSIF close < vwapLower THEN
   vwapZone = 2
ELSIF close > vwapV THEN
   vwapZone = 3
ELSE
   vwapZone = 4
ENDIF

// ===================== SPIKE MARKS =====================
// stored with a pure assignment indexed by a scalar counter (the counter
// rewinds between ticks, so a spike that disappears on the live bar leaves
// nothing behind) and redrawn on the last bar
IF barindex >= 14 THEN
   sigOff = averagetruerange[14](close)
ELSE
   sigOff = high - low
ENDIF
once nSig = 0
IF showTriangles = 1 AND spikeUp = 1 THEN
   $sgX[nSig] = barindex
   $sgY1[nSig] = low - 0.5 * sigOff
   $sgY2[nSig] = low - 1.3 * sigOff
   $sgD[nSig] = 1
   nSig = nSig + 1
ENDIF
IF showTriangles = 1 AND spikeDn = 1 THEN
   $sgX[nSig] = barindex
   $sgY1[nSig] = high + 0.5 * sigOff
   $sgY2[nSig] = high + 1.3 * sigOff
   $sgD[nSig] = -1
   nSig = nSig + 1
ENDIF

// ===================== LINE VISIBILITY =====================
IF showVwap = 1 AND vOk = 1 THEN
   vwapA = 255
ELSE
   vwapA = 0
ENDIF
IF showBands = 1 AND vOk = 1 THEN
   bandA = 153
ELSE
   bandA = 0
ENDIF
IF fillBands = 1 AND showBands = 1 AND vOk = 1 THEN
   fillA = 20
ELSE
   fillA = 0
ENDIF
COLORBETWEEN(vwapUpper, vwapLower, 8, 153, 129, fillA)

IF islastbarupdate THEN
   // ---------- triangles, and the text labels of the most recent spikes ----------
   // the original keeps its 500 most recent labels (three of them are the curve names)
   nCurve = 0
   IF showVwapLbl = 1 AND vOk = 1 THEN
      nCurve = showVwap + 2 * showBands
   ENDIF
   firstLbl = nSig - (500 - nCurve)
   IF nSig > 0 THEN
      FOR k = 0 TO nSig - 1 DO
         sx = $sgX[k]
         sy1 = $sgY1[k]
         sy2 = $sgY2[k]
         IF $sgD[k] = 1 THEN
            DRAWTEXT("▲", sx, sy1, dialog, bold, 14) COLOURED(0, 230, 118, 255)
            IF showSpikeText = 1 AND k >= firstLbl THEN
               DRAWTEXT("VOL▲", sx, sy2, dialog, bold, 9) COLOURED(0, 230, 118, 255)
            ENDIF
         ELSE
            DRAWTEXT("▼", sx, sy1, dialog, bold, 14) COLOURED(242, 54, 69, 255)
            IF showSpikeText = 1 AND k >= firstLbl THEN
               DRAWTEXT("VOL▼", sx, sy2, dialog, bold, 9) COLOURED(242, 54, 69, 255)
            ENDIF
         ENDIF
      NEXT
   ENDIF

   // ---------- curve names at the right edge ----------
   IF showVwapLbl = 1 AND vOk = 1 THEN
      lx = barindex + 8
      IF showVwap = 1 THEN
         DRAWTEXT("Monthly VWAP", lx, vwapV, dialog, bold, 11) COLOURED(8, 153, 129, 255)
      ENDIF
      IF showBands = 1 THEN
         DRAWTEXT("VWAP +σ", lx, vwapUpper, dialog, bold, 11) COLOURED(8, 153, 129, 255)
         DRAWTEXT("VWAP −σ (buy)", lx, vwapLower, dialog, bold, 11) COLOURED(8, 153, 129, 255)
      ENDIF
   ENDIF

   // ---------- summary table ----------
   IF showTable = 1 THEN
      // prices as the chart shows them
      tk = ticksize
      IF tk <= 0 THEN
         tk = 0.01
      ENDIF
      pU3 = round(vwapUp3 / tk) * tk
      pU2 = round(vwapUp2 / tk) * tk
      pU1 = round(vwapUp1 / tk) * tk
      pVw = round(vwapV / tk) * tk
      pL1 = round(vwapLo1 / tk) * tk
      pL2 = round(vwapLo2 / tk) * tk
      pL3 = round(vwapLo3 / tk) * tk
      vrT = round(volRatio * 100) / 100
      // chart timeframe as text
      tfSec = GetTimeFrame
      tfS = tfSec
      tfM = round(tfSec / 60)
      tfD = round(tfSec / 86400)
      tfW = round(tfSec / 604800)
      // value colours
      IF vwapZone = 2 THEN
         zR = 76
         zG = 175
         zB = 80
      ELSIF vwapZone = 1 THEN
         zR = 242
         zG = 54
         zB = 69
      ELSE
         zR = 255
         zG = 255
         zB = 255
      ENDIF
      IF volSpike = 1 THEN
         rR = 255
         rG = 152
         rB = 0
      ELSE
         rR = 255
         rG = 255
         rB = 255
      ENDIF
      // geometry: monospaced bold, every character is chW pixels wide
      pz = 11
      chW = pz * 0.62
      rowH = pz + 8
      padX = 6
      col0W = 19 * chW + 2 * padX
      col1W = 15 * chW + 2 * padX
      pW = col0W + col1W
      pH = 13 * rowH
      pL = 0 - 85 - pW
      xC0 = pL + col0W / 2
      xC1 = pL + col0W + col1W / 2
      IF tblVert = 1 THEN
         pT = 12 + pH
      ELSE
         pT = 0 - 12
      ENDIF
      y0 = pT - rowH * 0.5
      y1 = pT - rowH * 1.5
      y2 = pT - rowH * 2.5
      y3 = pT - rowH * 3.5
      y4 = pT - rowH * 4.5
      y5 = pT - rowH * 5.5
      y6 = pT - rowH * 6.5
      y7 = pT - rowH * 7.5
      y8 = pT - rowH * 8.5
      y9 = pT - rowH * 9.5
      y10 = pT - rowH * 10.5
      y11 = pT - rowH * 11.5
      y12 = pT - rowH * 12.5
      IF tblVert = 1 THEN
         // panel background (opaque: a transparent dark table turns grey on a light chart),
         // label column and blue header row
         DRAWRECTANGLE(pL, pT, pL + pW, pT - pH) ANCHOR(BOTTOMRIGHT, XSHIFT, YSHIFT) COLOURED(80, 84, 96, 255) FILLCOLOR(54, 58, 69, 255)
         DRAWRECTANGLE(pL, pT - rowH, pL + col0W, pT - pH) ANCHOR(BOTTOMRIGHT, XSHIFT, YSHIFT) COLOURED(80, 84, 96, 255) FILLCOLOR(77, 81, 92, 255)
         DRAWRECTANGLE(pL, pT, pL + pW, pT - rowH) ANCHOR(BOTTOMRIGHT, XSHIFT, YSHIFT) COLOURED(41, 98, 255, 255) FILLCOLOR(41, 98, 255, 255)
         DRAWTEXT("VWAP + VOL SPIKE", xC0, y0, monospaced, bold, pz) ANCHOR(BOTTOMRIGHT, XSHIFT, YSHIFT) COLOURED(255, 255, 255, 255)
         IF tfSec < 60 THEN
            DRAWTEXT("#tfS#S", xC1, y0, monospaced, bold, pz) ANCHOR(BOTTOMRIGHT, XSHIFT, YSHIFT) COLOURED(255, 255, 255, 255)
         ELSIF tfSec < 86400 THEN
            DRAWTEXT("#tfM#", xC1, y0, monospaced, bold, pz) ANCHOR(BOTTOMRIGHT, XSHIFT, YSHIFT) COLOURED(255, 255, 255, 255)
         ELSIF tfSec < 604800 THEN
            DRAWTEXT("#tfD#D", xC1, y0, monospaced, bold, pz) ANCHOR(BOTTOMRIGHT, XSHIFT, YSHIFT) COLOURED(255, 255, 255, 255)
         ELSIF tfSec < 2419200 THEN
            DRAWTEXT("#tfW#W", xC1, y0, monospaced, bold, pz) ANCHOR(BOTTOMRIGHT, XSHIFT, YSHIFT) COLOURED(255, 255, 255, 255)
         ELSE
            DRAWTEXT("1M", xC1, y0, monospaced, bold, pz) ANCHOR(BOTTOMRIGHT, XSHIFT, YSHIFT) COLOURED(255, 255, 255, 255)
         ENDIF
         DRAWTEXT("VWAP +3σ", xC0, y1, monospaced, bold, pz) ANCHOR(BOTTOMRIGHT, XSHIFT, YSHIFT) COLOURED(255, 255, 255, 255)
         DRAWTEXT("VWAP +2σ", xC0, y2, monospaced, bold, pz) ANCHOR(BOTTOMRIGHT, XSHIFT, YSHIFT) COLOURED(255, 255, 255, 255)
         DRAWTEXT("VWAP +1σ", xC0, y3, monospaced, bold, pz) ANCHOR(BOTTOMRIGHT, XSHIFT, YSHIFT) COLOURED(255, 255, 255, 255)
         DRAWTEXT("Monthly VWAP", xC0, y4, monospaced, bold, pz) ANCHOR(BOTTOMRIGHT, XSHIFT, YSHIFT) COLOURED(255, 255, 255, 255)
         DRAWTEXT("VWAP −1σ", xC0, y5, monospaced, bold, pz) ANCHOR(BOTTOMRIGHT, XSHIFT, YSHIFT) COLOURED(255, 255, 255, 255)
         DRAWTEXT("VWAP −2σ", xC0, y6, monospaced, bold, pz) ANCHOR(BOTTOMRIGHT, XSHIFT, YSHIFT) COLOURED(255, 255, 255, 255)
         DRAWTEXT("VWAP −3σ (buy)", xC0, y7, monospaced, bold, pz) ANCHOR(BOTTOMRIGHT, XSHIFT, YSHIFT) COLOURED(255, 255, 255, 255)
         DRAWTEXT("VWAP Zone", xC0, y8, monospaced, bold, pz) ANCHOR(BOTTOMRIGHT, XSHIFT, YSHIFT) COLOURED(255, 255, 255, 255)
         DRAWTEXT("Vol vs Avg", xC0, y9, monospaced, bold, pz) ANCHOR(BOTTOMRIGHT, XSHIFT, YSHIFT) COLOURED(255, 255, 255, 255)
         DRAWTEXT("Spike Now", xC0, y10, monospaced, bold, pz) ANCHOR(BOTTOMRIGHT, XSHIFT, YSHIFT) COLOURED(255, 255, 255, 255)
         DRAWTEXT("Up ▲ / Down ▼", xC0, y11, monospaced, bold, pz) ANCHOR(BOTTOMRIGHT, XSHIFT, YSHIFT) COLOURED(255, 255, 255, 255)
         DRAWTEXT("richmondhillcm.com", xC0, y12, monospaced, bold, 9) ANCHOR(BOTTOMRIGHT, XSHIFT, YSHIFT) COLOURED(160, 163, 172, 255)
         DRAWTEXT("RichmondHillCM", xC1, y12, monospaced, bold, 9) ANCHOR(BOTTOMRIGHT, XSHIFT, YSHIFT) COLOURED(160, 163, 172, 255)
         IF vOk = 1 THEN
            DRAWTEXT("#pU3#", xC1, y1, monospaced, bold, pz) ANCHOR(BOTTOMRIGHT, XSHIFT, YSHIFT) COLOURED(242, 54, 69, 255)
            DRAWTEXT("#pU2#", xC1, y2, monospaced, bold, pz) ANCHOR(BOTTOMRIGHT, XSHIFT, YSHIFT) COLOURED(242, 54, 69, 255)
            DRAWTEXT("#pU1#", xC1, y3, monospaced, bold, pz) ANCHOR(BOTTOMRIGHT, XSHIFT, YSHIFT) COLOURED(242, 54, 69, 255)
            DRAWTEXT("#pVw#", xC1, y4, monospaced, bold, pz) ANCHOR(BOTTOMRIGHT, XSHIFT, YSHIFT) COLOURED(0, 188, 212, 255)
            DRAWTEXT("#pL1#", xC1, y5, monospaced, bold, pz) ANCHOR(BOTTOMRIGHT, XSHIFT, YSHIFT) COLOURED(76, 175, 80, 255)
            DRAWTEXT("#pL2#", xC1, y6, monospaced, bold, pz) ANCHOR(BOTTOMRIGHT, XSHIFT, YSHIFT) COLOURED(76, 175, 80, 255)
            DRAWTEXT("#pL3#", xC1, y7, monospaced, bold, pz) ANCHOR(BOTTOMRIGHT, XSHIFT, YSHIFT) COLOURED(76, 175, 80, 255)
         ELSE
            DRAWTEXT("—", xC1, y1, monospaced, bold, pz) ANCHOR(BOTTOMRIGHT, XSHIFT, YSHIFT) COLOURED(242, 54, 69, 255)
            DRAWTEXT("—", xC1, y2, monospaced, bold, pz) ANCHOR(BOTTOMRIGHT, XSHIFT, YSHIFT) COLOURED(242, 54, 69, 255)
            DRAWTEXT("—", xC1, y3, monospaced, bold, pz) ANCHOR(BOTTOMRIGHT, XSHIFT, YSHIFT) COLOURED(242, 54, 69, 255)
            DRAWTEXT("—", xC1, y4, monospaced, bold, pz) ANCHOR(BOTTOMRIGHT, XSHIFT, YSHIFT) COLOURED(0, 188, 212, 255)
            DRAWTEXT("—", xC1, y5, monospaced, bold, pz) ANCHOR(BOTTOMRIGHT, XSHIFT, YSHIFT) COLOURED(76, 175, 80, 255)
            DRAWTEXT("—", xC1, y6, monospaced, bold, pz) ANCHOR(BOTTOMRIGHT, XSHIFT, YSHIFT) COLOURED(76, 175, 80, 255)
            DRAWTEXT("—", xC1, y7, monospaced, bold, pz) ANCHOR(BOTTOMRIGHT, XSHIFT, YSHIFT) COLOURED(76, 175, 80, 255)
         ENDIF
         IF vwapZone = 0 THEN
            DRAWTEXT("—", xC1, y8, monospaced, bold, pz) ANCHOR(BOTTOMRIGHT, XSHIFT, YSHIFT) COLOURED(zR, zG, zB, 255)
         ELSIF vwapZone = 1 THEN
            DRAWTEXT("Above Upper", xC1, y8, monospaced, bold, pz) ANCHOR(BOTTOMRIGHT, XSHIFT, YSHIFT) COLOURED(zR, zG, zB, 255)
         ELSIF vwapZone = 2 THEN
            DRAWTEXT("Below Lower", xC1, y8, monospaced, bold, pz) ANCHOR(BOTTOMRIGHT, XSHIFT, YSHIFT) COLOURED(zR, zG, zB, 255)
         ELSIF vwapZone = 3 THEN
            DRAWTEXT("Upper Half", xC1, y8, monospaced, bold, pz) ANCHOR(BOTTOMRIGHT, XSHIFT, YSHIFT) COLOURED(zR, zG, zB, 255)
         ELSE
            DRAWTEXT("Lower Half", xC1, y8, monospaced, bold, pz) ANCHOR(BOTTOMRIGHT, XSHIFT, YSHIFT) COLOURED(zR, zG, zB, 255)
         ENDIF
         IF vrOk = 1 THEN
            DRAWTEXT("#vrT#x", xC1, y9, monospaced, bold, pz) ANCHOR(BOTTOMRIGHT, XSHIFT, YSHIFT) COLOURED(rR, rG, rB, 255)
         ELSE
            DRAWTEXT("—", xC1, y9, monospaced, bold, pz) ANCHOR(BOTTOMRIGHT, XSHIFT, YSHIFT) COLOURED(rR, rG, rB, 255)
         ENDIF
         IF spikeUp = 1 THEN
            DRAWTEXT("BULLISH ▲", xC1, y10, monospaced, bold, pz) ANCHOR(BOTTOMRIGHT, XSHIFT, YSHIFT) COLOURED(76, 175, 80, 255)
         ELSIF spikeDn = 1 THEN
            DRAWTEXT("BEARISH ▼", xC1, y10, monospaced, bold, pz) ANCHOR(BOTTOMRIGHT, XSHIFT, YSHIFT) COLOURED(242, 54, 69, 255)
         ELSIF volSpike = 1 THEN
            DRAWTEXT("SPIKE", xC1, y10, monospaced, bold, pz) ANCHOR(BOTTOMRIGHT, XSHIFT, YSHIFT) COLOURED(255, 152, 0, 255)
         ELSE
            DRAWTEXT("None", xC1, y10, monospaced, bold, pz) ANCHOR(BOTTOMRIGHT, XSHIFT, YSHIFT) COLOURED(160, 163, 172, 255)
         ENDIF
         DRAWTEXT("#cntUp#/ #cntDn#", xC1, y11, monospaced, bold, pz) ANCHOR(BOTTOMRIGHT, XSHIFT, YSHIFT) COLOURED(255, 255, 255, 255)
      ELSE
         // panel background (opaque: a transparent dark table turns grey on a light chart),
         // label column and blue header row
         DRAWRECTANGLE(pL, pT, pL + pW, pT - pH) ANCHOR(TOPRIGHT, XSHIFT, YSHIFT) COLOURED(80, 84, 96, 255) FILLCOLOR(54, 58, 69, 255)
         DRAWRECTANGLE(pL, pT - rowH, pL + col0W, pT - pH) ANCHOR(TOPRIGHT, XSHIFT, YSHIFT) COLOURED(80, 84, 96, 255) FILLCOLOR(77, 81, 92, 255)
         DRAWRECTANGLE(pL, pT, pL + pW, pT - rowH) ANCHOR(TOPRIGHT, XSHIFT, YSHIFT) COLOURED(41, 98, 255, 255) FILLCOLOR(41, 98, 255, 255)
         DRAWTEXT("VWAP + VOL SPIKE", xC0, y0, monospaced, bold, pz) ANCHOR(TOPRIGHT, XSHIFT, YSHIFT) COLOURED(255, 255, 255, 255)
         IF tfSec < 60 THEN
            DRAWTEXT("#tfS#S", xC1, y0, monospaced, bold, pz) ANCHOR(TOPRIGHT, XSHIFT, YSHIFT) COLOURED(255, 255, 255, 255)
         ELSIF tfSec < 86400 THEN
            DRAWTEXT("#tfM#", xC1, y0, monospaced, bold, pz) ANCHOR(TOPRIGHT, XSHIFT, YSHIFT) COLOURED(255, 255, 255, 255)
         ELSIF tfSec < 604800 THEN
            DRAWTEXT("#tfD#D", xC1, y0, monospaced, bold, pz) ANCHOR(TOPRIGHT, XSHIFT, YSHIFT) COLOURED(255, 255, 255, 255)
         ELSIF tfSec < 2419200 THEN
            DRAWTEXT("#tfW#W", xC1, y0, monospaced, bold, pz) ANCHOR(TOPRIGHT, XSHIFT, YSHIFT) COLOURED(255, 255, 255, 255)
         ELSE
            DRAWTEXT("1M", xC1, y0, monospaced, bold, pz) ANCHOR(TOPRIGHT, XSHIFT, YSHIFT) COLOURED(255, 255, 255, 255)
         ENDIF
         DRAWTEXT("VWAP +3σ", xC0, y1, monospaced, bold, pz) ANCHOR(TOPRIGHT, XSHIFT, YSHIFT) COLOURED(255, 255, 255, 255)
         DRAWTEXT("VWAP +2σ", xC0, y2, monospaced, bold, pz) ANCHOR(TOPRIGHT, XSHIFT, YSHIFT) COLOURED(255, 255, 255, 255)
         DRAWTEXT("VWAP +1σ", xC0, y3, monospaced, bold, pz) ANCHOR(TOPRIGHT, XSHIFT, YSHIFT) COLOURED(255, 255, 255, 255)
         DRAWTEXT("Monthly VWAP", xC0, y4, monospaced, bold, pz) ANCHOR(TOPRIGHT, XSHIFT, YSHIFT) COLOURED(255, 255, 255, 255)
         DRAWTEXT("VWAP −1σ", xC0, y5, monospaced, bold, pz) ANCHOR(TOPRIGHT, XSHIFT, YSHIFT) COLOURED(255, 255, 255, 255)
         DRAWTEXT("VWAP −2σ", xC0, y6, monospaced, bold, pz) ANCHOR(TOPRIGHT, XSHIFT, YSHIFT) COLOURED(255, 255, 255, 255)
         DRAWTEXT("VWAP −3σ (buy)", xC0, y7, monospaced, bold, pz) ANCHOR(TOPRIGHT, XSHIFT, YSHIFT) COLOURED(255, 255, 255, 255)
         DRAWTEXT("VWAP Zone", xC0, y8, monospaced, bold, pz) ANCHOR(TOPRIGHT, XSHIFT, YSHIFT) COLOURED(255, 255, 255, 255)
         DRAWTEXT("Vol vs Avg", xC0, y9, monospaced, bold, pz) ANCHOR(TOPRIGHT, XSHIFT, YSHIFT) COLOURED(255, 255, 255, 255)
         DRAWTEXT("Spike Now", xC0, y10, monospaced, bold, pz) ANCHOR(TOPRIGHT, XSHIFT, YSHIFT) COLOURED(255, 255, 255, 255)
         DRAWTEXT("Up ▲ / Down ▼", xC0, y11, monospaced, bold, pz) ANCHOR(TOPRIGHT, XSHIFT, YSHIFT) COLOURED(255, 255, 255, 255)
         DRAWTEXT("richmondhillcm.com", xC0, y12, monospaced, bold, 9) ANCHOR(TOPRIGHT, XSHIFT, YSHIFT) COLOURED(160, 163, 172, 255)
         DRAWTEXT("RichmondHillCM", xC1, y12, monospaced, bold, 9) ANCHOR(TOPRIGHT, XSHIFT, YSHIFT) COLOURED(160, 163, 172, 255)
         IF vOk = 1 THEN
            DRAWTEXT("#pU3#", xC1, y1, monospaced, bold, pz) ANCHOR(TOPRIGHT, XSHIFT, YSHIFT) COLOURED(242, 54, 69, 255)
            DRAWTEXT("#pU2#", xC1, y2, monospaced, bold, pz) ANCHOR(TOPRIGHT, XSHIFT, YSHIFT) COLOURED(242, 54, 69, 255)
            DRAWTEXT("#pU1#", xC1, y3, monospaced, bold, pz) ANCHOR(TOPRIGHT, XSHIFT, YSHIFT) COLOURED(242, 54, 69, 255)
            DRAWTEXT("#pVw#", xC1, y4, monospaced, bold, pz) ANCHOR(TOPRIGHT, XSHIFT, YSHIFT) COLOURED(0, 188, 212, 255)
            DRAWTEXT("#pL1#", xC1, y5, monospaced, bold, pz) ANCHOR(TOPRIGHT, XSHIFT, YSHIFT) COLOURED(76, 175, 80, 255)
            DRAWTEXT("#pL2#", xC1, y6, monospaced, bold, pz) ANCHOR(TOPRIGHT, XSHIFT, YSHIFT) COLOURED(76, 175, 80, 255)
            DRAWTEXT("#pL3#", xC1, y7, monospaced, bold, pz) ANCHOR(TOPRIGHT, XSHIFT, YSHIFT) COLOURED(76, 175, 80, 255)
         ELSE
            DRAWTEXT("—", xC1, y1, monospaced, bold, pz) ANCHOR(TOPRIGHT, XSHIFT, YSHIFT) COLOURED(242, 54, 69, 255)
            DRAWTEXT("—", xC1, y2, monospaced, bold, pz) ANCHOR(TOPRIGHT, XSHIFT, YSHIFT) COLOURED(242, 54, 69, 255)
            DRAWTEXT("—", xC1, y3, monospaced, bold, pz) ANCHOR(TOPRIGHT, XSHIFT, YSHIFT) COLOURED(242, 54, 69, 255)
            DRAWTEXT("—", xC1, y4, monospaced, bold, pz) ANCHOR(TOPRIGHT, XSHIFT, YSHIFT) COLOURED(0, 188, 212, 255)
            DRAWTEXT("—", xC1, y5, monospaced, bold, pz) ANCHOR(TOPRIGHT, XSHIFT, YSHIFT) COLOURED(76, 175, 80, 255)
            DRAWTEXT("—", xC1, y6, monospaced, bold, pz) ANCHOR(TOPRIGHT, XSHIFT, YSHIFT) COLOURED(76, 175, 80, 255)
            DRAWTEXT("—", xC1, y7, monospaced, bold, pz) ANCHOR(TOPRIGHT, XSHIFT, YSHIFT) COLOURED(76, 175, 80, 255)
         ENDIF
         IF vwapZone = 0 THEN
            DRAWTEXT("—", xC1, y8, monospaced, bold, pz) ANCHOR(TOPRIGHT, XSHIFT, YSHIFT) COLOURED(zR, zG, zB, 255)
         ELSIF vwapZone = 1 THEN
            DRAWTEXT("Above Upper", xC1, y8, monospaced, bold, pz) ANCHOR(TOPRIGHT, XSHIFT, YSHIFT) COLOURED(zR, zG, zB, 255)
         ELSIF vwapZone = 2 THEN
            DRAWTEXT("Below Lower", xC1, y8, monospaced, bold, pz) ANCHOR(TOPRIGHT, XSHIFT, YSHIFT) COLOURED(zR, zG, zB, 255)
         ELSIF vwapZone = 3 THEN
            DRAWTEXT("Upper Half", xC1, y8, monospaced, bold, pz) ANCHOR(TOPRIGHT, XSHIFT, YSHIFT) COLOURED(zR, zG, zB, 255)
         ELSE
            DRAWTEXT("Lower Half", xC1, y8, monospaced, bold, pz) ANCHOR(TOPRIGHT, XSHIFT, YSHIFT) COLOURED(zR, zG, zB, 255)
         ENDIF
         IF vrOk = 1 THEN
            DRAWTEXT("#vrT#x", xC1, y9, monospaced, bold, pz) ANCHOR(TOPRIGHT, XSHIFT, YSHIFT) COLOURED(rR, rG, rB, 255)
         ELSE
            DRAWTEXT("—", xC1, y9, monospaced, bold, pz) ANCHOR(TOPRIGHT, XSHIFT, YSHIFT) COLOURED(rR, rG, rB, 255)
         ENDIF
         IF spikeUp = 1 THEN
            DRAWTEXT("BULLISH ▲", xC1, y10, monospaced, bold, pz) ANCHOR(TOPRIGHT, XSHIFT, YSHIFT) COLOURED(76, 175, 80, 255)
         ELSIF spikeDn = 1 THEN
            DRAWTEXT("BEARISH ▼", xC1, y10, monospaced, bold, pz) ANCHOR(TOPRIGHT, XSHIFT, YSHIFT) COLOURED(242, 54, 69, 255)
         ELSIF volSpike = 1 THEN
            DRAWTEXT("SPIKE", xC1, y10, monospaced, bold, pz) ANCHOR(TOPRIGHT, XSHIFT, YSHIFT) COLOURED(255, 152, 0, 255)
         ELSE
            DRAWTEXT("None", xC1, y10, monospaced, bold, pz) ANCHOR(TOPRIGHT, XSHIFT, YSHIFT) COLOURED(160, 163, 172, 255)
         ENDIF
         DRAWTEXT("#cntUp#/ #cntDn#", xC1, y11, monospaced, bold, pz) ANCHOR(TOPRIGHT, XSHIFT, YSHIFT) COLOURED(255, 255, 255, 255)
      ENDIF
   ENDIF
ENDIF

RETURN vwapV COLOURED(8, 153, 129, vwapA) STYLE(line, 2) AS "Monthly VWAP", vwapUpper COLOURED(8, 153, 129, bandA) STYLE(line, 1) AS "VWAP Upper", vwapLower COLOURED(8, 153, 129, bandA) STYLE(line, 1) AS "VWAP Lower"

Original author: RichmondHillCM, published open source.

Download
Filename: PRC_VWAP-Volume-Spike.itf
Downloads: 7
Iván González
Iván González Legend
As an architect of digital worlds, my own description remains a mystery. Think of me as an undeclared variable, existing somewhere in the code.
Author’s Profile

Comments

ProRealCode ProRealCode
Loading...