OPEN-SOURCE SCRIPT
Composite HVN/LVN Nodes

Composite HVN/LVN Nodes
Most volume profile tools show one session at a time. This one accumulates high and low volume nodes across many sessions into a single map, so the prices that keep reappearing stand out from the ones that showed up once.
Each session is profiled separately. Its nodes are extracted and folded into a running composite where repeat sightings reinforce each other, unreinforced levels decay away, and levels price has torn through get demoted. Zones are shaded by relative strength — the darkest bands are the strongest currently on the map.
HOW IT WORKS
Detection finds a run of contiguous rows clearing the threshold, then anchors the zone on that run's actual volume peak. Anchoring on the first qualifying row instead biases every zone toward the lower peak of a multi-peak shelf.
Merging takes the union of two overlapping bands rather than the average of their centres. Averaging places the result in the valley between two shelves, covering neither.
Decay runs at every session close. A node that stops being reinforced fades and is eventually dropped.
Invalidation cuts a zone's weight hard when a single bar rips clean through it.
Conflict resolution removes one of any overlapping HVN/LVN pair. A price cannot be both a shelf and a gap.
Profiles are built from 1-minute intrabars rather than chart bars, so the map is the same on 1m as on 1h. Without this, coarse bars smear volume across rows they only passed through.
DEFAULTS ARE TUNED FOR NQ
Most thresholds are percentages of session range or session volume, so they travel between instruments reasonably well. The session times and the LVN threshold do not.
ADAPTING IT
Start with the session times; everything depends on those being right. Then check LVN detection, which assumes NQ-like liquidity. If the map is too sparse or too crowded, adjust "Drop below weight" and "Max nodes kept".
NOTES
Most volume profile tools show one session at a time. This one accumulates high and low volume nodes across many sessions into a single map, so the prices that keep reappearing stand out from the ones that showed up once.
Each session is profiled separately. Its nodes are extracted and folded into a running composite where repeat sightings reinforce each other, unreinforced levels decay away, and levels price has torn through get demoted. Zones are shaded by relative strength — the darkest bands are the strongest currently on the map.
HOW IT WORKS
Detection finds a run of contiguous rows clearing the threshold, then anchors the zone on that run's actual volume peak. Anchoring on the first qualifying row instead biases every zone toward the lower peak of a multi-peak shelf.
Merging takes the union of two overlapping bands rather than the average of their centres. Averaging places the result in the valley between two shelves, covering neither.
Decay runs at every session close. A node that stops being reinforced fades and is eventually dropped.
Invalidation cuts a zone's weight hard when a single bar rips clean through it.
Conflict resolution removes one of any overlapping HVN/LVN pair. A price cannot be both a shelf and a gap.
Profiles are built from 1-minute intrabars rather than chart bars, so the map is the same on 1m as on 1h. Without this, coarse bars smear volume across rows they only passed through.
DEFAULTS ARE TUNED FOR NQ
Most thresholds are percentages of session range or session volume, so they travel between instruments reasonably well. The session times and the LVN threshold do not.
- Sessions: Globex (1800-0930) and New York (0930-1700). For equities, use a single 0930-1600 and disable the other. Sessions must not overlap.
- Resolution: 1 minute. The most important setting for consistency. The "Intrabars/bar" readout in the status line shows whether it is active; 0 means it has fallen back to chart bars, which happens past roughly 100k intrabars of history.
- Detection: 200 rows, sensitivity 6, HVN 70%, LVN 10%. Roughly one row per point on a typical NQ session range. The thresholds are asymmetric on purpose: 70% is permissive enough to catch shoulders as well as the POC, while 10% is strict because on a liquid instrument nearly everything trades a little and a loose setting produces gaps that aren't really gaps. On thinner instruments 10% may find nothing.
- Node width: max 12% of range. Mainly restrains LVNs. At a 10% threshold a genuinely dead pocket can run a long way, and without a ceiling one gap swallows half the range.
- Volume weighting — each session's contribution is scaled by how active it was against a rolling 20-session average, capped at 3x either way so one event day cannot dominate. Sessions below 35% of average volume are skipped entirely, which filters holidays and half days on NQ. Set to 0 to disable.
- Composite: half-life 50 sessions. Note that is sessions, not days: with both enabled that is two per weekday, so about five trading weeks. Halve it for a faster-moving map.
- Conflicts: stronger wins. The lighter of an overlapping pair is removed, ties going to the HVN, since volume that demonstrably traded is harder evidence than volume that didn't. Zones that merely touch are left alone — an HVN against an LVN is a real structure, the edge of a shelf against a gap.
- Archive: off. When on, invalidated nodes freeze in place with a dashed border instead of disappearing, so you can see where a level sat and how long it lasted. Useful for review, cluttered live.
ADAPTING IT
Start with the session times; everything depends on those being right. Then check LVN detection, which assumes NQ-like liquidity. If the map is too sparse or too crowded, adjust "Drop below weight" and "Max nodes kept".
NOTES
- Nodes are computed at session close and are not recalculated afterwards, but their appearance changes as weights decay and merge — shading is relative to the strongest node currently on the map, not an absolute scale.
- TradingView caps drawing objects at 500 boxes. Active and archived nodes share that budget.
- This is an analysis tool, not a signal generator. It marks prices where volume repeatedly concentrated or repeatedly didn't. What that means for any given trade is up to you.
Open-source script
In true TradingView spirit, the creator of this script has made it open-source, so that traders can review and verify its functionality. Kudos to the author! While you can use it for free, remember that republishing the code is subject to our House Rules.
Disclaimer
The information and publications are not meant to be, and do not constitute, financial, investment, trading, or other types of advice or recommendations supplied or endorsed by TradingView. Read more in the Terms of Use.
Open-source script
In true TradingView spirit, the creator of this script has made it open-source, so that traders can review and verify its functionality. Kudos to the author! While you can use it for free, remember that republishing the code is subject to our House Rules.
Disclaimer
The information and publications are not meant to be, and do not constitute, financial, investment, trading, or other types of advice or recommendations supplied or endorsed by TradingView. Read more in the Terms of Use.