Indicators/probuilder · probacktest · proorder · proscreener

VolumeROC

VolumeROC in ProBuilder returns the rate of change of trading volume over N bars, highlighting volume spikes and drops. Syntax, formula, examples, gotchas.

Syntax

probuilder
VolumeROC[N]

Parameters

NameTypeDefaultDescription
NintegernoneNumber of bars back used as the comparison point. VolumeROC[1] compares the current bar's volume with the previous bar's volume.

There is no price argument. The indicator always reads the instrument's Volume series.

Formula

code
VolumeROC = ((Volume - Volume[N]) / Volume[N]) * 100

The result is a percentage. A value of 50 means volume is 50 percent higher than it was N bars ago, a value of -50 means it has halved.

How it works

On every bar, ProBuilder takes the current volume, subtracts the volume recorded N bars earlier, and expresses the difference as a percentage of that older value. The output oscillates around zero: positive when activity is expanding, negative when it is contracting.

Unlike bounded oscillators such as RSI, VolumeROC has no fixed range. On thin instruments or around news events, single-bar readings of several hundred percent are normal. Most practical uses compare the value against a threshold chosen for the specific instrument and timeframe, or smooth the raw series with a moving average first.

Because the calculation divides by Volume[N], the indicator only makes sense on instruments and timeframes where volume data is populated. On some forex feeds volume represents tick count rather than traded contracts, which changes the interpretation but not the mechanics.

Examples

Example 1, Flagging a volume spike (Indicator)

probuilder
// Compare current volume with the previous bar
i1 = VolumeROC[1]
IF i1 > 50 THEN
  // Volume grew more than 50 percent bar over bar
  highVolumeROCspotted = 1
ELSE
  highVolumeROCspotted = 0
ENDIF
RETURN highVolumeROCspotted

Returns 1 whenever volume expands by more than 50 percent from one bar to the next, a simple activity-surge detector. This is the canonical usage pattern for the instruction.

Example 2, Screening for volume surges on breakouts (ProScreener)

probuilder
// Instruments breaking a 20-bar high on at least double the volume of 10 bars ago
vroc = VolumeROC[10]
breakout = close > Highest[20](high)[1]
SCREENER[breakout AND vroc > 100](vroc AS "Vol ROC 10")

Combines a price breakout with a 10-bar volume rate of change above 100 percent, keeping only breakouts backed by a clear expansion in participation.

Example 3, Volume confirmation filter for entries (ProOrder)

probuilder
// Only take momentum longs when volume is expanding
vroc  = VolumeROC[5]
trend = Average[50](close)

IF NOT LongOnMarket THEN
  IF close > trend AND vroc > 25 THEN
    BUY 1 CONTRACT AT MARKET
  ENDIF
ELSE
  IF close < trend THEN
    SELL AT MARKET
  ENDIF
ENDIF

Uses a 5-bar VolumeROC above 25 percent as an activity filter, so the strategy only enters when the move is supported by rising volume.

Interpretation

ReadingMeaning
Strongly positiveVolume is expanding rapidly. Often accompanies breakouts, news, or the start of a directional move.
Near zeroActivity is stable relative to N bars ago.
Strongly negativeParticipation is drying up. Common late in a move or during consolidation.

Rising VolumeROC alongside a price breakout is generally read as confirmation, while a breakout on falling VolumeROC is treated with more suspicion. The indicator says nothing about direction on its own, it only measures activity, so it is almost always combined with a price-based signal.

Common errors and gotchas

  • Adding a price argument. VolumeROC[14](close) is invalid. The instruction takes only the period in square brackets and always operates on volume.
  • Zero or missing volume. On instruments without volume data (some indices and forex feeds), or bars with zero volume, the division has no meaningful basis and output can be erratic or undefined. Verify the feed provides volume before relying on it.
  • Extreme values on thin markets. A jump from very low volume to modest volume produces a huge percentage reading. Absolute thresholds tuned on liquid instruments do not transfer to illiquid ones.
  • Confusing it with VolumeOscillator. VolumeOscillator measures the spread between two volume moving averages, while VolumeROC compares raw volume against a single past bar. The two respond very differently to the same data.
  • Volume, the raw volume series this indicator is built on.
  • VolumeOscillator, difference between two moving averages of volume.
  • ROC, the same rate-of-change calculation applied to price.
  • OBV, on-balance volume, a cumulative volume-direction measure.
  • PVT, price volume trend, volume weighted by relative price change.
  • MoneyFlowIndex, volume-weighted bounded oscillator.
  • ForceIndex, combines price change and volume in one value.
  • Momentum, raw price momentum over N bars.