TPO and volume comparison

Market profile vs volume profile: time, volume and data

Market profile counts time blocks that visit a price row. Volume profile sums volume assigned to that row. A price visited repeatedly can have the highest TPO count while a different price carries the most volume.

Short answer

Use TPO to study the sequence and frequency of price visits; use volume profile to study the distribution of measured activity. Compare identical sessions and price bins before interpreting a disagreement. Neither profile alone establishes a trade or predicts the next move.

TPO input

One count per visited row per time block

Volume input

Available volume allocated by price

POC

Largest row under each measure

Value area

A percentage of counts or volume

Same session, same bins, different POCs

Illustrative data, not a market record: five 30-minute blocks A to E cover 09:30 to 12:00 in exchange time. Rows are one price unit wide, with the lower bound included and the upper bound excluded. Volume is a supplied contract count for each row.

Price binTPO letters and countVolume in contracts
100 to below 101A B = 23,000
101 to below 102A B C = 34,000: volume POC
102 to below 103B C D E = 4: TPO POC2,000
103 to below 104D = 11,000
Total10 TPOs10,000 contracts
70% target7 TPOs7,000 contracts
Value-area rows101 to below 103: 3 + 4 = 7100 to below 102: 3,000 + 4,000 = 7,000

A repeatable chart workflow

  1. 1

    Freeze the comparison window

    Write the exchange, symbol, timezone, date and exact start/end times. Choose regular hours or a session including overnight trading before collecting either profile.

  2. 2

    Align the price bins

    Match row width and row boundaries, not just the number of rows. Save the TPO block size, volume source and value-area percentage with the chart.

  3. 3

    Audit the two measurements

    Reconcile total TPO counts and total volume separately. Investigate missing bars, missing volume or a different feed before treating separated POCs as market evidence.

  4. 4

    Evaluate only later observations

    Save completed-profile levels and evaluate subsequent closed bars. Define whether a rule uses a row midpoint or an edge; do not replace a developing historical level with its final value.

Notes from chart review

  • In the example, repeated visits to the 102 row produce four TPOs but only 2,000 contracts. The 101 row has fewer visits and twice the volume. Both measurements can be correct.
  • Combining the two middle bins produces five distinct TPOs (A to E), not seven, and 6,000 contracts. That wider bin becomes both POCs. TPOs must be deduplicated within each block when bins are merged.
  • Removing block A removes two TPOs from the displayed counts, but its volume cannot be recovered from the row totals alone. Rebuilding a shorter session requires the underlying time-resolved data.

Read the count before interpreting acceptance

One TPO means a row was visited during one block. Ten visits inside that same block still contribute one TPO to the row. A brief touch and a long stay can therefore receive the same count; TPO is not a stopwatch or a count of transactions.

The example has five time blocks but ten TPOs because a block can visit several rows. Calling the 102 row accepted is an interpretation of its repeated visits, not a fact about how many buyers held positions there.

Calculate POC and value area in the right units

TPO POC is the row with the most TPOs; volume POC has the most volume. The example uses the entire POC bin as the level. If a chart plots a single line, check whether it represents a midpoint, boundary or another convention.

For the TPO value area, start with four at the 102 row. Its neighbors contain three and one; add the three at 101 to reach seven. For volume, start with 4,000 at 101. Its neighbors contain 3,000 and 2,000; add 3,000 at 100 to reach 7,000. The TPO area spans 101 to below 103, while the volume area spans 100 to below 102.

These numbers hit 70% exactly and avoid ties. Real rows rarely do. Record the algorithm for ties and target overshoot as well as the percentage. TradingView documents different stopping instructions for TPO and volume value areas; identical percentage settings do not guarantee identical coverage.

Check what TradingView is actually displaying

TradingView offers native TPO as a chart type and indicator. The TPO indicator can show an accompanying volume profile, calculated using its block-size timeframe. That makes a paired display convenient, but changing block size can change both measurements.

Standard TradingView volume profiles use lower-timeframe data. Their up/down split is based on bar price direction, rather than observed aggressor-side executions. Stock trade volume, forex tick volume and crypto base or quote volume have different units. Verify the selected symbol and feed before comparing totals.

A footprint distributes volume within individual bars; a session profile aggregates across a chosen session. Keep those windows distinct. Reconcile a chart snapshot, its settings and its data coverage before comparing levels from another indicator.

What Pine can access, and what still needs an input

Pine now provides request.footprint() on Premium and Ultimate plans. It can return per-bar footprint rows, volume, delta and POC/value-area data, or na when data is unavailable. The Pine manual describes buy/sell categorization from lower-timeframe price action; these labels alone do not establish exchange bid/ask aggressor records.

A footprint request does not import the native TPO letters or your manually merged TPO profiles. For a rule based on those chart levels, enter the completed levels manually unless you have separately implemented and reconciled a TPO calculation. A custom OHLCV approximation must disclose how it allocates volume across prices.

Pineify AI Coding Agent can help write and revise the rule from those declared inputs. It cannot supply a missing exchange feed or make a proxy equal to the native chart. Check the generated source, syntax and chart output before relying on it.

Turn disagreement into a falsifiable rule

For the example, a descriptive rule could flag the first later bar closing above 103 after the comparison window ends. That threshold is the top edge of the higher POC bin, so it is explicit and can be checked by hand. It is not evidence of a profitable entry.

Before testing a trading strategy, specify the session, entry timing, exit, costs and position sizing. Retain cases where price crosses both profiles and then reverses. Discarding them would test the selection process instead of the rule.

A prompt for testing saved profile levels

Use this specification with Pine Script AI Coding Agent after checking the native charts. It uses manual levels so the script does not silently invent a source of TPO or volume data.

Create a Pine Script v6 indicator with manual numeric inputs for the upper and lower edges of prior completed TPO and volume POC rows, plus a timestamp when those levels became available. Validate that each upper edge exceeds its lower edge. Plot the supplied rows only from that timestamp onward. Flag a confirmed bar crossing above the higher upper edge, with the previous close at or below it, and create a matching alert condition. Do not evaluate earlier bars or calculate trade performance. Label all levels as manual inputs. Explain how to update them for the next completed session. Check the final syntax and compare the output with the supplied levels.
Write the rule with AI Coding Agent

Frequently asked questions

Educational comparison, not investment advice. The numerical example is synthetic and is not a backtest. Profiles depend on the feed, window and calculation settings; neither counts nor volume guarantee a future price reaction or return.