ProScreener/proscreener

EstimatedVolume

EstimatedVolume projects the final volume of the current bar in a ProScreener by extrapolating the volume already recorded over the time elapsed so far.

Syntax

probuilder
EstimatedVolume

How it works

While a bar is forming, Volume only reflects the transactions recorded so far, which makes intraday volume comparisons misleading early in the period. EstimatedVolume corrects for this by extrapolating the recorded volume across the full bar:

code
EstimatedVolume = Volume * Multiplier
Multiplier = bar period / time the current bar has been active

For example, 30 minutes into a 1-hour bar with 500 units recorded, the multiplier is 60 / 30 = 2 and the projection is 500 * 2 = 1000 units. The projection assumes trading continues at the same pace for the rest of the period.

The value is a linear extrapolation, not a forecast model. It answers the question "if activity keeps this pace, where does volume end up", which is usually enough to flag instruments trading well above or below their normal levels while the session is still open. On a bar that has completed its period there is nothing left to estimate, so the projection converges to the recorded volume.

Examples

Example 1, Projected volume surge filter (ProScreener)

probuilder
// Flag instruments on track to trade at least twice their average volume
avgVol = Average[20](Volume)
surge = EstimatedVolume > 2 * avgVol
SCREENER[surge](EstimatedVolume AS "Projected volume" NUMBERFORMAT)

The screener fires when the current bar is on pace to exceed twice the 20-bar average volume, and displays the projection as an abbreviated figure.

Example 2, Breakout confirmed by projected volume (ProScreener)

probuilder
// Price breakout with volume on pace to beat the previous bar's total
breakout = close > Highest[50](close[1])
volPace = EstimatedVolume > Volume[1]
SCREENER[breakout AND volPace](close AS "Breakout price")

A 50-bar closing breakout only qualifies when the forming bar is projected to trade more volume than the last completed bar, filtering out low-participation moves.

Example 3, Relative volume ranking column (ProScreener)

probuilder
// Rank results by projected relative volume
avgVol = Average[20](Volume)
relVol = EstimatedVolume / avgVol
SCREENER[relVol > 1.5](relVol AS "Relative volume")

Dividing the projection by average volume produces a relative volume figure. Sorting the result column ranks instruments by how unusual their current activity is.

Common errors and gotchas

  • Wild values early in the bar. A few minutes into a daily bar, the multiplier is very large and a single burst of trades produces an extreme projection. Screens that run near the session open should require a minimum elapsed time or use a smaller timeframe before trusting the value.
  • Linear pace assumption. Intraday volume is typically heaviest near the open and close, not evenly spread. A mid-session projection based on the quiet middle hours tends to understate the final total, while an early projection overstates it.
  • No estimation on completed bars. In an end-of-day scan of finished bars the value matches recorded volume, so EstimatedVolume adds nothing over Volume. The instruction earns its keep only on live, still-forming bars.
  • ProScreener only. The keyword does not compile in indicators or strategies. To approximate the same idea elsewhere, the extrapolation must be built manually from Volume and the bar's elapsed time.
  • Volume, the transaction volume recorded on a bar.
  • SCREENER, defines the filter condition and result column of a screener.
  • NUMBERFORMAT, abbreviates large numeric values in a screener column.
  • Average, moving average, used to build average volume baselines.
  • VolumeROC, rate of change of volume.
  • VolumeOscillator, difference between fast and slow volume averages.
  • OBV, on-balance volume, a cumulative volume flow indicator.
  • TIMEFRAME (PS), sets the timeframe used by subsequent screener code.