OPEN-SOURCE SCRIPT

Volume Footprint [Simplifyed]

1 003
Volume Footprint [Simplifyed]

Overview

Most volume indicators tell you how much was traded. This indicator tells you who won. Volume Footprint displays the order flow breakdown inside every bar — how many contracts were bought aggressively versus sold aggressively at each price level — so you can see where institutional participation is concentrated and whether that participation is consistent with the direction price actually moved.

The core insight is simple: price only moves when effort fails to produce a result. A bar dominated by sell orders that still closes higher is not bearish — it is a sign that passive buyers absorbed every aggressive seller. The next move is likely up. This script surfaces those inefficiencies directly on your chart.

Requires a TradingView Premium or Ultimate plan for the request.footprint() API.

How it works

The script requests a full footprint for each bar via Pine Script v6's native request.footprint() call. Each bar is divided into rows based on a user-defined tick width. Every row shows its delta — the net difference between aggressive buy volume and aggressive sell volume at that price level.

Pine Script®
footprint fp = request.footprint(i_ticks, i_va, i_imbal) float barDelta = fp.delta() array<volume_row> rows = fp.rows()


Six signal types are derived from that data:

  • Bear Trap (green label) — the majority of sell-delta rows are clustered in the bottom third of the bar. Sellers entered at the lows and were absorbed. Their break-even stop is the bar's POC.
  • Bull Trap (red label) — the majority of buy-delta rows are clustered in the top third of the bar. Buyers entered at the highs and were absorbed. Their break-even stop is the bar's POC.
  • Squeeze Up / Squeeze Down (diamond) — price crosses through a Vulnerability Line drawn at a prior trap bar's POC. Trapped participants hit their stops and accelerate the move.
  • Ineff Sell / Ineff Buy (circle) — bar delta is negative but the candle closed up (or vice versa). Effort did not produce the expected result. The aggressive side is exhausted.
  • Vulnerability Line (dashed) — a horizontal line extending from each trap bar's POC. This is the trapped trader's break-even level. It turns dotted when consumed by a Squeeze signal.
  • Iceberg Row (bright border) — a row where total volume exceeds a multiple of the bar's average row volume. Signature of a passive institutional limit order silently absorbing aggression.


Bar rows are coloured by delta direction: teal for net buying, red for net selling. Row opacity scales with volume when the gradient mode is enabled. The Value Area (the range of rows containing a user-defined percentage of total bar volume) receives a gold border. The POC row receives an orange border.

The bar delta label at the bottom of each bar shows the net delta, volume context (FRESH / EXIT up / EXIT down), and a summary of imbalance counts. A star prefix (★) on trap labels means the trap fired at the edge of the recent N-bar range — the highest-conviction location.

Inputs

Footprint

  1. Ticks per Row — controls the price granularity of each footprint row. One tick equals syminfo.mintick. Lower values (e.g. 10) produce more rows and finer detail but consume more drawing objects; higher values (e.g. 500) produce fewer, coarser rows. Target approximately 25 rows per bar. Use the "ATR Ticks Hint" value in the Data Window as a starting point. Default: 100.
  2. Value Area % — the percentage of total bar volume used to define the Value Area. The standard market profile convention is 70. Raising this to 90 widens the highlighted region; lowering it to 50 tightens it to only the highest-volume core. Default: 70.
  3. Imbalance Threshold % — a row is flagged as having a buy imbalance when its buy volume exceeds this percentage of the row below's sell volume (and vice versa for sell imbalance). At 300%, a row needs 3× the adjacent row's opposing volume to qualify. Lower values (e.g. 150) produce more frequent imbalance markers; higher values (e.g. 500) flag only extreme stacking. Default: 300.


