Volume by time versus volume by price
The standard histogram buckets volume by time: one bar per session or per five-minute interval, showing how much traded in that window. It answers "was today busy?"
A volume profile rotates that ninety degrees and buckets volume by price: horizontal bars showing how much total volume traded at each price level over a chosen range. It answers "which prices did the market spend its money at?" That is the more useful question, because acceptance and rejection happen at prices, not at clock times.
| Volume by time | Volume profile |
| Axis | Horizontal, one bar per period | Vertical, one bar per price bucket |
| Answers | When was activity heavy? | Which prices absorbed the most volume? |
| Typical use | Confirming a breakout day | Locating support, resistance, and fair value |
| Weakness | Says nothing about level | Says nothing about sequence or time |
How the profile is actually built
Two different constructions get called "profile" and they measure different things. Knowing which one your platform is drawing changes how you read it.
- TPO profile (time price opportunity, the original market profile) counts time: each 30-minute period that touched a price gets one letter at that price. A price touched in eight periods gets eight marks whether one share or a million traded there.
- Volume profile counts volume: the actual shares or contracts that changed hands at each price. A price touched briefly on enormous size scores high, where TPO would barely register it.
- The practical difference shows up on news. A violent, high-volume spike through a level produces a big volume node and almost no TPO structure. TPO says the market spent no time there; volume says a great deal of inventory changed hands there. Both are true and they answer different questions.
Then there is bucket width, which is a real parameter and usually left on a default nobody examined. Two conventions dominate: fixed increments (round the price to the nearest cent, five cents, or tick) and fixed row counts (divide the range into 24, 50, or 100 rows regardless of price). Coarse buckets smear real structure into one fat bar. Fine buckets on thin data produce a comb of noise where every second row looks like a node. A workable default is enough rows that the widest bar is roughly 5% to 10% of the total range's height, then leave it alone across every chart so the profiles stay comparable.
POC, VAH, VAL
- POC — point of control. The single price with the most traded volume in the range. It is the market's most agreed-on price for that period, and it tends to act as a magnet: price that leaves it often returns to test it.
- Value area. The contiguous band of prices containing roughly 70% of the range's volume, centred on the POC. The 70% figure comes from the one-standard-deviation convention inherited from market profile.
- VAH / VAL. Value area high and value area low, the two edges of that band. They are the practical boundaries between "prices most participants accepted" and "prices they rejected".
The workaday reading: inside the value area, the market is balanced and mean-reverting, so fading the edges is the higher-probability behaviour. Outside it, the market is imbalanced and trending, so accepting the move is the higher-probability behaviour. The value area edges are where those two regimes swap, which is why VAH and VAL are worth marking even if you use nothing else from the tool.
Computing a value area by hand
Nobody shows this, and it is worth doing once because the result is less canonical than it looks. Take an illustrative eleven-row profile, volumes in thousands of shares:
| Price | Volume (000s) | Note |
| $52.00 | 120 | |
| $51.50 | 180 | |
| $51.00 | 260 | |
| $50.50 | 410 | |
| $50.00 | 620 | High volume node |
| $49.50 | 980 | POC |
| $49.00 | 740 | High volume node |
| $48.50 | 190 | Low volume node — a thin shelf |
| $48.00 | 620 | High volume node |
| $47.50 | 250 | |
| $47.00 | 130 | |
Total volume is 4,500 thousand shares, so the 70% target is 3,150. The classic algorithm starts at the POC and expands outward, at each step comparing the two rows above against the two rows below and taking whichever pair holds more volume, until the running total crosses the target.
Pair-expansion method (the market-profile classic)
start POC $49.50 = 980 (21.8%)
step 1 above 620+410=1030 vs below 740+190=930 → up
running 2,010 (44.7%) range 49.50-50.50
step 2 above 260+180=440 vs below 740+190=930 → down
running 2,940 (65.3%) range 48.50-50.50
step 3 above 260+180=440 vs below 620+250=870 → down
running 3,810 (84.7%) range 47.50-50.50
VAL $47.50 POC $49.50 VAH $50.50 covering 84.7%
Notice the overshoot. The last pair added 870 to a running total of 2,940 and blew straight past 3,150 to 84.7%. That is inherent to adding two rows at a time, and it is worse the coarser the buckets are. Now run the same data one row at a time, which is what several charting packages actually do:
Single-row expansion method
start POC $49.50 = 980 (21.8%)
+740 (49.00) 1,720 (38.2%)
+620 (50.00) 2,340 (52.0%)
+410 (50.50) 2,750 (61.1%)
+260 (51.00) 3,010 (66.9%)
+190 (48.50) 3,200 (71.1%) ← crosses 70%
VAL $48.50 POC $49.50 VAH $51.00 covering 71.1%
Same data, same 70% rule, two different value areas. The pair method gives 47.50 to 50.50; the single-row method gives 48.50 to 51.00. VAH differs by 50 cents and VAL by a full dollar. If you are fading the value area edge, that is the difference between a trade and no trade.
The lesson is not that one method is right. It is that a value area is a computed object with named assumptions, not a fact about the market, and you should know which construction your platform uses before you place an order at its edge. This is the same discipline that separates a testable rule from a chart drawing, and the reason overfitting is so easy in level-based systems: with three free parameters — bucket width, expansion method, and area percentage — you can produce a level almost anywhere you want one.
High and low volume nodes
Beyond the POC, the shape of the profile matters.
| Feature | What it means | How price behaves |
| High volume node (HVN) | A price where a lot of volume traded — heavy agreement and inventory | Price slows, chops, and often stalls. Good place for a target, bad place for a breakout entry. |
| Low volume node (LVN) | A price the market moved through quickly with little trade | Price tends to travel across it fast. Good place for a stop to sit beyond, and a natural edge for a range. |
| Single print / gap in profile | Almost no volume at that price at all | Rejection zone. Revisits are often sharp and one-directional. |
| Naked POC (nPOC) | A prior session's point of control that price has never returned to | Acts as an unfinished magnet. Frequently revisited days or weeks later, which makes it a target rather than an entry. |
A concrete use: if your entry sits just above an LVN and your target sits at the next HVN, you have a structural reason to expect fast travel to the target and a natural place to put the stop, on the far side of the low-volume gap where returning would contradict the thesis. In the illustrative profile above, $48.50 is exactly that shelf — 190 against neighbours of 740 and 620.
This is also the cleanest interaction with stop placement. A stop beyond an LVN is one of the few stops that carries genuine information, because price crossing back through a thin shelf means it has re-entered territory the market previously refused to trade in. A stop sitting inside an HVN is the opposite: ordinary two-sided chop will take it out without anything about the thesis having changed.
Profile shapes
| Shape | What it looks like | What it usually implies | What tends to follow |
| D (normal) | Fat in the middle, thin at both extremes | Balance. Two-sided auction, both edges rejected | Range behaviour until one edge is accepted. Fade the extremes with a plan |
| P | Thin at the bottom, fat near the highs | Buying drove price up, then acceptance built at the highs. Often short covering | Continuation if the fat area holds; the thin lower tail is unfinished business if it does not |
| b | Fat near the lows, thin above | Selling drove price down, then acceptance built at the lows. Often long liquidation | Mirror of P. The thin upper tail is where a sharp retest travels fast |
| Double distribution | Two separate fat areas with a thin waist between them | Two auctions at two different fair values, joined by a price nobody wanted | The thin waist becomes a decision level. Price tends to accelerate across it in either direction |
The double distribution is the most tradeable of the four, because the thin waist is an unusually well-defined level: it is not a line someone drew, it is a price range where measured volume collapsed. It also makes a good invalidation, since price settling inside the waist contradicts the premise that the market refuses to trade there.
Two honest cautions. First, shape naming is retrospective and elastic — most real profiles are a lumpy D that you could argue into any of the four categories. Second, the implications above are conventional readings from the market-profile literature, not effects I have measured. Use them as vocabulary for describing what you see, not as probabilities.
Composite versus session profiles
A profile is only as meaningful as the range you compute it over. The common choices:
- Session profile — one day. Intraday work, opening-range context, and the raw material for naked POCs.
- Composite over a base or consolidation — the most useful swing application, because it shows where inside the range the inventory actually sits.
- Since an event — anchored to an earnings gap or a major low, so the profile only contains participants from the current regime.
- Visible range — whatever is on screen. Convenient, and quietly the least rigorous, because the profile changes every time you scroll.
The difference between session and composite is not cosmetic. A composite over a nine-week base tells you where the base's supply is concentrated, which is a swing-relevant fact that persists for weeks. A session profile tells you where today's inventory is, which is an intraday fact that expires at the close — except for its POC, which survives as a naked level if price never returns to it. Run composites for the trade thesis and session profiles for the execution.
Same discipline as anchoring anything: pick the range for a stated reason before you look at the outcome. A profile computed over a range chosen because it produced a nice-looking POC is a drawing, not an analysis. If you cannot say in one sentence why the range starts where it starts — "the earnings gap", "the 52-week low", "the first day of the base" — the level it produces is not evidence of anything.
Pairing it with anchored VWAP
The two tools answer neighbouring questions and are strongest together. A profile tells you where volume sits but not who is up or down on it. Anchored VWAP tells you the average cost basis of everyone since a chosen event, so it tells you whether that cohort is in profit.
Concretely: anchor a VWAP to the same event you anchor the profile to. If the AVWAP and the POC sit at nearly the same price, that level is both the most-traded price and the average cost basis, which makes it a strong reference for both entry and invalidation. If the AVWAP sits well above the POC, the average participant paid more than the most agreed-on price, which is overhead supply waiting to sell into strength.
An AVWAP reclaim occurring at a low volume node is a more interesting setup than one occurring in the middle of a high volume node, because there is less inventory to chew through above it. The anchored VWAP guide covers the reclaim mechanics →
The AVWAP reclaim is the one setup my walk-forward testing did not eliminate, at +0.117R over 4,933 trades on a 129-symbol, 10-year universe with a 95% confidence interval of +0.057 to +0.174. It is not a validated edge: a risk-matched random entry captured +0.086R on the same data, so the signal's own contribution is about +0.030R with a confidence interval crossing zero. An earlier, roughly double figure measured over barely a hundred hand-picked trades failed my own adversarial re-test and is retired. Backtest results, not live trading claims.
Limits
- Profiles are descriptive, not predictive. They show where trade happened, not where it will happen.
- They say nothing about sequence. A POC built early in a range and one built yesterday look identical on the profile and mean different things — this is precisely the information TPO retains and volume profile discards.
- The value area is construction-dependent, as the two worked calculations above demonstrate. Two implementations of the same 70% rule disagreed by a dollar on identical data.
- Free retail data is often consolidated and incomplete. Off-exchange and dark-pool prints may be missing or lagged, so the shape is approximate rather than exact.
- Every level is negotiable in a strong trend. Value areas are reference points, not walls.
- The parameter count is the real risk. Bucket width, range selection, and expansion method give you enough freedom to justify almost any level after the fact, which is why the range has to be chosen for a stated reason first.
The honest summary is that a profile is a good description layer and a poor signal layer. It improves the quality of an entry you already had a reason to take — better targets, better stop placement, a sense of where the inventory is — and it degrades quickly if you try to make it generate trades on its own. Tag your trades by where they sat in the profile in TradeLog and compute expectancy per tag before you believe any of it, and if a term above was unfamiliar the glossary defines POC, VAH, VAL, and single print.
Educational content, not financial advice. No live profit-and-loss figures are claimed anywhere on this site; backtest and walk-forward results are always labelled as such. Full terms: /terms.html
Tools referenced in this guide
- Anchored VWAP guide — the cost-basis tool that pairs directly with a profile's POC.
- Swing Screener — the screener and no-lookahead backtest engine used for the walk-forward results.
- TradeLog — tag trades by where they sat in the profile and compare expectancy per tag.