Indicators · Intraday volume

Volume Adjusted for the Session Shape

Trading is concentrated at the open and the close, so a flat average makes every opening look extraordinary. Dividing by the volume that time of day normally carries is what turns the comparison into information.

The problem this fixes

Three pages on this site say that an intraday volume comparison has to be made against the same time of day, the average volume page, the intraday arithmetic page and the TICK page. None of them says how. This one does.

The problem is that volume within a session is distributed in a stable, pronounced shape: heavy in the first half-hour, a long midday trough, heavy again into the close. Compare a fifteen-minute bucket against one twenty-sixth of the day’s volume and the answer is dominated by that shape. The open is always several times the "average"; midday is always a fraction of it. Every day, on every instrument.

A term of art note: this is a technique rather than a named indicator with a canonical author. Platforms implement equivalents under various labels, and what matters is the construction rather than the name.

One session read two waysTwo stacked panels sharing one horizontal axis, covering 26 fifteen-minute buckets of one synthetic session. The upper panel is each bucket against a flat daily average, which is far above the reference line at the open and at the close and far below it through the middle of the day. The lower panel is the same buckets against the session's own volume profile, which sits close to the reference line for most of the day and rises sharply only at the mid-morning interval where something actually happened.AGAINST A FLAT DAILY AVERAGE (×)expected 1.0AGAINST THE SESSION PROFILE (×)0.7511:30, 2.9× expectedOne session read two waysTwo stacked panels sharing one horizontal axis, covering 26 fifteen-minute buckets of one synthetic session. The upper panel is each bucket against a flat daily average, which is far above the reference line at the open and at the close and far below it through the middle of the day. The lower panel is the same buckets against the session's own volume profile, which sits close to the reference line for most of the day and rises sharply only at the mid-morning interval where something actually happened.AGAINST A FLAT DAILY AVERAGE (×)expected 1.0AGAINST THE SESSION PROFILE (×)0.7511:30, 2.9× expected
Fig. 1: synthetic session, computed at build timeOne generated session, with a genuine burst of activity placed at 11:30, well after the open, and ordinary noise elsewhere. Against a flat average the opening bucket reads 2.3× and the midday trough reads 0.4×, neither of which is news: that is the shape of every session. Against the session's own profile the same two buckets read 0.9× and 1.0×, both close to normal, while the 11:30 bucket reads 2.9×. The two methods do not even agree on which interval was the most remarkable of the day: the flat comparison picks 9:45 and the adjusted one picks 11:30.

That last sentence is the whole case for the adjustment. The flat comparison did not merely exaggerate the open. It identified the wrong interval as the day’s most unusual one, because the largest raw number in a session is almost always in the first or last bucket.

Building the profile

  1. Choose the bucket size. Five to fifteen minutes for a liquid instrument. Shorter buckets make each average noisier, and the adjusted reading then reports sampling noise as activity.
  2. Average each bucket across recent sessions. Twenty is a reasonable window, four weeks, so each weekday appears four times. Use the median if the window contains an expiry or a rebalance, or that one session reshapes the whole profile.
  3. Normalise to shares of the session. Divide each bucket’s average by the sum of all of them, so the weights sum to one. The profile is now a shape rather than a set of levels, which is what makes it usable on a day of any size.
  4. Keep the auctions separate. The opening and closing auctions are a different mechanism: one print from a queue built beforehand. Folding them into the first and last buckets inflates those weights and distorts every reading near the ends of the session.
  5. Rebuild it. Session hours change, the closing auction’s share of volume has grown over the years, and an instrument’s profile shifts after an index inclusion. A rolling window keeps up; a hard-coded curve does not.

Two ways to use it during a session

Bucket comparison against cumulative comparison
FormWhat it answersNeeds
Bucket against the same bucket’s recent averageIs this interval unusual for this time of day? The simplest form, and enough for spotting activity.Only the historical buckets, no estimate of the day’s total.
Bucket against profile × estimated day totalThe same question expressed as a ratio to expectation, which is easier to read across instruments.An estimate of the total, which is itself a forecast, usually the recent average.
Cumulative so far against cumulative profile shareIs the whole session running heavy or light, by this point in the day? The form used to judge whether an order is on schedule.Nothing beyond the profile. This is the most useful of the three intraday.
Auction against previous auctionsWhether the open or close was unusual as an auction, a separate question with a separate baseline.Auction volumes kept out of the continuous series.

The third row is the one used in practice by anyone working a large order, and it is worth knowing because it explains a good deal of intraday behaviour: participants measuring themselves against a volume schedule will trade to that schedule, which is part of why the profile is as stable as it is. The shape is partly self-fulfilling, and it is no less real for that.

What the adjusted reading can and cannot support

It can say that an interval carried unusual volume for its time of day, which is a genuine description and the thing a raw intraday comparison cannot deliver. Paired with the interval’s range, it distinguishes a burst that moved the price from one that was absorbed inside it.

It cannot say anything about direction (volume is participation, and every share bought was sold), and it does not become a forecast by being adjusted. It also inherits the ordinary cautions about the calendar: an expiry, a rebalance or an index event produces a session whose profile is legitimately different from the norm, and no adjustment turns that into a comparable day. Those dates are published, which makes checking them the cheapest step in the whole procedure.

Frequently asked questions

What does "modulated volume" mean here?

Intraday volume divided by how much volume that time of day normally carries, rather than by a flat average of the session. It is a technique rather than a named indicator with an author and a canonical formula — several platforms implement something equivalent under different labels — so this page sets out the method and the choices it involves instead of attributing it.

Why is a flat average wrong intraday?

Because trading is not spread evenly through the session. The opening and closing periods carry several times the volume of the midday trough, every day, on every instrument. Measured against a flat average, the open is always extraordinary and midday is always dead, which is a description of the clock rather than of the market, and it is the same wrong answer on every session.

How is the profile built?

Average each interval across a number of recent sessions (twenty is a reasonable default), and express each as a share of the session total, so the weights sum to one. Then a bucket’s expected volume is the day’s total, or an estimate of it, multiplied by that bucket’s weight. Use the median rather than the mean if the window contains an expiry or a rebalance, because one event session will otherwise reshape the profile.

What resolution should the buckets be?

Fine enough to see what you care about and coarse enough that each bucket has a stable average, five to fifteen minutes for a liquid instrument, longer for a thinner one. The trade-off is straightforward: shorter buckets make the profile noisier, so the adjusted reading starts reporting sampling noise as unusual activity.

Should the auctions be included?

No, or at least not inside the continuous profile. The opening and closing auctions are separate mechanisms whose volume arrives in one print from a queue built beforehand, so folding them into the first and last buckets inflates those weights and distorts every reading near the ends of the session. Keep them as their own line, compared against previous auctions.

Does the day’s expected total have to be known in advance?

No, and there are two ways round it. Compare each bucket against the same bucket’s absolute average over recent sessions, which needs no total at all. Or compare the cumulative volume so far against the cumulative share the profile says should have traded by now, which is the form used to judge how an order is progressing. The second is more informative during a session and the first is simpler.

What does this change in practice?

It moves the unusual sessions. A flat comparison flags the open on every single day; a profile-adjusted one flags the intervals where volume departed from what that time of day normally carries, which is what "unusual" was supposed to mean. On the synthetic session on this page the two methods disagree about which interval was the most remarkable of the day.

Does the profile itself change?

Yes, slowly, and it is worth rebuilding rather than fixing once. Session hours change, the share of volume executed in the closing auction has grown over the years, and an instrument’s own profile shifts after an index inclusion or a change in who holds it. A profile computed from a rolling recent window handles all of that; a hard-coded U-shaped curve does not.