Back to Guides
Guide

What Is Volume Spread Analysis? The Four Free Words

What is volume spread analysis? Three readings on every bar. The no-demand and no-supply definitions, and how far the published wordings move the count.

Volume spread analysis is a way of reading a chart that takes three readings from every single bar: the spread, meaning its high to low range, where the close sits inside that range, and the volume. The method then compares the effort, which is the volume, against the result, which is how far price actually travelled.

The two signals everyone wants defined are the no-demand bar and the no-supply bar. The sources define them with the same four words, and each chooses those words differently. We implemented the published wordings on our own data: on EUR/USD 15-minute bars, a no-demand bar occurs 144 times under the strictest reading and 3,534 times under the loosest, a factor of 24.5 on the same eight months of bars.

What is volume spread analysis?

Three things on every bar: the bar's range, where the close sits in it, and the volume. Quantum Algo describes a method that "studies three things on every bar: the spread (its high-to-low range), where the close sits within it, and the volume".

Algostorm's longer version adds what the three are for, calling it a methodology that establishes the cause of price movements by "analyzing the interplay between volume (effort), spread/range (result), and closing price (who won the battle)". The same page also names the limit: volume "shows how much traded, not who".

The approach traces back to Wyckoff and was named and taught by Tom Williams. You will see both names on almost every page about it.

What is a no-demand bar?

An up bar with a narrow range and low volume. That is the definition the sources agree on, and it is also where the trouble starts, because an up bar, a narrow range and low volume are three things nobody has defined in numbers.

Algostorm's table row says a no-demand bar is "An up-bar (close higher than the previous bar) with a narrow spread and low volume". The reading is bearish: price went up and nothing was behind it.

SourceIts no-demand definition, in its own words
algostorm.com"An up-bar (close higher than the previous bar) with a narrow spread and low volume"
algostorm.com, second table on the same page"An up-bar with a narrow spread", on low volume, with no close condition at all
dotnettutorials.net"Narrow spread, closes mid-bar or low, with lower volume than the previous two bars"
writofinance.com"A small bullish candle with low volume is known as no demand bar"
quantum-algo.com"Up-bar, narrow-to-wide, closing up, on low volume"
atas.net, quoting a VSA writer"The up bar on a narrow spread was closed in the middle with a low volume or lower than the previous two bars. It could be a down bar if its top is higher than the previous bar"

Those wordings leave four choices free:

  1. What makes a bar an up bar. Close above the previous close, close above its own open, or, in the atas wording, simply a higher high than the bar before, which lets a down bar qualify.
  2. How narrow "narrow" is. Nobody gives a number. Algostorm comes closest on volume rather than spread, defining low volume as "Volume significantly below the recent average", which is a direction and not a threshold. The atas summary list widens the spread condition to "a narrow or medium spread", and adds that "If a price spread is bigger than a narrow one, it still might show a weakness".
  3. What counts as low volume. Lower than both of the previous two bars, or lower than some average. The atas wording joins the two with "or", so either will do.
  4. Where the close has to sit. Mid-bar or low for dotnettutorials, unconstrained for algostorm's second row, "closing up" for Quantum Algo.

Quantum Algo's "narrow-to-wide" is not a spread condition: a range that may be narrow or wide is every bar.

Atas names the trap this creates. After listing the criteria it warns that the method "reduces the ND detection algorithm to a check of compliance of an individual bar with the above criteria. A trap appears here." Reducing it to a checklist, it says, "is a very light-minded decision".

What is a no-supply bar?

The mirror image: a down bar with a narrow range and low volume. Algostorm: "A down-bar with a narrow spread and low volume, often closing in the middle or high." The reading is bullish: price went down and no selling was behind it.

That "often" makes the close position a tendency, not a condition, which lets the same page's other table state it harder: in its setup list a no supply test is "A down-bar with a narrow spread and a close near the high". Dotnettutorials makes it a requirement: "Narrow spread, closes mid-bar or high, with lower volume than the previous two bars." Quantum Algo drops the spread condition altogether, defining no supply as a "Down-bar closing down on low volume".

The sources call this bar a test because that is what Tom Williams called it. Atas writes that "He also called it Test of Supply or just Test". The idea is that the market is dipping to see whether any sellers are left, and the low volume is the answer.

