Guide · Volume Profile + TPO
Volume profile vs TPO: what each shows and how to read them in NinjaTrader 8
A volume profile shows how many contracts traded at each price; a TPO profile shows how much time the market spent at each price, counted in time brackets that are usually 30 minutes long. Both give a point of control (POC) and a value area, by convention the range holding 70% of the activity. When the volume POC and the TPO POC sit at different prices, money and time disagree about where value is, and that comparison is the reason to read both.
Updated · 6 min read · TapeCrest
What does a volume profile show?
A volume profile is a histogram of traded volume by price, built for the period you choose: a session, a week, the visible part of the chart or a range you mark. Each row adds up every contract that traded at that price, or in that band of prices. Three readings come from it:
- Point of control (POC): the row with the most volume, where the most business was done.
- Value area: the band around the POC that holds a set share of the volume, 70% by convention. Its top is the value area high (VAH) and its bottom the value area low (VAL).
- High- and low-volume nodes (HVN, LVN): shelves where volume built up, and thin spots that price crossed quickly. They describe volume that already traded, not orders resting in the book now.
What does a TPO profile show?
TPO stands for time price opportunity. The session is cut into time brackets, classically 30 minutes each, and every bracket gets a letter: A for the first, B for the second and so on. Each price the market traded during a bracket receives that bracket's letter, so the length of a row measures the time spent at that price. This is the time-based view behind Market Profile.
The TPO POC is the price visited in the most brackets, and the TPO value area is built from letter counts the same way the volume value area is built from contracts. TPO also shows the structure of the auction:
- Initial balance (IB): the high and low of the first hour, brackets A and B.
- Single prints: prices inside the profile touched by only one bracket, where price moved quickly.
- Tails: single-print runs at the high or the low of the profile, where the market left an extreme quickly.
- Poor high or poor low: an extreme touched by several brackets with no tail, often called unfinished business. It describes structure; it is not a forecast.
Volume profile vs TPO: what is the difference?
| Volume profile | TPO profile | |
|---|---|---|
| Measures | Contracts traded at each price | Time brackets in which each price traded |
| POC | Price with the most volume | Price visited in the most brackets |
| Value area | Built from volume | Built from letter counts |
| Shows clearly | Where size changed hands, HVNs and LVNs | Acceptance over time, IB, single prints, tails |
| Depends on | The trade data behind it and the row size | Bracket length, session times and the row size |
Volume tells you where participants committed size. TPO tells you where the market was willing to spend time. On many days the two agree, and the days they disagree deserve a closer look. In NinjaTrader 8, TapeCrest Volume Profile + TPO draws both on one chart; the setup is below.
Why do the volume POC and the TPO POC differ?
Because a price can see heavy volume in little time, or a lot of time on light volume. Take a simulated morning: six 30-minute brackets, A to F, with rows of one point.
| Price | Letters | TPOs | Volume |
|---|---|---|---|
| 5016 | A | 1 | 900 |
| 5015 | A B D | 3 | 2,400 |
| 5014 | A B C D | 4 | 3,100 |
| 5013 | B C D E F | 5 | 4,000 |
| 5012 | C E F | 3 | 9,800 |
| 5011 | E F | 2 | 2,200 |
| 5010 | F | 1 | 600 |
The market spent the most time at 5013, so the TPO POC is 5013. A burst of size traded at 5012 in only three brackets, so the volume POC is 5012.
The volume value area follows the classic pair method. Of 23,000 contracts, 70% is 16,100. Start at the POC, 5012 with 9,800, and compare the two rows above (5013 and 5014, 7,100 together) with the two rows below (5011 and 5010, 2,800). Add the larger pair: that makes 16,900, past the 70% mark, so the volume value area runs from 5012 to 5014.
Read the gap as a question, not an answer: was 5012 a price where large size was willing to trade, or a short burst the market then left? Comparing time and money on one chart is how you ask it.
How do you read volume profile and TPO in NinjaTrader 8?
Volume Profile + TPO draws both in one panel beside your candles, from one session definition and one row size, so time and volume compare directly. In NinjaTrader's Indicators window it is listed as TapeCrest Volume Profile.
- Open a 5-minute chart of the future you trade with three days loaded, right-click it, choose Indicators... (Ctrl+I) and add TapeCrest Volume Profile.
- In the TC / PROFILE strip at the top of the chart, select TapeCrest access, then Paste key & verify.
- Open Presets… and pick a layout: Clean Volume for the volume profile of the visible candles with its POC and value area, Auction TPO for the session's letters with the TPO POC, value area, IB, single prints and tails, or Combined Context for volume and TPO side by side.
- Choose the period with Profile type: Session, Week, Month, CompositeDays (several sessions summed into one profile), VisibleRange, FixedRange or Anchored (from a bar you pick to the newest bar). Range, Anchor, Split and Merge in the strip build ranges straight on the candles, and Lock keeps them.
- Check TPO period (minutes): 30 gives the classic letters, and NinjaScript needs a reload after you change it. Initial balance periods counts brackets, so with 60-minute brackets set it to 1 to keep a one-hour IB.
- Check the session with Session source. TradingHours follows the chart's Trading Hours template; CustomRth uses your own window in the chart time zone. Reload NinjaScript after changing it, then confirm a known session open, including after a daylight-saving change.
Order Flow+ is optional. Volume source decides where the rows come from: Auto tries a one-minute volumetric series first, OneTick reads trade prices and sizes, and OneMinute estimates the distribution from one-minute bars, marked as estimated and without delta (buy minus sell volume per row). Tick Replay is not needed.
Which settings change the result?
When two tools show different POCs for the same session, these settings usually explain it:
| Setting | What it changes | Starting point |
|---|---|---|
| Ticks per row | Ticks combined into one row; changes the shape, the POC and the value area | The same value in every tool you compare |
| Value area (%) | Share of volume or TPOs inside the value area | 70 |
| Value area rule | Pair adds two rows per step, SingleRow adds one | Pair, the classic method |
| TPO period (minutes) | Length of one letter bracket | 30 |
| Initial balance periods | Brackets that form the IB | 2 with 30-minute brackets |
| Volume source | Where the rows come from | OneTick or Auto for trade-by-trade rows |
Compare like with like: the same instrument, date, Trading Hours, data source, scope, ticks per row and value-area percentage. More loaded days cannot restore history your data provider does not supply, and missing history changes a TPO profile.
Try it
TapeCrest Volume Profile + TPO comes with a 7-day free trial without a card, then a one-time lifetime licence (pricing). The Volume Profile + TPO page has an interactive demo where you drag a range, split it and switch to TPO letters. To see the busiest price inside every candle, read the POC of every candle; for what traded at each price inside a bar, read how to read a footprint chart.