INDICATOR MANUAL
Volume profile node indicatorVolume Profile Node Map (VPNM) [AFD] · full manual · published to TradingView
Locate estimated volume shelves, valleys and POC prices in today’s Daily map, add completed Weekly and Monthly profiles when needed, and keep earlier zones as optional retained history.
Start here
What the indicator does, the questions it can help answer, and its fresh-install defaults.
Maps Daily, Weekly and Monthly OHLCV volume-by-price estimates as HVN shelves, LVN valleys and POC prices, with optional same-type shared prices, zone fills and retained zones.
Updated on TradingView on September 29, 2026. The update removes and reorders inputs, so a chart that already carries VPNM can load earlier saved values into different controls, and an instance saved with changed settings can stop with a runtime error. Remove VPNM from the chart and add it again, then review the settings. Existing alerts keep the earlier version and settings until they are deleted and recreated.
The script is free to use on TradingView with protected source. It estimates volume across each available source bar’s high-low range in proportion to price overlap. It cannot identify individual transaction prices or buy/sell volume.
Use a time-based intraday bar or candlestick chart on a symbol whose feed carries traded volume. Index tickers and many broker CFD tickers supply none; exchange tickers such as COINBASE:BTCUSD do. The profile reads 1-minute bars, or 2-minute bars on 1-hour and higher charts; if those are unavailable it folds whole chart bars and reports that fallback in the Data Window.
The default view is today’s Daily map: HVN, LVN and POC with labels, regular-hours volume, Auto rows and Flat fill. It does not draw a separate histogram beside the price axis.
Fresh-install defaults8 documented defaults
Swipe or scroll horizontally to see every column.
| Area | Default | Result |
|---|---|---|
| Daily profile / Session | Today (in progress) / Regular hours only | Today’s map updates on confirmed chart bars and ignores Daily periods. Regular hours are exchange-defined; on futures they can include overnight trading. |
| Weekly / Monthly | Off / Off | When enabled, each combines its completed periods (2 weeks, 1 month by default) into one composite. |
| HVN / LVN / POC | Geometry and labels | Each selector offers Off, Geometry, or Geometry and labels. Node limit is 2 per type and timeframe. |
| Node method / cutoffs | Cutoff / HVN 65%, LVN 20% | Valleys is the alternative method; its Valley ratio defaults to 50%. |
| Zone row resolution / Auto rows | Auto / 100 | Each composite fits its range on a shared base grid; wider composites can use broader rows. |
| Zone fill / Zone extent | Flat / Extend to today | Profile and Heat fills are optional. Profile detail starts at Finest rows. |
| Shared price / Retained zones / alerts | Off | Enable each layer, and each alert switch, explicitly. |
| Range basis / Nearest zones per side | Off / 0 | No distance or focus filtering at fresh defaults. |
How it works
How the indicator turns chart data into the states and drawings you see.
Today and completed periods
Today (in progress) draws today’s confirmed-bar map only and ignores Daily periods; a new day is pending until its first confirmed snapshot. Completed periods, and Weekly and Monthly always, sum the selected number of completed periods before detecting nodes, so two days mean one two-day composite. A period closes once a confirmed chart bar covers the requested session’s endpoint; missing endpoint metadata or no qualifying bar can defer completion. The first partial period in loaded history is excluded.
Two node methods
Cutoff, the default, keeps local peaks that clear HVN cutoff % as merged shelves, and interior minima at or below LVN cutoff % with busier rows on both sides as LVNs; profile tails are never LVNs. Valleys instead splits the profile at deep dips, governed by Valley ratio %, and takes one HVN core from each mass between them. Under both, POC is the highest-volume row midpoint rounded to a tick, and the POC shelf is protected from Node limit. These are Auction Foundry conventions.
Direct settings, always editable
The Profile and Instrument presets are gone: Session, node method, rows and period counts each have their own control, and every control stays editable, including after Reset. Editing a value does not enable a feature; each setting’s hover explains when its value is used. HVN cutoff still classifies LVN Profile colors when HVN geometry is hidden.
Same-type shared prices
Shared price marks actual intersections of the same type across the required two or three timeframes; partial overlap qualifies, contact at a single price does not. HVN and LVN do not combine. Highlight overlays the base map; Only hides base levels and retained zones.
Retained zones
With Today selected, yesterday’s completed Daily profile enters retention at the next Daily boundary; completed Daily, Weekly and Monthly retain the composite a new one replaces. Retained bands start at their source period, which identifies the source window rather than when the level became known, and draw until the Break rule first fires. Earlier zones kept per timeframe is a ceiling: the oldest profile leaves with all its zones at once. Filters and lifecycle rules can hide a kept band, so not every earlier band stays visible.
Zone fill and profile detail
Flat is one translucent box. Profile draws each zone’s estimated row volumes as bars inside it, with fainter shoulders; Heat shades up to five price steps by mean volume share. Fill source picks the zone’s own composite or one enabled timeframe. Profile detail changes display rows only: it does not change zones, POC or shared geometry. Uncovered prices draw Flat.
Status note and coverage
A compact middle-right note names the first chart, data or settings condition affecting the map; its hover holds every full reason. Incomplete or unverified source coverage keeps the available map visible with a note, and affected retained zones suppress their alerts. The Data Window carries volume, grid and level-state provenance, readiness and suppression counts.
Output and state reference5 documented states
Swipe or scroll horizontally to see every column.
| Output or state | When it appears | Meaning |
|---|---|---|
| HVN / LVN | Qualifying shelf or interior valley in an enabled ready profile | Estimated volume concentration or gap; no claim about the next price reaction. |
| POC | Highest estimated-volume row selected | One tick-rounded midpoint reference price, drawn above zone fills. |
| Shared price | Required timeframes share same-type geometry | An intersection of measured levels, not a probability. |
| Retained zone (old HVN / old LVN) | Retained zones on and an earlier profile still eligible | An earlier band tracked under the selected test and break rules. |
| Status note | Chart, data, coverage or settings condition affects the map | Hover the note for the full reason before interpreting absent or partial drawings. |
Settings
All 53 inputs are listed below in their 9 source groups. Every control stays editable; a value applies only where its hover says it is used. Changing Profile detail is distinct from changing the grid that calculates nodes.
Map10 inputs
Swipe or scroll horizontally to see every column.
| Setting | Control | Default | Choices, limits & availability |
|---|---|---|---|
| Daily profiledailyScopeInput | Choice / text | Today (in progress) | Off · Today (in progress) · Completed periods |
| WeeklyshowWeeklyInput | Toggle | Off | — |
| MonthlyshowMonthlyInput | Toggle | Off | — |
| SessionsessionScopeInput | Choice / text | Regular hours only | Regular hours only · Include extended hours |
| HVNhvnDisplayInput | Choice / text | Geometry and labels | Off · Geometry · Geometry and labels |
| LVNlvnDisplayInput | Choice / text | Geometry and labels | Off · Geometry · Geometry and labels |
| POCpocDisplayInput | Choice / text | Geometry and labels | Off · Geometry · Geometry and labels |
| Node limitmaxNodesInput | Whole number | 2 | Min 1 · Max 6 |
| Zone fillzoneFillInput | Choice / text | Flat | Flat · Heat · Profile |
| Zone extentboxExtentInput | Choice / text | Extend to today | Extend right · Extend to today · Period |
Shared price4 inputs
Swipe or scroll horizontally to see every column.
| Setting | Control | Default | Choices, limits & availability |
|---|---|---|---|
| Shared pricesharedModeInput | Choice / text | Off | Off · Highlight · Only |
| Minimum shared timeframesminShareTfInput | Whole number | 2 | Min 2 · Max 3 |
| Show labelsshowConfLabelsInput | Toggle | On | — |
| Collapse shared tagscollapseSharedTagsInput | Toggle | Off | — |
Calculation10 inputs
Swipe or scroll horizontally to see every column.
| Setting | Control | Default | Choices, limits & availability |
|---|---|---|---|
| Daily periodsdailyLookbackInput | Whole number | 2 | Min 1 · Max 10 |
| Weekly periodsweeklyLookbackInput | Whole number | 2 | Min 1 · Max 10 |
| Monthly periodsmonthlyLookbackInput | Whole number | 1 | Min 1 · Max 10 |
| Node methodnodeMethodInput | Choice / text | Cutoff | Cutoff · Valleys |
| Zone row resolutionrowSizeModeInput | Choice / text | Auto | Auto · Minimum ticks |
| Auto rowsrowCountInput | Whole number | 100 | Min 12 · Max 250 |
| Minimum row height (ticks)ticksPerRowInput | Whole number | 4 | Min 1 |
| HVN cutoff %hvnPctInput | Whole number | 65 | Min 1 · Max 100 |
| LVN cutoff %lvnPctInput | Whole number | 20 | Min 1 · Max 100 |
| Valley ratio %valleyPctInput | Whole number | 50 | Min 1 · Max 99 |
Fill11 inputs
Swipe or scroll horizontally to see every column.
| Setting | Control | Default | Choices, limits & availability |
|---|---|---|---|
| Fill applies tofillAppliesInput | Choice / text | Both | Both · HVN only · LVN only |
| Profile transparencyprofTInput | Whole number | 60 | Min 0 · Max 95 |
| Profile width (bars)profWidthInput | Whole number | 60 | Min 5 · Max 500 |
| Profile margin (rows)profMarginInput | Whole number | 4 | Min 0 · Max 20 |
| Profile detailprofDetailInput | Choice / text | Finest rows | Node rows · Finest rows · Custom ticks |
| Profile row height (ticks)profTicksInput | Whole number | 4 | Min 1 |
| Row separator linesprofRowLinesInput | Toggle | Off | — |
| Colour profile nodesprofNodeColorsInput | Toggle | On | — |
| Fill sourceheatSourceInput | Choice / text | Own composite | Own composite · Daily · Weekly · Monthly |
| Heat stepsheatStepsInput | Whole number | 3 | Min 1 · Max 5 |
| Heat transparencyheatTInput | Whole number | 75 | Min 0 · Max 95 |
History2 inputs
Swipe or scroll horizontally to see every column.
| Setting | Control | Default | Choices, limits & availability |
|---|---|---|---|
| Retained zonesretainedDisplayInput | Choice / text | Off | Off · Geometry · Geometry and labels |
| Earlier zones kept per timeframeretainLookbackInput | Whole number | 6 | Min 1 · Max 8 |
Appearance6 inputs
Swipe or scroll horizontally to see every column.
| Setting | Control | Default | Choices, limits & availability |
|---|---|---|---|
| HVN colourhvnColorInput | Color | #5D8FB5 · 80% transparent | — |
| LVN colourlvnColorInput | Color | #929AA6 · 88% transparent | — |
| POC colourpocColorInput | Color | #FFB300 · 0% transparent | — |
| Border and line styledrawStyleInput | Choice / text | Default | Default · Solid · Dashed · Dotted |
| Tag sizetagSizeInput | Choice / text | Small | Tiny · Small · Normal |
| Tag column spacing (bars)tagColumnBarsInput | Whole number | 20 | Min 8 · Max 100 |
Retention rules3 inputs
Swipe or scroll horizontally to see every column.
| Setting | Control | Default | Choices, limits & availability |
|---|---|---|---|
| Rule sessionlifecycleScopeInput | Choice / text | Match profile | Match profile · All available |
| Break rulebreakRuleInput | Choice / text | Close through | Close through · Wick through |
| Test ruletestRuleInput | Choice / text | Wick touch | Wick touch · Close inside |
Alerts2 inputs
Swipe or scroll horizontally to see every column.
| Setting | Control | Default | Choices, limits & availability |
|---|---|---|---|
| Alert: retained zone testedalertTestedInput | Toggle | Off | — |
| Alert: retained zone brokenalertBrokenInput | Toggle | Off | — |
Display filters5 inputs
Swipe or scroll horizontally to see every column.
| Setting | Control | Default | Choices, limits & availability |
|---|---|---|---|
| Range basisrangeBasisInput | Choice / text | Off | Off · Percent of close · Daily ATR |
| Display range from close (%)maxDistPctInput | Decimal | 5.0 | Min 0 · Max 100 · Step 0.5 |
| ATR lengthatrLenInput | Whole number | 14 | Min 1 · Max 100 |
| ATR multiplieratrMultInput | Decimal | 1.2 | Min 0.1 · Max 10 · Step 0.1 |
| Nearest zones per sidefocusNInput | Whole number | 0 | Min 0 · Max 6 |
Alerts and limitations
What can notify you, what can change the output, and what the indicator cannot establish.
Dynamic alert events
First qualifying test of a retained HVN/LVN band under Test rule and Rule session.
First qualifying break under Break rule; the band stops drawing.
Limits to keep visible
- OHLCV distribution is an estimate, not transaction-level volume at price, order flow or a footprint. No parity with TradingView’s built-in volume profile is claimed.
- Feed volume, available intrabars, session coverage, corporate actions and futures rollover can change the result. 2-minute source bars on 1-hour and higher charts can move a level by a row.
- Completed-period and confirmed-bar timing do not establish non-repainting, Replay or reload behavior. Retained bands draw back to their source period only after the result is known.
- Fine grids can exhaust resource headroom, causing a coarser grid restart that clears retained zones. Available chart history can be insufficient for requested periods, and missing history is not reconstructed.
- There is no developing Weekly or Monthly profile and no histogram beside the price axis. Labels may move, be omitted or clip with chart zoom and margin.
- Levels and lifecycle events describe measured context. They do not establish fills, trade outcomes or predictive reliability.
Troubleshooting
Start with what you see on the chart. Each answer explains the likely cause and the first setting, timeframe, or data condition to check.
Why did VPNM stop with an error after the update?
The update removed and reordered inputs, so settings saved on the chart no longer match. Remove VPNM from the chart and add it again, then review the settings.
Why is the map empty?
Check a time-based intraday chart on a symbol with traded volume, then hover the status note. Today is pending until the first confirmed bar of the session, and completed Weekly and Monthly maps need enough loaded history.
Why does changing Daily periods do nothing?
Today (in progress) ignores Daily periods. Select Completed periods to combine several days.
Why is Profile fill flat?
Select Profile in Zone fill, check Fill applies to, and check that Fill source is enabled, ready and covers the band’s prices.
Why did a zone disappear?
Check Range basis and Nearest zones per side, Shared price Only, retention breaks, the Earlier zones kept limit and grid resets. Hidden records can continue updating.
Why are there no alerts?
Alerts start off and apply only to retained zones. Turn on Retained zones and an alert switch, create an Any alert() function call alert, and recreate any alert made before the update.