Skip to content

TPO profile

IndicatorsFrom Trader

  • Price
  • High
  • Low
TPO profile

previous day

  • POC
  • VAH
  • VAL
  • High
  • Low
  • Singles above
  • Singles below
  • Poor high
  • Poor low
  • near
This is how the node looks on the board: inputs on the left, outputs on the right.

Like footprints in the snow: the TPO profile does not count how much was traded but how long the price spent at each level. Where there are many prints, it lingered; where there is only one, it ran straight through.

Market profile by time with single prints. A market profile by time: every candle counts once at each price level it reaches, no matter how much was traded. The POC is the price where the market spent the most time, the value area the range holding 70 % of the time. Plus two terms from market profile: a poor high was reached by at least two candles without leaving a tail above; many expect the price to come back for it. Single prints are prices only one candle reached; the move there was fast, and the price often returns. The node needs no volume. Example: “poor high” with AND and “Price crosses above prior day high” reports when BTC takes out a poor high from yesterday.

BTC/USDT price with each day’s TPO profile and the previous day’s POC, VAH and VAL by timeHorizontal bars show how many hours of a day traded at each price, the value area stronger. A day’s lines are the POC, VAH and VAL of the day before.Price BTC/USDT85,00086,000Oct 5Oct 6Oct 7
  • Price (close of each candle)
  • TPO profile of the day, value area stronger
  • prior day TPO POC
  • prior day TPO VAH and VAL
Three days of BTC/USDT on 1-hour candles. The bars count hours instead of volume: each candle counts once at every price level it reaches. Where a bar is only one hour long, there are single prints; the move there was fast. The lines show the previous day’s POC, VAH and VAL by time; they apply from 0:00 UTC, 2:00 AM in Berlin.

Properties of the TPO profile node: the chart with the last 150 candles and the levels, their names on the right, the chosen level highlighted with the band ±0.3 % and dots at the candles near it, below it the Level and Band ± fields.

In the properties, a chart shows the levels over the last 150 candles, with their names on the right. Click a level or its name, or pick it with the arrow keys: the band ±x % for the “near” output lies around it. Drag an edge of the band or type the number under “Band ±”; dots mark the candles that came that close to the level. Levels far from the price sit at the edge with an arrow.

More under Chart above the price.

The settings appear on the right under “Properties” once you click the node on the board. Below each field you find the same explanation as here.

Default: previous

Whether the profile of a completed session applies or that of the current session so far.

  • previous (default): The profile of the last completed session, such as yesterday. It is fixed from the first candle of the new session and does not change until it ends.
  • current: The profile of the current session up to the candle that just closed. POC and value area move along; on the last candle they are exactly the profile that counts as the previous one from the next session on.

Default: day

How long a session is: one day, one week from Monday or one calendar month.

  • day (default): One session per calendar day. Most accurate with candles from 15 minutes to 1 hour.
  • week: One session per calendar week, Monday to Sunday. Suits 1-hour and 4-hour candles.
  • month: One session per calendar month. Suits 4-hour and daily candles.

Default: 70 % · from 50 to 95 % · under “More”

Which share of the time lies inside the value area. 70 % is usual; more makes it wider, less tighter around the POC.

Default: 50 · from 10 to 200, whole number · under “More”

How many levels of equal height the session’s range is split into. With 50, one level is 0.05 % high at a 2.5 % daily range; more levels rarely add accuracy because the candles themselves are coarse.

Default: UTC · IANA time zone such as Europe/Berlin, at most 64 characters · under “More”

The time zone in which the day, week and month begin. The default is UTC, like the exchanges’ daily candles; in Berlin that is 1:00 AM in winter and 2:00 AM in summer. With Europe/Berlin the day begins at midnight German time.

Default: POC

Which level the “near” output refers to. In the chart above you can also pick it by clicking its line.

  • High: The highest price of the session.
  • Singles above: The lower edge of the nearest single prints above the price.
  • VAH: The upper edge of the value area by time.
  • POC (default): The price where the market spent the most time.
  • VAL: The lower edge of the value area by time.
  • Singles below: The upper edge of the nearest single prints below the price.
  • Low: The lowest price of the session.

Default: 0.3 % · from 0 to 10 %

How close a candle must come to the level, in percent of the level: “near” is true as soon as the candle’s high or low reaches into the band. 0.3 means 0.3 % above and below, so with a level of $80,000 that is $240. With 0 only a candle that touches the level itself counts.

Notifies you when the price rises above yesterday’s high and that high was poor: at least two hours had reached it without leaving a tail above.

