OPEN-SOURCE SCRIPT
Volume Footprint [Simplifyed]

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®
Six signal types are derived from that data:
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
Signals
Display
Usage notes
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.
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.
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
- 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.
- 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.
- 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
- 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.
- 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.
- 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
- Value Area Highlight — draws a gold border on rows within the Value Area. Default: on.
- POC Highlight — draws an orange border on the Point of Control row (highest volume row in the bar). Default: on.
- Imbalance Markers — plots a small triangle at the top or bottom of rows with a buy or sell imbalance. Default: on.
- Bar Delta Label — displays a label below each bar showing total bar delta, volume context, and dominant imbalance count. Default: on.
- Trap Signals — shows Bear Trap and Bull Trap labels on qualifying bars. A ★ prefix indicates the trap fired at a range edge. Default: on.
- 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.
- Squeeze Signals — plots a label when price crosses through a Vulnerability Line, triggering forced exits from trapped participants. Default: on.
- Efficiency Signals (Effort vs Result) — plots Ineff Sell and Ineff Buy labels when delta direction and candle direction disagree. Default: on.
- 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.
- 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.
Script open-source
Dans l'esprit TradingView, le créateur de ce script l'a rendu open source afin que les traders puissent examiner et vérifier ses fonctionnalités. Bravo à l'auteur! Bien que vous puissiez l'utiliser gratuitement, n'oubliez pas que la republication du code est soumise à nos Règles.
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.
Script open-source
Dans l'esprit TradingView, le créateur de ce script l'a rendu open source afin que les traders puissent examiner et vérifier ses fonctionnalités. Bravo à l'auteur! Bien que vous puissiez l'utiliser gratuitement, n'oubliez pas que la republication du code est soumise à nos Règles.
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.