Signals

  1. Fresh/Exit Range (bars) — the lookback window used to classify whether the current bar is in the middle of the recent range (FRESH — new institutional entry) or at its extremes (EXIT — take-profits or stops). A value of 20 uses the prior 20 bars. Shorter lookbacks (e.g. 5) react to recent swings; longer lookbacks (e.g. 50) classify against a broader structural range. Default: 20.
  2. Iceberg Threshold (x avg row vol) — a row is highlighted as an iceberg when its volume exceeds this multiple of the bar's average row volume. At 3.0×, a row needs three times the average to qualify. Lower values (e.g. 2.0) highlight more rows; higher values (e.g. 6.0) flag only the most extreme absorption events. Default: 3.0.
  3. Candle Shape Filter for Traps — when enabled, a Bear Trap additionally requires a hammer candle (lower wick at least 2× the body, upper wick at most 0.5× the body) and a Bull Trap additionally requires a shooting-star candle. This reduces signal frequency and increases precision. Disable it on instruments where wick structure is less reliable (e.g. crypto with frequent spikes). Default: off.


Display

  1. Value Area Highlight — draws a gold border on rows within the Value Area. Default: on.
  2. POC Highlight — draws an orange border on the Point of Control row (highest volume row in the bar). Default: on.
  3. Imbalance Markers — plots a small triangle at the top or bottom of rows with a buy or sell imbalance. Default: on.
  4. Bar Delta Label — displays a label below each bar showing total bar delta, volume context, and dominant imbalance count. Default: on.
  5. Trap Signals — shows Bear Trap and Bull Trap labels on qualifying bars. A ★ prefix indicates the trap fired at a range edge. Default: on.
  6. Vulnerability Lines — draws a dashed horizontal line at each trap bar's POC, extending to the right until consumed by a Squeeze signal. Default: on.
  7. Squeeze Signals — plots a label when price crosses through a Vulnerability Line, triggering forced exits from trapped participants. Default: on.
  8. Efficiency Signals (Effort vs Result) — plots Ineff Sell and Ineff Buy labels when delta direction and candle direction disagree. Default: on.
  9. Volume Gradient — when enabled, each row's background opacity scales with its share of total bar volume, making high-volume rows visually heavier. When disabled, all rows use a flat background colour. Default: off.
  10. Label Size — sets the text size of row delta labels. Options: tiny, small, normal. Default: tiny.


Usage notes

  • Read the "ATR Ticks Hint" value from the Data Window before setting Ticks per Row. Divide the hint by 25 to find a starting point that yields approximately 25 rows per bar. Too few rows (under 10) loses resolution; too many rows (over 40) consumes drawing objects rapidly and shows only the last few bars in full detail.
  • Full footprint detail (boxes and labels) is limited to approximately the last 13 bars due to drawing object limits (500 boxes, 500 labels). All signals — traps, squeezes, efficiency — are plotted on all historical bars via plotshape and barcolor, so you can scroll back to review signal history without losing them.
  • Treat the ★ trap label as higher conviction than an unmarked trap. A trap firing in the middle of a range has less context than one firing at a structural high or low where stops are naturally clustered.
  • A Vulnerability Line turning dotted is the Squeeze confirmation. The price crossing the line is the mechanical event; the line changing style is its visual acknowledgement. Monitor open Vulnerability Lines for potential squeeze setups forming over multiple bars.
  • Ineff Sell and Ineff Buy signals are strongest when they appear in the FRESH zone (bar label shows "FRESH"), meaning institutional participants entered mid-range and their effort failed. Efficiency signals in EXIT zones are more ambiguous — they may simply reflect profit-taking.
  • A row with a bright iceberg border is a price level to watch on subsequent bars. Institutions building positions via iceberg orders at a specific level tend to defend that level on retests.
  • This indicator requires one request.footprint() call per script. You cannot combine it with other scripts that also use request.footprint() on the same chart due to Pine Script's single-footprint-per-indicator constraint.


Recommended pairings

Volume Footprint is most effective when combined with a structural context tool — a supply and demand zone indicator or a swing high/low marker — so you can confirm whether trap and squeeze signals are firing at meaningful price levels. A session volume profile (VPVR) on the same chart helps identify whether the current bar's POC aligns with a broader high-volume node or is isolated.

Clause de non-responsabilité

Les informations et publications ne sont pas destinées à être, et ne constituent pas, des conseils ou recommandations financiers, d'investissement, de trading ou autres fournis ou approuvés par TradingView. Pour en savoir plus, consultez les Conditions d'utilisation.