Skip to main content
On this page

Pine Script Volume Footprints: API, Delta, and Data Limits

· 5 min read
Pineify Team
Pine Script and AI trading workflow research team

Pine Script's request.footprint() provides bar-level footprint objects and price-row data. TradingView classifies the underlying lower-timeframe volume as buying or selling from intrabar price movement. Treat these values according to that method; they are not proof that every transaction was independently identified as an execution at the bid or ask.

Pine Script Volume Footprints: Complete Guide to Order Flow Analysis in TradingView

What a footprint describes​

A footprint groups activity within a bar into price rows. Total volume is divided into the platform's buy and sell categories, and delta is their difference. The point of control (POC) is the row with the largest volume. The value area contains a configured share of volume around the distribution's high-activity region.

These are measurements of the selected data and aggregation settings. A POC is not an objective fair value or a guaranteed price magnet. An imbalance does not reveal outstanding orders in an order book. TradingView's footprint calculation guide explains the classification and chart behavior.

Use the actual API​

The function takes a row size in ticks, an optional value-area percentage, and an optional imbalance percentage. It does not take a symbol and timeframe as its first two arguments. Returned footprint and row objects expose methods rather than numeric fields named fp.poc or fp.delta.

Here is a complete delta indicator using one footprint request and an explicit missing-data guard:

//@version=6
indicator("Footprint Delta with Data Status", overlay=false)
ticksPerRow = input.int(100, "Ticks per row", minval=1)
valueArea = input.float(70, "Value area percent", minval=1, maxval=100)
footprint fp = request.footprint(ticksPerRow, valueArea)
bool available = not na(fp)
float delta = available ? fp.delta() : na
plot(delta, "Classified volume delta", color=delta >= 0 ? color.teal : color.red, style=plot.style_columns)
hline(0, "Zero", color=color.gray)
var table status = table.new(position.top_right, 1, 1)
if barstate.islast
table.cell(status, 0, 0, available ? "Footprint available" : "No footprint data", text_color=chart.fg_color)

The number of ticks is a price-row aggregation choice, not a history length. The example's values are demonstration settings. A missing footprint stays na; replacing it with zero would wrongly suggest balanced volume where no measurement exists.

See the Pine footprint documentation for the signature and object methods. fp.poc(), fp.vah(), and fp.val() return row objects. Their price boundaries can then be read with methods such as up_price() and down_price(). Choose explicitly whether a plotted POC means a row boundary or its midpoint.

Check access and availability first​

The official Pine documentation currently restricts footprint requests to Premium and Ultimate accounts. Availability also depends on the data. A successful syntax check does not establish that an account or symbol can supply the required footprint history.

Outputs depending on more than one unique footprint request cause a runtime error. This also matters when another request evaluates footprint-dependent code in a different context. Do not assume that wrapping a calculation in request.security() bypasses that restriction.

The release notes document the feature's introduction and examples. Check current access before making a purchase decision; this article is not evidence that upgrading alone resolves a missing-data case.

Keep comparisons consistent​

Record the exchange-qualified symbol, chart timeframe, session, row size, value-area percentage, and date range. Compare a completed bar rather than an evolving one. If another footprint display differs, check those settings and its source data before concluding that either calculation is wrong.

Historical and realtime footprint data can differ as the available intrabar granularity changes. A screenshot of a developing bar is not a durable backtest record. Daily volume can also differ between end-of-day and intraday feeds, so do not demand that every aggregation always equals the chart's total.

Turn interpretations into testable rules​

A delta divergence, POC revisit, or imbalance cluster is a hypothesis to define, not an established reversal probability. Specify the comparison bars, confirmation time, and what counts as a failed signal. For a strategy, add entries, exits, sizing, costs, and fill assumptions before discussing results.

For example, a hypothetical study could count confirmed positive-price bars with negative delta, then measure a predefined later outcome. Record the denominator and date range. Do not select only attractive chart examples or claim that a pattern identifies institutions or unfilled orders.

Pineify can assist with drafting custom Pine logic, but the generated code must be checked against TradingView's current API and account constraints. This article does not establish a dedicated visual footprint component or an execution service.

Pineify Website