Strategies · intermediate · 8 min
Supply and Demand Zones
Supply and demand zones are the parent idea behind order blocks and fair value gaps. The claim is intuitive: at some price areas, one side of the market overwhelmed the other so decisively that price left in a hurry. A demand zone is an area price rallied away from sharply — read as "buyers were waiting here." A supply zone is an area price dropped away from — "sellers were waiting here." The strategy is to mark those areas as zones (not single lines) and look to trade the bounce the next time price returns to them.
It is a more honest framing than support and resistance in one respect: it treats levels as bands with width, and it ties the level to a visible cause (the sharp move away) rather than just a round number. But it inherits the same problem every zone method has, and this lesson is about naming that problem squarely.
How a zone is marked
The usual recipe:
- Find a candle or small cluster where price then moved away fast (a strong impulse, often leaving an imbalance).
- Draw a zone from the base of that move to the open/close of the last candle before it — a band, not a line.
- Wait. If price later returns to the band, that is the setup the method trades: a bounce in the direction of the original impulse.
Reading zones is a genuinely useful habit — it forces you to notice where momentum originated instead of guessing at levels. Marking them costs nothing and can sharpen how you see a chart.
The action this method turns on
The entire supply/demand method turns on one thing: remember a specific price zone, defined many bars ago, and fire only when price later re-enters it. For a long time Visor's strategy language could not express that — it worked bar-by-bar on indicators and recent price relationships, able to detect the impulse that creates a zone but not to store the zone and wait an arbitrary number of bars for a return. A "zone bounce" rule written without that memory would be a different strategy wearing the name, and a backtest of the wrong rule is worse than no backtest, because it looks authoritative while measuring something else.
That capability now exists — zone memory (ZONE_OB / ZONE_FVG): record a price band from a past event, expire it if it goes stale or is closed through, and trigger on the first re-entry. So the demand-zone bounce is now testable, and this lesson ends the way the others do: with a verdict.
What is faithful — and the one gap that remains
Being able to test it does not mean the mechanical rule is the whole method — so here is exactly what the baked rule captures and what it leaves out, stated plainly rather than glossed:
- Faithful: the core action. A demand zone = a base that price rallied away from, marked as a band, entered on the return to it, used once, expired when stale. The one knob that separates a demand zone from any old level is that price left it fast — so the baked rule requires a genuine impulse (a body move of ≥ 1% away from the base), which is what makes it a supply/demand zone rather than the generic order block tested at 0.5% next door.
- The gap: classic supply/demand often draws the zone from a multi-candle base — a small cluster of consolidation before the departure (the "drop-base-rally" and "rally-base-rally" shapes) — and uses the base's proximal edge, not the full range of a single candle. Visor's primitive marks the zone from the single last opposing candle before the impulse. That is a faithful demand-zone bounce; it is not the multi-candle-base refinement. We test the part we can express honestly and name the part we cannot, rather than fake a "base detector" and pretend the number covers it.
The honest verdict
Here is the baked robustness report for the faithful single-candle demand-zone bounce on SPY, five years of daily bars, with a fixed 5% take-profit / 3% stop. Read How to read a robustness report if the gates are unfamiliar.
Random control
Beat 33.2% of 500 randomly-timed versions of itself (real 3.07% vs random average 10.52%).
Out-of-sample
In-sample -5.86% · held-out 9.49%.
Significance
t = 0.248 against a 3.5 threshold.
Deflated Sharpe
0.5965 — Sharpe of 0.0528.
These checks describe how much of this backtest survives statistical scrutiny. Past simulated performance is not a guide to future results, and nothing here is a recommendation to trade.
The demand-zone bounce traded 22 times and returned about +3% over a window where buy-and-hold returned +73% — it barely participated. The random control is decisive: the identical rule with its entry timing scrambled averaged +10.5% across 500 runs, and the real, carefully-timed version beat only about 33% of those twins. In plain terms, entering at a random moment and holding for the same target beat "wait for the return to the demand zone" two times out of three. The significance test is unambiguous (t = 0.25 against a 3.5 bar), and it clears out-of-sample only in the same accidental way its siblings do — a small back-third gain after an in-sample loss, noise landing kindly, not an edge. Fail.
That is the same verdict the order block re-entry (−0.45%) and the fair value gap retrace (+28%, and worse than buying the gap) earned — three readings of the one zone idea, tested identically, all unable to out-time their own scrambled selves. It is not proof no one can ever trade a demand zone; it is strong evidence that the mechanical, hindsight-obvious version — the one course sellers backtest to look authoritative — is measuring the market's drift, not a skill in the entry.
Try it yourself
Load this configuration into the Strategy Editor, run it, and open the Robustness tab. It is the exact demand-zone bounce baked above — a ZONE_OB(1.0, 30) entry with the 5%/3% exit.
What to read next
- Order Blocks — the same zone idea at a lower impulse threshold, with its own verdict.
- Fair Value Gaps — the imbalance that often defines a zone's edge, momentum and retrace both baked.
- The Overfitting Trap — why a zone that "always holds" in hindsight proves nothing.