Skip to main content
On this page

Price-Volume Trend: Calculation, Data Quality, and Divergence

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

Price-Volume Trend (PVT) accumulates volume weighted by the proportional change in closing price. It does not simply add all volume on up bars and subtract all volume on down bars; that describes On-Balance Volume. PVT is a transformation of price and volume data, not a direct measurement of who bought or sold.

Price-Volume Trend Indicator - TradingView Chart

Calculate the contribution before the cumulative total​

For each bar, calculate the close-to-close fractional return, multiply it by that bar's volume, and add the result to the prior PVT total. TradingView documents this in its PVT calculation.

PVT change = volume × (current close - previous close) / previous close

The return is used as a fraction: a 2% move contributes 0.02 times volume, not two times volume. The word "bar" matters because this need not be a daily calculation.

Consider this hypothetical sequence, starting PVT at zero:

BarPrevious closeCloseVolumePVT changeRunning PVT
A1001021,000+2020
B102100.982,000-200
C100.98100.983,00000

The second bar has twice the volume but half the absolute percentage move of the first, so the contributions cancel. An unchanged close contributes zero despite nonzero trading volume. These observations follow from the formula; they do not reveal an absence of trading interest.

Distinguish PVT from OBV​

OBV uses the sign of the close-to-close change to add or subtract the full bar's volume. PVT also uses the magnitude of the proportional price change. On hypothetical bar A above, OBV would add 1,000 while PVT adds 20.

Neither calculation identifies institutional participation, buyer initiation, or a trader's motive. Every executed trade has a buyer and seller. Describing a divergence as "smart money selling" adds information that is absent from the inputs. PVT may be used as a confirmation hypothesis, but it cannot certify a genuine breakout.

The cumulative baseline changes the meaning of zero​

PVT has no fixed bounded scale. Its absolute level depends on the starting history, initialization, volume units, and instrument. Starting the same later segment with a different cumulative balance shifts the line vertically. A positive value alone therefore does not establish a current bullish trend, and an absolute zero crossing is not a universal trading signal.

For comparison, use consistent data and a defined interval. Changes over that interval or comparisons with a moving average can be more interpretable than a raw cross-symbol ranking, but still need a stated rule. A daily PVT calculation also need not equal the sum of intraday PVT contributions: aggregating closes and volumes changes the products used by the formula.

Inspect the volume feed​

TradingView explains that volume may be absent or supplied as tick volume for some instruments. Tick volume counts price updates rather than traded units. A missing value is not evidence that no trades occurred.

For crypto, continuous trading does not guarantee complete market-wide volume. An exchange-qualified pair reflects the selected feed, and different instruments may use different volume units. For futures, check the contract and rollover treatment. For equities, check session coverage and corporate-action adjustments. Record those choices before comparing two charts.

Do not silently replace missing volume with zero and interpret the resulting flat line as neutral pressure. First establish whether the dataset supports the indicator. A previous close of zero also makes the fractional-return formula undefined; unusual or invalid data require explicit handling.

Add the Pineify component​

Pineify's Price-Volume Trend component uses TradingView's built-in PVT output. The base component has no calculation-length input and plots in a separate pane. A moving-average overlay is an additional calculation, not a hidden default inside raw PVT.

Search for the component in the Visual Editor, check its plan access, and generate the source. Copy it into TradingView's Pine Editor, compile, and add it to the intended symbol and timeframe. Verify a few bar contributions against the data before using it in a condition.

How to search for and add indicator pages in the Pineify editor
The Best Pine Script Generator

Define divergence before testing it​

A bearish divergence can describe a higher price high with a lower corresponding PVT high; a bullish divergence can describe a lower price low with a higher PVT low. Specify which swings qualify and how the values are paired. If those swings require later bars to confirm them, the signal cannot be known at the earlier turning point.

A simpler initial test could compare PVT with a separately calculated moving average on closed bars. Specify the average type and length, entry event, exit, position size, costs, and fill timing. A 21-bar SMA is an illustrative candidate, not a demonstrated best setting. Check how live-bar price and volume changes affect the condition before creating an alert.

Use a separate evaluation period after choosing rules. Compare net expectancy, drawdown, exposure, and sensitivity to the data feed. There is no documented S&P 500 test here supporting a 52% win rate, 18% annual return, or superiority over buy-and-hold. Those claims cannot be inferred from the PVT formula.

Does PVT add the entire volume on an up bar?

No. It adds volume multiplied by the fractional close-to-close return. OBV uses the full volume with the direction of the close change.

Is a PVT value above zero bullish?

The absolute value depends on its cumulative baseline. Define a change or relative comparison over a consistent interval rather than treating zero as a universal threshold.

Does divergence prove institutional accumulation or distribution?

No. PVT uses closing prices and volume, without participant identity or trade intent. Divergence is an observation to investigate, not proof of a future reversal.