How it works
The Volume Oscillator strips the direction question out entirely and asks only about intensity. Two moving averages of volume, a short one and a long one, are compared: when the short average is above the long one, recent activity exceeds the longer-run baseline. Expressing the difference as a percentage of the long average makes the output dimensionless, so a reading of plus forty means the same on an instrument trading a million units a day as on one trading a hundred million.
That normalisation is what raw volume lacks. Eyeballing a volume histogram against a moving average works, but it cannot be compared across instruments, across years in which turnover grew, or across timeframes. The oscillator converts 'is this bar big?' into a number you can put a threshold on and use inside a rule.
Its main job is as a confirmation filter for anything structural. A range breakout with the volume oscillator strongly positive is a different event from the same breakout with it negative, because in the second case the level was cleared while participation was below normal — the classic profile of a false break. Trend-following systems often require a positive reading before acting on a signal, and mean-reversion systems sometimes require the opposite.
It also describes the shape of a move over time. Activity expanding as a trend extends is healthy; activity draining away while price continues is the thin-participation warning that the flow lines in this family express differently. Around the end of a move, an extreme positive spike followed by a collapse below zero is the standard climax-then-exhaustion pattern.
Note that the two lengths here are much shorter than in most oscillators — five and ten periods are typical. Volume is far noisier than price and mean-reverts quickly, so long averages of it flatten out the very spikes that carry the information. That short setting also makes the line jump around, which is why it is normally read as a state rather than as a crossover trigger.
Calculation
The arithmetic in words, in the order it happens.
Compute two moving averages of volume, a short one and a long one — 5 and 10 periods by default, exponential in most implementations. The oscillator is their difference expressed as a percentage of the long average: (short average - long average) / long average, multiplied by 100. Positive readings mean recent activity is running above its longer-run baseline; negative readings mean it has fallen below. Because the output is a ratio rather than a quantity, it is directly comparable between instruments and across periods in which absolute turnover changed.
Source
An AlgoBeamScript implementation of the formula above, written by us from the arithmetic so the code and the calculation agree line for line.
Runs unchanged on the platform and in the AlgoBeamTS runtime. The language reference is in the documentation.
Inputs
Defaults are the values most charting packages ship with. They are conventions, not optimal settings — the right length depends on your instrument and your holding period.
| Input | Default | What it changes |
|---|---|---|
| Short length | 5 | Periods in the fast average, defining what counts as current activity. Lengthening it damps the line and makes it slower to register a burst of trade; shortening it to 2 or 3 makes it react to individual sessions. |
| Long length | 10 | Periods in the slow average, defining the baseline of normal. Extending it to 20 or 50 gives a stabler reference against which spikes stand out more clearly, at the cost of responding slowly when the whole activity regime shifts. |
| Moving average type | EMA | Exponential averaging keeps recent sessions dominant, which suits a series that mean-reverts quickly. Simple averaging produces a steadier baseline but suffers the usual drop-off jump when a huge session leaves the window. |
How to read it
What practitioners take from the plot. Read these as descriptions of market state, not as entry signals.
- Strongly positive as price clears a range boundary
- The break is being made on above-normal participation. The most useful application of the tool, and a standard filter on breakout rules.
- Negative while price makes a new high
- The advance is happening on below-average activity. Thin extensions are more prone to reversing, though this can persist for a long time in an instrument dominated by passive flows.
- Deeply negative through a consolidation
- Activity has drained out of the range. Quiet compresses and compression tends to resolve into expansion, so this is a setup condition rather than a signal.
- A large positive spike that collapses below zero
- Climactic activity followed by exhaustion. Frequently seen at the end of a leg, where the last participants transact and then nobody is left to continue.
Limitations
Where this indicator misleads. None of these are fixed by a better parameter.
- It is completely directionless. High activity accompanies both a decisive breakout and a violent failure, so the reading only becomes meaningful next to a price structure or a directional tool.
- The short default lengths make it whippy on daily bars, crossing zero constantly in ordinary markets and producing a stream of meaningless state changes if it is used as a trigger.
- Calendar distortions pass straight through: expiries, index rebalances and holiday half-sessions produce large readings that carry no information about the trend, and they then contaminate the baseline for as long as they remain in the long window.
- On illiquid instruments small absolute changes in volume produce enormous percentage swings, so the same thresholds that work on a mega-cap are unusable on a thin one.
Educational reference. This page explains how an indicator is built and how it is commonly read. It is not investment advice, not a recommendation and not a signal service. No indicator is profitable on its own — each is a way of describing a market, and any rule built on one has to be tested with realistic costs before it is traded.