Positive Volume Index
The Positive Volume Index (PVI) is a cumulative indicator that tracks price changes on days when trading volume increases from the previous day. Based on the theory that informed investors (institutional "smart money") tend to trade on days with increasing volume, PVI focuses exclusively on these higher-volume periods while ignoring price movements on days when volume decreases.
Developed by Paul Dysart in the 1930s and popularized by Norman Fosback in the 1970s, PVI is designed to identify trends driven by institutional activity. The indicator assumes that retail investors are more active during declining volume periods, while professional traders dominate on days with rising volume.
PVI works as a cumulative measure, meaning it maintains a running total that updates only on days when volume increases. When volume rises, the indicator calculates the percentage change in price and adds it to the previous PVI value. When volume stays flat or decreases, the PVI value remains unchanged. This selective updating creates a trend line that reflects price movements during periods of presumed institutional interest.
What It Measures
The Positive Volume Index measures cumulative price changes that occur specifically on days when trading volume increases from the previous day. It captures the percentage price change multiplied by the previous PVI value, creating a running total that reflects trends during rising volume periods.
When to Use
- Institutional Activity Tracking: Identifies price trends when "smart money" is presumed to be active (volume-up days)
- Divergence Detection: PVI moving opposite to price may signal weakening institutional support or distribution
- Trend Confirmation: Rising PVI during uptrends suggests institutional accumulation; falling PVI during downtrends suggests institutional distribution
- Complement to NVI: Used alongside Negative Volume Index to compare retail versus institutional sentiment
- Long-term Trend Analysis: Most effective for identifying major trends rather than short-term movements
Interpretation
- Rising PVI: Indicates prices are increasing on days with rising volume; suggests institutional buying or accumulation
- Falling PVI: Indicates prices are decreasing on days with rising volume; suggests institutional selling or distribution
- Bullish Divergence: Price makes lower lows while PVI makes higher lows; institutional buyers may be accumulating despite falling prices
- Bearish Divergence: Price makes higher highs while PVI makes lower highs; institutional sellers may be distributing despite rising prices
- Flat PVI During Price Move: Volume hasn't been increasing during the price move; may indicate weak institutional support
- PVI Above 255-Day MA: Historically associated with bull markets (per Fosback's research); suggests institutional optimism
- PVI Below 255-Day MA: Historically associated with bear markets; suggests institutional pessimism
- Cumulative Nature: PVI is a running total starting from the initial value (typically 0.0 or 100.0); absolute values matter less than trend direction and divergences
- Volume-Selective Updates: The indicator only changes when volume increases, making it complementary to traditional price-based indicators
Usage Notes
Unlike most technical indicators, PVI doesn't require period selection or smoothing parameters. It's a pure cumulative measure that responds only to volume increases. The starting value (typically 0.0) serves as the baseline, and all subsequent values represent the accumulated effect of price changes on rising-volume days.
The indicator is most powerful when:
- Used in conjunction with a moving average (commonly 255-day) to identify bull/bear market conditions
- Compared against the Negative Volume Index (NVI) to contrast institutional vs. retail behavior
- Analyzed for divergences against price to spot potential reversals before they occur in price
Default Usage
use rust_ti::strength_indicators::bulk::positive_volume_index;
pub fn main() {
// fetch the data in your preferred way
// let close = vec![...]; // close prices
// let volume = vec![...]; // volume data
let previous_pvi = 0.0; // starting value for first calculation
let pvi = positive_volume_index(&close, &volume, previous_pvi);
println!("Positive Volume Index: {:?}", pvi);
}
import pytechnicalindicators as pti
# Positive Volume Index calculation
previous_pvi = 0.0 # starting value for first calculation
pvi = pti.strength_indicators.bulk.positive_volume_index(
close, volume, previous_pvi
)
print("Positive Volume Index:", pvi)
import init, {
strength_bulk_positiveVolumeIndex
} from 'https://cdn.jsdelivr.net/npm/ti-engine@latest/dist/web/ti_engine.js';
await init();
// fetch the data in your preferred way
// const close = [...]; // close prices
// const volume = [...]; // volume data
const previousPvi = 0.0; // starting value for first calculation
const pvi = strength_bulk_positiveVolumeIndex(close, volume, previousPvi);
console.log("Positive Volume Index:", pvi);
Interactive Chart
Use the interactive playground below to explore how different parameters affect the indicator's behavior.