Volume Z-Score Readout is a free open-source TradingView indicator that tells you whether the current bar's volume is statistically unusual for this exact time of day. One small box on the chart. Color-coded verdict. Pine v6, no repainting, no extra pane. Built for futures traders, useful on anything with real volume.
Open the script on TradingView, click the star to favorite it, then add from the Indicators menu. Works on free TradingView accounts.
The problem: volume × multipliers don't tell you anything useful
Most volume indicators give you raw bars and a moving average. The default volume pane on TradingView shows you a number. A 2× multiplier alert tells you the current bar is twice the rolling 20-bar average. None of that answers the question you actually need answered, which is: is this volume unusual right now, or just normal for 10:15 AM?
Intraday volume has a strong time-of-day shape. The cash open at 9:30 ET is always busy. Noon is always quiet. The last 30 minutes of the session is always heavy. A 3× volume spike at 9:30 means almost nothing — that's what 9:30 looks like every single day. A 3× spike at noon, on the other hand, is genuinely unusual and worth your attention. A rolling moving average can't tell the difference because it averages across the whole day, smearing the shape into a single line that's wrong at every minute of the session. For more on why time-of-day matters in day trading, the same logic applies to anything with a session structure.
The fix is statistical, not multiplicative. Instead of asking "how does this bar compare to the average of the last N bars," ask "how does this bar compare to bars at the same minute of the day from the trailing N sessions." That's a z-score against a time-of-day distribution, and it's what this indicator computes.
What it looks like on a chart
The indicator overlays a single small box on the price chart — top-right by default, configurable. The box reads as a plain-English verdict with the z-score inline. As volume swings further from the time-of-day mean, the box changes color. The chart below shows what the verdict reads at each level (this is an illustration of the band thresholds, not live data).
The four verdict bands
The readout uses four color-coded bands. Each band corresponds to a z-score range and a direction-aware verdict. Positive z reads "busier," negative z reads "quieter." Both directions matter — distribution days often start with eerily-quiet volume, and reversals frequently begin with silence rather than a spike.
Why z-scores and not multipliers? A z-score normalizes by both the mean and the spread of the time-of-day distribution. Two markets can both be at "3× their average volume" and one is completely routine while the other is a once-a-month event — the difference is how much the volume at that minute typically varies. The z-score captures that. The flat multiplier doesn't. For more on statistical context vs raw signal in futures trading, the same principle applies to range, ATR, and volatility scoring.
How the math works
For each bar, the script collects the volume at the same minute of the day from the trailing N sessions (default 21), then computes the mean and standard deviation of that sample. The z-score is the standard formula:
z = (current volume − mean) / standard deviation
A z-score of 0 means exactly average for this time of day. A z of +1 means one standard deviation above the time-of-day mean. A z of +3 means three standard deviations — genuinely unusual. Because the calculation uses a time-of-day baseline rather than a rolling N-bar window, the indicator is not fooled by the natural rhythm of the session. The 9:30 open and the lunchtime lull are treated as separate distributions, each with their own mean and SD.
The script overlays on the price chart by design. It's meant to run alongside whatever volume indicator you already use — native volume, Volume Profile, Session Volume Pulse, anything. The readout box sits in a corner you pick, doesn't eat a pane, and doesn't conflict with your existing setup.
Setup: three presets, no math required
The settings panel is preset-driven so most users finish setup in two clicks. There are three presets and a handful of numeric escape hatches if you want to override the defaults.
Preset 1 — Trader style (lookback responsiveness)
| Style | Sessions | Use when |
|---|---|---|
| Day trader (responsive) | 14 | Adapts fast after volatility regime shifts. More noise, more alerts. Best for tight intraday work. |
| Swing trader (balanced) ← default | 21 | About one month of sessions. Best statistical balance for most users on 15m charts. |
| Position trader (very stable) | 42 | About two months. Slow to adapt. Best when you want band crossings to be rare and meaningful. |
| Custom | your number | Ignores the preset and uses the numeric "Sessions to average" input below. |
Preset 2 — Market (auto-computes bars-per-session)
| Market | Use for | Notes |
|---|---|---|
| Auto-detect (24h) ← default | Crypto, forex, most ~24h instruments | Computes bars per session from chart timeframe assuming a 24h day. |
| Futures (~23h) | NQ, ES, CL, GC, MNQ, MES | Slightly more accurate than Auto for CME futures since they have a one-hour break. |
| US stocks RTH (6.5h) | AAPL, MSFT, SPY, etc | Regular trading hours only. Required for stocks — otherwise the session length calculation breaks. |
| Custom | any other market | Ignores the preset and uses the "Bars per session" input below. |
Preset 3 — Sensitivity (alert threshold)
| Sensitivity | Threshold | Fire rate (15m NQ) |
|---|---|---|
| Conservative | |z| ≥ 2.5 | ~1 alert per week — only extreme events |
| Balanced ← default | |z| ≥ 2.0 | The most actionable threshold on 15m charts — catches notable → unusual transitions |
| Sensitive | |z| ≥ 1.5 | Many more alerts — use only if you want to monitor the busier-than-usual threshold actively |
| Custom | your number | Ignores the preset and uses the "Alert threshold" input below. |
Default behavior, no configuration required. Drop the indicator on a 15m NQ chart and it works out of the box: Swing trader, Auto-detect 24h, Balanced sensitivity, readout top-right, normal text size. The "(only if Custom)" numeric inputs are escape hatches — leave them alone unless you've picked Custom on the related preset.
Setting up the alert
The indicator publishes one alert condition: Unusual volume. It fires when the absolute z-score crosses the resolved threshold (whichever value your Sensitivity preset picks, or the Custom input if you've overridden it). Setup after adding the indicator:
- Right-click the readout box (or the indicator name in your indicator list) and select Add alert on Volume Z-Score Readout.
- In the condition dropdown, choose Unusual volume.
- Pick your alert frequency — "Once per bar close" avoids mid-bar false fires from forming bars.
- Set notification preferences (in-app, email, webhook). Save.
For a 15m NQ chart on Balanced sensitivity, expect roughly 3–6 alerts per week — clustered around the cash open, lunch reversals, and the close. Crank to Conservative if that's too many; drop to Sensitive if you want to see every notable departure including the smaller ones.
Volume Z-Score Readout vs Session Volume Pulse — which do I use?
Both indicators share the same math foundation — same-time-of-day baseline over a trailing window of sessions. The difference is how that information is displayed and what other features come along.
| Volume Z-Score Readout | Session Volume Pulse | |
|---|---|---|
| Display | Single overlay box on price chart | Colored volume bars + baseline line + spike labels in volume pane |
| Output | Plain-English verdict + z-score | Color-coded volume bars + ×N multiplier on spike |
| Threshold logic | Z-score bands (|z| 1, 2, 3) | Multiplier threshold (×2.5 default) |
| Default lookback | 21 sessions (Swing, stability) | 14 sessions (responsiveness) |
| Pane | Overlays on price (no extra pane) | Replaces or augments the volume pane |
| Pine version | v6 | v5 |
| Best for | Users who already have a volume display they like and just want the verdict | Users who want a complete volume display with spike detection built in |
Run both side by side? Yes, that's a valid setup. SVP gives you the visual volume display in its own pane; the Z-Score Readout gives you the statistical verdict on price. If you want identical numbers between them, set SVP's "Baseline sessions" to 21 to match the Z-Score's Swing default — or set the Z-Score's Trader style to Custom 14 to match SVP's default. Both defaults are deliberate, not arbitrary: SVP is tuned for responsiveness because spike detection benefits from a shorter baseline, and the Z-Score is tuned for statistical stability because band crossings benefit from a longer one.
Reading the verdict in context
The z-score is a context signal, not a directional one. It tells you something unusual is happening for this minute of the day. It does not tell you which way price is going to move. That part is on you, and the simplest framework is to read the verdict alongside the candle that produced it.
Positive z + green close usually reads as confirmation — buyers showed up in unusual size and pushed price. Positive z + red close often reads as capitulation or distribution — sellers absorbed the buyers' size and won the bar. Negative z + small range is a coiling signal — the market is genuinely waiting for information, often right before a session pivot or the start of a trend day. Negative z + breakout is a low-conviction move and frequently fails or fades; participation isn't there to sustain it. For more on reading volume in trading psychology terms, the same patterns show up across markets — strong moves require participation; quiet moves usually don't sustain.
None of those reads are mechanical signals. They're context that helps you decide whether to take a setup or stand aside. The indicator's job is to surface the statistical context cleanly; the trade decision is still yours.
Honest limitations
Does not predict price direction. A spike with a green close is bullish confirmation; the same spike with a red close is often capitulation. Reading direction is on you.
Does not work on symbols without real volume. Most spot forex pairs on retail platforms report tick count, not actual volume. For forex volume analysis, use the equivalent CME futures contract (6E for EUR/USD, 6J for USD/JPY, 6B for GBP/USD) instead.
Needs history. On a fresh symbol with fewer than N sessions of data (where N is your Trader style setting), the standard deviation calculation may be unstable for the first few sessions. The verdict will read "insufficient history" until enough samples accumulate.
DST transitions and holiday-shortened sessions in the lookback window offset the baseline by a bar or two until those sessions roll out of the average. Expect mildly weird readings for a couple of days after a clock change.
Above 1h timeframes, the verdict becomes unreliable. A 4h chart contains only ~6 four-hour bars per futures session — too coarse for stable time-of-day statistics. Treat this as a 1m-to-1h tool. Above 1h, use a different volume framework entirely.
Frequently asked questions
Is the Volume Z-Score Readout free?
Yes. Free, open-source, published on TradingView's public script library. No paid tier, no signup gate, no email capture. The full Pine v6 source is visible on the script page once you save it to your library, so you can audit the math yourself before trusting it on a live chart.
Does it work on stocks, crypto, and forex — or just futures?
Anything with real volume data. The Market preset handles the three main cases: 24h instruments (crypto, most forex pairs as futures), CME-style futures with a one-hour break, and US stocks during regular trading hours. For other markets, use the Custom preset and set the bars-per-session manually. Retail spot forex usually reports tick count rather than real volume — for forex volume analysis, the corresponding CME futures contract (6E, 6J, 6B) is the right symbol.
What timeframes does it work on?
1m through 1h. The math relies on having enough bars per session to build a stable time-of-day distribution — at 15m you get ~92 bars per 23h futures session, plenty for statistical stability. At 4h you get ~6 bars, which is too coarse. Above 1h the indicator will still display a number but the verdict shouldn't be trusted. Use a different volume framework for higher timeframes.
How is this different from a regular volume moving average?
A regular volume MA averages volume across an entire trading session, smearing the session's natural shape into a single flat line. A 3× spike at 9:30 looks identical to a 3× spike at noon under that framework, even though they mean completely different things. The z-score builds a separate distribution for each minute of the session, so the 9:30 baseline and the noon baseline are kept distinct. The result is a verdict that's actually responsive to time-of-day context instead of being fooled by it.
Does it repaint?
No. The z-score updates live during the forming bar (so the verdict can drift as volume accumulates within the current bar), but once a bar closes the value is locked. There's no lookahead — the calculation uses only the trailing N sessions of same-time-of-day volume, all of which have already closed. Run it on historical bars and you get the same numbers you would have seen in real time.
Can I run it alongside Session Volume Pulse?
Yes — they're designed to pair. SVP lives in the volume pane and gives you colored volume bars, a baseline line, and spike labels. The Z-Score Readout overlays on price and gives you the statistical verdict. The two share the same math foundation but show different views of it. Both default lookbacks differ (SVP 14, Z-Score 21) because their use cases are different — set them to the same value if you want identical numbers between the two.
Will I get a trading edge from this?
No indicator provides an edge by itself. Tools surface information; edges come from a tested strategy, disciplined risk management, and consistent execution. The Z-Score Readout makes one specific question — "is this volume unusual for the time of day" — much faster to answer than reading a raw volume pane. That's a workflow improvement, not a strategy. What you do with the signal is the strategy, and that's on you.
Can I modify the source code?
Yes. Open the script on TradingView, save it to your library, and the full Pine v6 source opens in the Pine Editor. Fork, modify, and use however serves your trading. Attribution is appreciated but not required for personal use. If you publish a modified version on TradingView's public script library, credit the original and link back to the indicator directory — that's the only ask.
Add the Volume Z-Score Readout to your chart
Open the script on TradingView, click the star to favorite it, then add from the Indicators menu on any chart. Default settings work out of the box on 15m NQ — Swing trader, Auto-detect 24h, Balanced sensitivity. Two clicks if you need to retune.