How narrow is "narrow", and how low is "low"?

Nobody publishes a number, so we picked some and counted what happened.

We built the rule on EUR/USD and GER40, our German 40 index, from Dukascopy 1-minute candles aggregated to 15-minute, hourly, 4-hour and daily bars, January to August 2026, with sessions cut at 00:00 UTC. Then we ran it under every combination of the free choices: three readings of "up bar", three thresholds for "narrow", two rules for "low volume" and two rules for the close position. That is 36 counts per signal for each instrument and timeframe, across eight instrument and timeframe combinations.

The wordings are the sources'. The three thresholds behind "narrow" are ours, because no source publishes one: half the mean range of the previous 20 bars, seven tenths of it, and the full mean.

On EUR/USD 15-minute bars, 16,520 bars, holding the up bar reading fixed at "close above the previous close":

The readingNo-demand barsShare of all bars
Strictest: range at most half the 20-bar mean, volume below both previous bars, close in the lower half1440.87%
Loosest: range up to the full 20-bar mean, volume below the 20-bar mean, close anywhere3,53421.4%

A factor of 24.5, from the same bars. The no-supply bar runs 125 to 3,603 on the same data, a factor of 28.8. Across all eight combinations the factor ran from 13.7 to 37.0. Two of the sixteen cells cannot produce a factor at all, because the strictest reading found nothing: EUR/USD daily no-demand went from 0 to 30, and GER40's daily no-supply from 0 to 33.

Start from the no-supply bar on EUR/USD 15-minute with everything at the strictest setting except the close, which gives 565 bars:

  • Requiring the close in the upper half, as algostorm's "often closing in the middle or high" suggests, takes 565 down to 125.
  • Relaxing "narrow" from half the 20-bar mean range to the full mean takes 565 up to 2,237.
  • Swapping "lower than the previous two bars" for "below the 20-bar mean" takes it to 965.

The argument nobody needs to have

The wording difference people could argue about turns out not to matter, and the ones nobody argues about are doing all the damage.

"Up bar means close above the previous close" and "up bar means close above its own open" sound like incompatible definitions. On EUR/USD 15-minute bars the first labels 8,039 bars and the second labels 8,031, and they disagree on only 274 of them, 1.7% of all bars. On hourly and 4-hour bars the disagreement is 1.2%, on daily 5.3%, and on GER40 2.6%, 2.2%, 1.7% and 5.8%.

Meanwhile "narrow", "low" and where the close sits, which the pages state casually as if they were obvious, move the count 24-fold.

What is stopping volume?

A wide down bar on very high volume that closes in the upper part of its range, after a real decline. Algostorm describes it as "A down-bar with a relatively wide spread that closes in the middle or high of its range" on high or ultra-high volume, and adds a condition: it "Occurs after a significant decline".

Trends and Breakouts puts the same condition more bluntly, warning that the common mistake is treating every high-volume down bar as stopping volume, because "Stopping volume only applies after a meaningful decline". It describes the bar this way: "After a sustained decline, a bar appears with a wide spread, very high volume, and a close in the upper half."

That page also draws the limit: "This is not a buy signal by itself. Stopping volume tells you that demand has entered, not that it has won."

What is an upthrust?

A wide up bar that pushes through a resistance level on high volume and then closes back near its low. Algostorm's glossary row: "A wide spread up-bar, often piercing a key resistance level, on high volume, which then closes near the lows."

Algostorm then corrects the traditional story about why it happens: "VSA attributes it to professionals driving price up to trigger buy-stops; that part does not hold up, since stops cannot be seen." What the bar shows, it says, is a failed break.

An upthrust also has a place inside a much larger structure in Wyckoff's distribution schematic, where it sits in a specific phase of a multi-week range.

What does "effort versus result" mean?

It means comparing how much trading happened against how far price moved, and treating a mismatch as information. Algostorm calls it "A core VSA principle comparing the volume (Effort) to the price movement (Result)".

The same page gives the practical form: "High effort (volume) with little result (narrow spread) indicates opposing pressure." Lots of trading and almost no movement means something was absorbing it. Almost no trading and a large move means nothing was in the way.

What is volume dry-up?

