Unbroke Volume Zones & Delta

In simple terms: what it does and how to use it
Example chart:
Green zone = a spot where a strong up move started on heavy volume (buyers stepped in); red zone = where a strong down move started (sellers stepped in). The small green/red bar inside shows the estimated buy vs sell share; watch whether price holds or closes through the zone.
Unbroke Volume Zones & Delta is a chart tool, not a signal. It marks where heavy-volume moves started and shows an estimated buy/sell split; it does not tell you to buy or sell.
What it shows
- Supply and demand zones that start where a strong move began on heavy volume.
- Inside each zone: how much volume traded on the starting bar, and a small green/red bar showing the estimated buying vs selling share of that volume.
- Whether each zone has been tested (touched) and whether it has broken (a close through it). Broken zones fade and are drawn dashed, then disappear.
- Small dots above or below bars with an unusually large estimated delta (buying minus selling).
- A dashboard with the number of active zones, the delta trend and a stats panel comparing zones with random price levels.
How it works
1. A bar is "heavy" when its volume is at least 2x the average of the previous 20 bars.
2. If, within the next 5 bars, a bar CLOSES at least 1 ATR(14) above the heavy bar's high, the heavy bar becomes a demand zone. A close 1 ATR below its low makes a supply zone. The zone only appears on the bar that confirms the move, after that bar has closed. It does not repaint and uses no future data.
3. Tall bars are trimmed to 1 ATR, measured from the side where the move started. If a new zone overlaps an active zone on the same side, its volume is added to that zone instead of drawing a new box.
4. Buy/sell split (an estimate): the script looks at 1-minute bars inside each chart bar. Volume of 1-minute bars that closed up counts as buying, closed down counts as selling, flat ones are split half and half. When 1-minute bars are not available (chart timeframe of 1 minute or less, or older history beyond what TradingView loads), it falls back to splitting the bar's volume by where it closed in its range. This is NOT real bid/ask or order-book data. In plain terms: Estimated from candle shape; right on direction about 7 in 10 bars on BTC (5m, using 1-minute bars; about 2 in 3 with the bar-shape fallback); not true order flow. Futures delta can't be validated with free data, so it is unverified.
5. Cumulative delta adds up the estimated delta bar by bar. The delta trend reads "buying" when the 20-bar average delta and the 20-bar change in cumulative delta are both positive, "selling" when both are negative, otherwise "mixed".
How to read it
- Green zones sit below price (demand), red zones above price (supply). The glowing line marks the side price meets first.
- Label example: "Demand 14.2K | buy 90% | tested 2x" = the starting bar traded 14,200 contracts, about 90% estimated buying, and price has come back to it twice.
- Stats panel: Held = after a touch, price moved 0.5 ATR away within 12 bars before closing through the zone. Broke = it closed through first. "Random levels" are exactly 10 same-size levels per zone, on the same side of price, never overlapping the zone; half sit between price and the zone and half beyond it, so on average they are as far from price as the zone. They are tested exactly the same way. Compare the zone held % with the random row. The Read shows n (zone touches), the gap vs random in points and an approximate 95% interval, in a neutral color: "inside noise" means the gap is within normal chance on this chart, "preview" is added when n is under 100 and "too few" shows when n is under 30. It is descriptive, uses only the history loaded on your chart, the interval is approximate (touches are not independent) and it is not evidence that zones are "Above random".
- Code match: the Pine script was checked against our Python reference and matched on 100% of zones (BTCUSDT 355, ETHUSDT 326; Binance spot, 5m and 15m, 2026-09-01 to 2026-10-26).
- "Delta agreed" / "Delta disagreed" split zones by whether the starting bar's estimated buying/selling pointed the same way as the move.
Settings
1. Zones: Volume average length (20); Heavy volume = x times average (2.0); Strong move = x ATR beyond the bar (1.0); Move must happen within x bars (5); Max zone height x ATR (1.0); Remove zones after x bars (500).
2. Delta (estimate): Buy/sell split (Auto, Lower timeframe, Bar shape); Lower timeframe (1 minute); Big delta bar = x times average |delta| (2.0).
3. Display: Max zones shown (6); Hide zones farther than x ATR (8); Show recently broken zones; Buy/sell bar inside each zone; Glow on the nearest zone per side; Zone labels; Label size; Mark big delta bars.
4. Stats panel: Show panel and position; Panel text size; Held = move of x ATR away (0.5); Within N bars (12); Random levels per zone (10); Max random levels at once (300); Random seed (7); Theme (Auto, Dark, Light); Debug values in Data Window (off). The Read needs at least 30 touches (fixed).
Alerts
Price entered a demand zone; Price entered a supply zone; Zone broken; New zone; Big delta bar. All fire on closed bars.
Honest limits
- Delta is an estimate from bars, not real bid/ask data. Pine scripts cannot read the order book.
- Our test (defaults fixed before testing, last 30% of each data set held out) found no consistent difference between zone touches and random-level touches. Main comparison, each zone vs its own 10 random levels (holdout): NQ 1h -2.7 pts (95% CI -9.8 to +4.7, 110 sessions), ES 1h -6.2 (-13.3 to +0.6, 117 sessions), NQ 15m -5.3 (-16.2 to +6.0, 15 sessions), ES 15m -0.9 (-11.8 to +11.5, 16 sessions), BTC 5m +2.4 (-0.4 to +5.4, 156 days). None is different from random after correcting for the 7 tests (Holm). The NQ and ES 5m samples were too small to read.
- BTC 5m: 1 of 7 tests, not significant after correction (Holm). Zone by zone against its own random levels, BTC 5m was +2.4 pts (95% CI -0.4 to +5.4, Holm p 0.66, 156 UTC days) in the holdout, and +0.4 pts (CI -1.5 to +2.4) in the earlier 70% of its data. Secondary only: pooling all touches gives 64.9% vs 61.6% (Holm p 0.042), but pooling mixes zones with different random comparators, so it is not the like-for-like test and we do not rely on it. We treat BTC as chance, not a finding. A forward test is registered before we look at it again.
- Whether the starting bar's delta agreed with the move made no consistent difference either.
- Most touches of any level "hold" by this definition (about 60-70%), so a high held % alone means little. Always compare with the random row.
- Results depend on the symbol, timeframe and settings. Volume must exist on the symbol; zones cannot form without it.
- The 1-minute history TradingView loads is limited, so older bars use the bar-shape fallback.
Educational, not financial advice. Past results don't predict future results.
- Add it to a chart of a symbol that has volume. It marks zones where a strong move started on unusually heavy volume: green demand zones below price (where buyers pushed price up) and red supply zones above price (where sellers pushed it down).
- Each zone's label shows how much traded on the starting candle and an estimated split of buying vs selling. This split is a best guess from candles, not real order data, and it is right on direction only about 7 in 10 times on BTC.
- When price comes back to a zone, see if it holds or closes through it. Broken zones fade, turn dashed and then disappear.
- The stats panel compares how often zones held with random price levels on the same chart. Most levels "hold" often, so always compare with the random row. In our tests zones did not do clearly better than random.
Example chart:
Green zone = a spot where a strong up move started on heavy volume (buyers stepped in); red zone = where a strong down move started (sellers stepped in). The small green/red bar inside shows the estimated buy vs sell share; watch whether price holds or closes through the zone.
Unbroke Volume Zones & Delta is a chart tool, not a signal. It marks where heavy-volume moves started and shows an estimated buy/sell split; it does not tell you to buy or sell.
What it shows
- Supply and demand zones that start where a strong move began on heavy volume.
- Inside each zone: how much volume traded on the starting bar, and a small green/red bar showing the estimated buying vs selling share of that volume.
- Whether each zone has been tested (touched) and whether it has broken (a close through it). Broken zones fade and are drawn dashed, then disappear.
- Small dots above or below bars with an unusually large estimated delta (buying minus selling).
- A dashboard with the number of active zones, the delta trend and a stats panel comparing zones with random price levels.
How it works
1. A bar is "heavy" when its volume is at least 2x the average of the previous 20 bars.
2. If, within the next 5 bars, a bar CLOSES at least 1 ATR(14) above the heavy bar's high, the heavy bar becomes a demand zone. A close 1 ATR below its low makes a supply zone. The zone only appears on the bar that confirms the move, after that bar has closed. It does not repaint and uses no future data.
3. Tall bars are trimmed to 1 ATR, measured from the side where the move started. If a new zone overlaps an active zone on the same side, its volume is added to that zone instead of drawing a new box.
4. Buy/sell split (an estimate): the script looks at 1-minute bars inside each chart bar. Volume of 1-minute bars that closed up counts as buying, closed down counts as selling, flat ones are split half and half. When 1-minute bars are not available (chart timeframe of 1 minute or less, or older history beyond what TradingView loads), it falls back to splitting the bar's volume by where it closed in its range. This is NOT real bid/ask or order-book data. In plain terms: Estimated from candle shape; right on direction about 7 in 10 bars on BTC (5m, using 1-minute bars; about 2 in 3 with the bar-shape fallback); not true order flow. Futures delta can't be validated with free data, so it is unverified.
5. Cumulative delta adds up the estimated delta bar by bar. The delta trend reads "buying" when the 20-bar average delta and the 20-bar change in cumulative delta are both positive, "selling" when both are negative, otherwise "mixed".
How to read it
- Green zones sit below price (demand), red zones above price (supply). The glowing line marks the side price meets first.
- Label example: "Demand 14.2K | buy 90% | tested 2x" = the starting bar traded 14,200 contracts, about 90% estimated buying, and price has come back to it twice.
- Stats panel: Held = after a touch, price moved 0.5 ATR away within 12 bars before closing through the zone. Broke = it closed through first. "Random levels" are exactly 10 same-size levels per zone, on the same side of price, never overlapping the zone; half sit between price and the zone and half beyond it, so on average they are as far from price as the zone. They are tested exactly the same way. Compare the zone held % with the random row. The Read shows n (zone touches), the gap vs random in points and an approximate 95% interval, in a neutral color: "inside noise" means the gap is within normal chance on this chart, "preview" is added when n is under 100 and "too few" shows when n is under 30. It is descriptive, uses only the history loaded on your chart, the interval is approximate (touches are not independent) and it is not evidence that zones are "Above random".
- Code match: the Pine script was checked against our Python reference and matched on 100% of zones (BTCUSDT 355, ETHUSDT 326; Binance spot, 5m and 15m, 2026-09-01 to 2026-10-26).
- "Delta agreed" / "Delta disagreed" split zones by whether the starting bar's estimated buying/selling pointed the same way as the move.
Settings
1. Zones: Volume average length (20); Heavy volume = x times average (2.0); Strong move = x ATR beyond the bar (1.0); Move must happen within x bars (5); Max zone height x ATR (1.0); Remove zones after x bars (500).
2. Delta (estimate): Buy/sell split (Auto, Lower timeframe, Bar shape); Lower timeframe (1 minute); Big delta bar = x times average |delta| (2.0).
3. Display: Max zones shown (6); Hide zones farther than x ATR (8); Show recently broken zones; Buy/sell bar inside each zone; Glow on the nearest zone per side; Zone labels; Label size; Mark big delta bars.
4. Stats panel: Show panel and position; Panel text size; Held = move of x ATR away (0.5); Within N bars (12); Random levels per zone (10); Max random levels at once (300); Random seed (7); Theme (Auto, Dark, Light); Debug values in Data Window (off). The Read needs at least 30 touches (fixed).
Alerts
Price entered a demand zone; Price entered a supply zone; Zone broken; New zone; Big delta bar. All fire on closed bars.
Honest limits
- Delta is an estimate from bars, not real bid/ask data. Pine scripts cannot read the order book.
- Our test (defaults fixed before testing, last 30% of each data set held out) found no consistent difference between zone touches and random-level touches. Main comparison, each zone vs its own 10 random levels (holdout): NQ 1h -2.7 pts (95% CI -9.8 to +4.7, 110 sessions), ES 1h -6.2 (-13.3 to +0.6, 117 sessions), NQ 15m -5.3 (-16.2 to +6.0, 15 sessions), ES 15m -0.9 (-11.8 to +11.5, 16 sessions), BTC 5m +2.4 (-0.4 to +5.4, 156 days). None is different from random after correcting for the 7 tests (Holm). The NQ and ES 5m samples were too small to read.
- BTC 5m: 1 of 7 tests, not significant after correction (Holm). Zone by zone against its own random levels, BTC 5m was +2.4 pts (95% CI -0.4 to +5.4, Holm p 0.66, 156 UTC days) in the holdout, and +0.4 pts (CI -1.5 to +2.4) in the earlier 70% of its data. Secondary only: pooling all touches gives 64.9% vs 61.6% (Holm p 0.042), but pooling mixes zones with different random comparators, so it is not the like-for-like test and we do not rely on it. We treat BTC as chance, not a finding. A forward test is registered before we look at it again.
- Whether the starting bar's delta agreed with the move made no consistent difference either.
- Most touches of any level "hold" by this definition (about 60-70%), so a high held % alone means little. Always compare with the random row.
- Results depend on the symbol, timeframe and settings. Volume must exist on the symbol; zones cannot form without it.
- The 1-minute history TradingView loads is limited, so older bars use the bar-shape fallback.
Educational, not financial advice. Past results don't predict future results.
Clause de non-responsabilité
Les informations et publications ne sont pas destinées à être, et ne constituent pas, des conseils ou recommandations financiers, d'investissement, de trading ou autres fournis ou approuvés par TradingView. Pour en savoir plus, consultez les Conditions d'utilisation.
Clause de non-responsabilité
Les informations et publications ne sont pas destinées à être, et ne constituent pas, des conseils ou recommandations financiers, d'investissement, de trading ou autres fournis ou approuvés par TradingView. Pour en savoir plus, consultez les Conditions d'utilisation.