Example chain: Candle, TPO profile, Compare A/B, AND, TelegramConnections: Candle → TPO profile, Candle → TPO profile, Candle → TPO profile, Candle → Compare A/B, TPO profile → Compare A/B, Compare A/B → AND, TPO profile → AND, AND → Telegram.CandleBTC/USDT · 1hTPO profileprevious dayCompare A/BPrice crosses above priorday highANDall inputs trueTelegramlinked chat · at most every4 h

How to connect the nodes:

  1. Candle (Price) → TPO profile (Price)
  2. Candle (High) → TPO profile (High)
  3. Candle (Low) → TPO profile (Low)
  4. Candle (Price) → Compare A/B (A)
  5. TPO profile (High) → Compare A/B (B)
  6. Compare A/B (true/false) → AND (Signal 1)
  7. TPO profile (Poor high) → AND (Signal 2)
  8. AND (all true) → Telegram (Trigger)

On the board it reads: previous day

Chain as JSON

To try it, copy it and paste it in the editor under “Import”. Importing creates a new chain.

tpo.json
{
"name": "Example: TPO profile",
"version": 1,
"nodes": [
{ "id": "c1", "type": "core.candle", "position": { "x": 40, "y": 40 }, "settings": { "pair": "BTC/USDT", "timeframe": "1h" } },
{ "id": "p1", "type": "core.tpo", "position": { "x": 260, "y": 40 }, "settings": {} },
{ "id": "k1", "type": "core.compare-ab", "position": { "x": 480, "y": 40 }, "settings": { "operator": "crossesAbove" } },
{ "id": "a1", "type": "core.and", "position": { "x": 700, "y": 40 }, "settings": {} },
{ "id": "t1", "type": "core.telegram", "position": { "x": 920, "y": 40 }, "settings": {} }
],
"edges": [
{ "from": "c1.close", "to": "p1.close" },
{ "from": "c1.high", "to": "p1.high" },
{ "from": "c1.low", "to": "p1.low" },
{ "from": "c1.close", "to": "k1.a" },
{ "from": "p1.high", "to": "k1.b" },
{ "from": "k1.out", "to": "a1.in0" },
{ "from": "p1.poorHigh", "to": "a1.in1" },
{ "from": "a1.out", "to": "t1.in" }
]
}

Only matching types connect: number series to number series (round pin), signal to signal (square), message to message (diamond).

Direction Pin Type Note
Input Price Number series required
Input High Number series required
Input Low Number series required
Output POC Number series appears in messages as a price, e.g. “$81,616”
Output VAH Number series appears in messages as a price, e.g. “$81,616”
Output VAL Number series appears in messages as a price, e.g. “$81,616”
Output High Number series appears in messages as a price, e.g. “$81,616”
Output Low Number series appears in messages as a price, e.g. “$81,616”
Output Singles above Number series appears in messages as a price, e.g. “$81,616”
Output Singles below Number series appears in messages as a price, e.g. “$81,616”
Output Poor high Signal (true/false) –
Output Poor low Signal (true/false) –
Output near Signal (true/false) –
  • In messages the values are called “prior day TPO POC”, “prior day TPO VAH”, “prior day TPO VAL”, “prior day high”, “prior day low”, “prior day single prints above”, “prior day single prints below”.
  • Warm-up with the default settings: 48 candles (this many extra candles are loaded by the replay before the value is reliable).
  • Search also finds it under: tpo, market profile, time price opportunity, single prints, poor high, poor low, excess, value area, poc, tail.

Price levels of equal height across the session’s range as in the volume profile; each candle counts 1 at every level its range overlaps. POC and value area by the same rule as the volume profile, with the number of candles instead of the volume. Poor high: at least two candles reached the top level; poor low accordingly. Single prints: adjacent levels with exactly one candle, without the levels attached to the high or low (the tails). Above: lower edge of the nearest single prints whose middle is above the close; below: upper edge of the nearest whose middle is not above it.

  • Type in the chain: core.tpo · Version 1.0.0 · Category key ind
  • Settings in the chain: session (Session), period (Period), valueArea (Value area), rows (Price levels), timezone (Time zone), level (Level), width (Band ±)
  • Pins in the chain: Input close, high, low · Output poc, vah, val, high, low, singleAbove, singleBelow, poorHigh, poorLow, near
  • Reference tests in the manifest: 1 (with fixed price data: 500 candles of 1h)
  • How a node is built

Version 2026.10.25.16 · Changelog