Volume falling away to very little over a few bars, which is the same observation a no-supply test is built on. There is no separate mechanism to learn: if the bars are small and the volume has dried up, the method reads it as an absence of participation on that side.

Writofinance states the two halves of the idea as its core principle: "When price move up on low volume, it signals a lack of demand. Conversely, when price moves down on low volume, it suggest a lack of supply."

Does volume spread analysis work on forex?

The method was built for exchange-traded volume, and spot forex does not have any.

Algostorm writes that "Forex spot markets are completely decentralized (OTC) with no central volume reporting", and that "broker 'tick volume' only represents their customer flow, not the whole market".

Our own markets are forex, indices, commodities such as gold and oil, and crypto. None of them comes with the centralized exchange volume the method was built around, so know that before you build a forex VSA test here.

None of this makes VSA useless on forex. On algostorm's reading it means a broker's volume shows that broker's customer flow rather than the whole market, so any conclusion you reach is bounded by that. Our article on backtesting accuracy, slippage and data quality covers how the provenance of your data changes your results.

Do ChartLabs charts show volume?

Yes. The chart's legend, the readout of the bar under your cursor, always shows that bar's volume alongside its open, high, low and close. So the third of the three VSA readings is on screen as you step through the chart, with no setup.

If you want to see volume as a chart rather than a number, add the Volume indicator from the Indicators menu. It opens in its own pane under price, and it is off by default. The same menu has On-Balance Volume, Volume Ratio and Price Volume Trend. Where a bar carries no volume, it shows 0.

For the effort-against-result comparison as a single indicator, you can write it yourself. Pine Script indicators in ChartLabs can read each bar's volume, and the editor has volume functions including ta.mfi, ta.obv, ta.pvt, ta.accdist, ta.nvi and ta.pvi, so a ratio of volume to spread is a short script. Your own indicators appear in the Indicators menu. There is no automatic VSA detection and no scanner: the classification is yours, bar by bar.

How would you test a VSA signal in a backtest?

Write down all four thresholds before you start, because the count moves by a factor of up to 37 across the published wordings, and a test that lets them drift is not testing anything.

Traders Union tells readers to "Backtest your VSA strategies using historical data to evaluate their effectiveness". It leaves out which thresholds to write down first:

  1. Write down your up bar rule: previous close, own open, or higher high.
  2. Write down your "narrow" threshold as a number, as a multiple of a stated lookback. "Narrow" on its own is not a rule.
  3. Write down your "low volume" rule: below both previous bars, or below a mean of a stated length.
  4. Write down whether the close position is required or merely typical.
  5. Only then step the chart forward bar by bar and log what you see, with the chart as it looked at the time.

One limit on those numbers. They count how often each bar occurs under each wording. They do not measure what happened after one of them, and we publish no performance figure for these signals, nor anyone else's.

ChartLabs is built for step 5. You replay historical charts bar by bar and take practice trades as if the market were live, so you classify the bar before you can see what followed it, and each logged trade stores a snapshot of the chart as it was at entry. Our data is sourced from Dukascopy, cleaned to remove anomalies and built into 1-minute candles.

For the mechanics of logging a test like this, see our beginner's guide to backtesting a strategy, and for the pair-specific details on EUR/USD see forex backtesting.

The short version

  • Volume spread analysis takes three readings from every bar: the range, where the close sits in it, and the volume.
  • A no-demand bar is an up bar with a narrow range and low volume. A no-supply bar is the same in reverse, and the sources call it a test.
  • Four words in those definitions are left free by the sources: what makes a bar an up bar, how narrow "narrow" is, how low "low" is, and where the close must sit.
  • Under the published wordings the number of no-demand bars on the same EUR/USD 15-minute data ran from 144 to 3,534, a factor of 24.5.
  • The two up-bar definitions that look incompatible disagree on 1.7% of bars. The words nobody argues about are the ones that move the count.
  • Spot forex has no central volume reporting, and algostorm's point is that a broker's figure shows that broker's own customer flow.
  • ChartLabs charts do show volume: in the legend for the bar under the cursor, and as an optional indicator in its own pane.

To classify these bars yourself, one bar at a time, with your thresholds written down first, start a free trial of ChartLabs.

Related Topics

volume-spread-analysisno-demand-barno-supply-barvolumewyckoffmanual-backtesting