VPIN: Formula, Volume Buckets, and the Flash-Crash Debate
Learn how VPIN uses volume-time buckets and bulk volume classification to summarize order-flow imbalance, work through a hypothetical calculation, and assess the disputed evidence around the 2010 Flash Crash.
In this guideWhat VPIN measures—and what the name can overstate
Short summary
VPIN is a rolling summary of the absolute buy–sell volume imbalance across recent equal-volume buckets. Its authors proposed it as a way to monitor order-flow toxicity in volume time, but its inputs and interpretation are disputed. The score is not a directly observed probability that a trade is informed, a proven Flash-Crash warning, or a stand-alone trading signal.
What VPIN measures—and what the name can overstate
VPIN stands for volume-synchronized probability of informed trading. Easley, López de Prado, and O’Hara introduced it as a high-frequency measure related to order-flow toxicity: situations in which liquidity providers may be adversely selected because incoming trades are more likely to be on the informed side. Their method combines volume imbalance with trade intensity and updates on a volume clock rather than at fixed wall-clock intervals (Easley, López de Prado, and O’Hara, 2012).
The name needs care. A computed VPIN value such as 0.32 does not mean there is a calibrated 32% chance that the next trade came from an informed trader. It is a normalized average of estimated imbalances under chosen data, classification, bucket, and window rules. It does not identify which trader is informed, distinguish information from liquidity-motivated trading, or establish that a liquidity provider actually suffered a loss.
VPIN is also different from signed order-flow imbalance. It takes the absolute imbalance within each bucket before averaging, so buy-heavy and sell-heavy buckets both contribute positively. This summarizes how one-sided flow has been within recent volume intervals, while discarding the direction of the imbalance in the final score. The classic [PIN model](/en/learn/probability-of-informed-trading-pin-model-explained), by comparison, fits buy- and sell-arrival counts over time periods to a latent-state model.
Volume-time buckets make updates depend on trading activity
A wall-clock chart samples observations at a fixed interval, such as every second or minute. A volume clock advances when a specified amount of trading has occurred. If a bucket is set to 1,000 contracts, it closes whenever 1,000 contracts have traded, whether that takes 20 seconds in a busy period or 12 minutes in a quiet one.
Each bucket is intended to contain the same total traded volume. The amount of wall-clock time covered by each bucket varies. VPIN is then calculated from a rolling window of the most recent \(n\) volume buckets and updated when a new bucket is completed. This puts more updates into busy periods and fewer into quiet periods.
Volume time is a sampling convention, not a way to remove market activity from the data. Faster trading can change how quickly a VPIN window advances, and the number of observations per hour will itself vary. Results therefore depend on the instrument, session, bucket volume, treatment of trades that cross bucket boundaries, and how the volume clock is initialized. A reproducible analysis states these choices.
Bulk Volume Classification estimates trade direction in groups
VPIN needs buy-initiated and sell-initiated volume. With trade-level direction labels, those labels can be aggregated, subject to the quality of the classification. When reliable labels are unavailable, the original VPIN work proposed Bulk Volume Classification (BVC): infer the likely buy and sell proportions of volume in a time bar from that bar’s price change.
One common description of BVC is
\[ \widehat V^{B}_t=V_t\Phi\!\left(\frac{\Delta P_t}{\widehat\sigma_{\Delta P}}\right), \qquad \widehat V^{S}_t=V_t-\widehat V^{B}_t, \]
where \(V_t\) is total volume in the bar, \(\Delta P_t\) is its price change, \(\widehat\sigma_{\Delta P}\) is a stated estimate of the scale of price changes, and \(\Phi\) is the standard normal cumulative distribution function. A positive standardized price change allocates more volume to buys; a negative change allocates more to sells. If the standardized change is zero, this formula splits volume equally.
For example, if a hypothetical time bar contains 1,000 contracts and its standardized price change is \(0.5\), then \(\Phi(0.5)\approx0.6915\). BVC assigns about 691.5 contracts to buy volume and 308.5 to sell volume. The fractional values are estimates, not observed fractional contracts or known trade intentions. The result depends on the bar interval, price measure, volatility scale estimate, and distributional assumption.
BVC classifies volume in groups from price movement; it does not establish the direction of every trade in the group. The time bars used for this estimate and the later equal-volume buckets serve distinct steps. A study should document both. [Trade-direction classification methods](/en/learn/trade-direction-classification-lee-ready-algorithm-explained) provide useful context for the limits of inferred aggressor-side labels. The 2015 comparison by Andersen and Bondarenko reports that, for their E-mini S&P 500 futures benchmark, BVC performed worse than a standard tick rule against a trade classification constructed from quotes and trades (Andersen and Bondarenko, 2015).
The VPIN formula averages absolute bucket imbalance
Let \(V\) denote the target volume per bucket, and let \(\widehat V^B_i\) and \(\widehat V^S_i\) be the estimated buy and sell volumes in bucket \(i\). Each complete bucket has \(\widehat V^B_i+\widehat V^S_i=V\). A common rolling form is
\[ \mathrm{VPIN}_t= \frac{1}{nV} \sum_{i=t-n+1}^{t} \left|\widehat V^B_i-\widehat V^S_i\right|. \]
The numerator adds the absolute buy–sell difference in each of the latest \(n\) buckets. The denominator, \(nV\), is their total volume. With complete buckets and nonnegative buy/sell estimates that sum to \(V\), the score lies between 0 and 1; some displays multiply it by 100 and show a percentage.
A value near zero means the estimated buy and sell volumes were relatively balanced within those buckets. A larger value means the estimated flow was more one-sided on average over that rolling volume window. The score does not say whether the one-sided flow was buying or selling, because the absolute value removes that sign.
Different implementations may use different trade-direction methods, bucket sizes, rolling-window lengths, sampling intervals, and price inputs. These are part of the statistic’s definition in practice. Values calculated with different settings are not automatically comparable.
A hypothetical four-bucket calculation is reproducible
Suppose four complete buckets each contain \(V=100\) contracts. After applying one stated trade-classification procedure, estimated buy and sell volumes are:
| Bucket | Estimated buys | Estimated sells | Absolute imbalance |
|---|---|---|---|
| 1 | 70 | 30 | \(|70-30|=40\) |
| 2 | 55 | 45 | \(|55-45|=10\) |
| 3 | 20 | 80 | \(|20-80|=60\) |
| 4 | 60 | 40 | \(|60-40|=20\) |
The four absolute imbalances sum to \(40+10+60+20=130\) contracts. Total volume is \(4\times100=400\) contracts, so
\[ \mathrm{VPIN}=\frac{130}{400}=0.325=32.5\%. \]
Across the same window, estimated buys total 205 and sells total 195. The signed net imbalance is only \(205-195=10\) contracts, or \(10/400=2.5\%\) of total volume. That differs from VPIN because positive and negative bucket imbalances partly offset in the signed net figure, while VPIN adds their absolute sizes.
All bucket volumes and classifications here are hypothetical. The arithmetic illustrates the formula and does not estimate a real asset, exchange, probability, or market event. If BVC produced the estimates, its price bars and volatility scale would also need to be stated to reproduce the classification step.
<!-- learn:illustration --> <!-- Text-free concept: equal-volume buckets contain different estimated buy/sell splits; a rolling summary keeps imbalance magnitude but discards direction. Conceptual, not market data, a crash probability, forecast, or trading signal. -->

The Flash-Crash evidence is a published dispute
The 2012 Easley–López de Prado–O’Hara study presented VPIN as an order-flow-toxicity measure and reported that it was associated with short-term volatility (Easley, López de Prado, and O’Hara, 2012); their earlier analysis described elevated readings before the May 6, 2010 Flash Crash (Easley, López de Prado, and O’Hara, 2011). That is the motivation behind treating VPIN as a potential market-stress monitor, not proof that it reliably forecasts crashes.
Andersen and Bondarenko’s 2014 study reached a different conclusion in its reconstruction. They reported that VPIN was a poor short-horizon volatility predictor, did not reach its maximum until after the Flash Crash, and had predictive content that was largely tied to trading intensity. Their analysis tested specific trade-classification procedures and implementations; it does not establish that every version of VPIN in every market behaves identically (Andersen and Bondarenko, 2014).
Easley, López de Prado, and O’Hara replied in 2014. They disputed the replication and interpretation, arguing that the analysis did not test the methodology or conclusions they had advanced and that market microstructure mattered to the comparison (Easley, López de Prado, and O’Hara, 2014). The exchange is evidence of disagreement over implementation and empirical interpretation, not a consensus validation of VPIN as an early-warning signal.
In a later assessment, Andersen and Bondarenko used quote and trade data to benchmark trade classification for E-mini S&P 500 futures. They reported that their benchmark favored a tick rule over BVC and argued that volatility-related classification errors could account for VPIN’s apparent volatility prediction in their setting (Andersen and Bondarenko, 2015). Their finding is a serious measurement concern because VPIN depends on estimated buy and sell volume, but it remains an empirical result for specified data and procedures.
Ke and Lin’s 2017 paper develops an alternative VPIN formulation using maximum-likelihood estimation. They argue that the original metric can be unstable with small volume buckets and infrequent informed trades, and report more consistent estimates from their alternative method (Ke and Lin, 2017). This contribution shows that model construction matters; it does not settle whether a VPIN variant is a reliable real-time warning across assets, venues, or market regimes.
Taken together, the literature does not support a simple claim that VPIN either “predicted” or “failed to predict” every relevant episode. Researchers reached different results using different classification choices, data, implementations, and tests. The disagreement itself is a reason to report the construction and test incremental performance against simple activity and volatility benchmarks.
Bucket size, classification, and sampling can move the score
Bucket volume \(V\) determines how much trading is compressed into each observation. Smaller buckets generate more frequent updates but can make estimates more sensitive to individual bursts and classification noise. Larger buckets smooth local variation and reduce update frequency. The appropriate scale depends on the market’s typical activity and the question being studied; a value chosen after inspecting a crash can overstate apparent warning performance.
The rolling window \(n\) determines how much recent volume contributes. A shorter window responds quickly but can be noisy; a longer window is smoother and slower. Report both \(V\) and \(n\), along with the equivalent wall-clock duration distribution. Equal numbers of buckets do not correspond to equal elapsed time across calm and active periods.
BVC adds its own choices: time-bar length, trade or quote price input, volatility estimation window, treatment of zero price changes, and assumed distribution. If trade-level signs are used instead, classification errors from quote timing, midpoint comparisons, tick rules, or venue-specific message conventions can still matter. The 2015 study’s critique specifically links changes in volatility to systematic BVC classification errors in its tested setting. Book-based [order-flow imbalance](/en/learn/order-flow-imbalance-limit-order-book-explained) is a separate measure that tracks changes in displayed supply and demand rather than this trade-classified volume calculation.
Initialization also matters. A rolling VPIN window begins from some bucket boundary. Shifting the starting point can change which trades fall together and thus alter bucket imbalances. Tests should quantify this sensitivity rather than select the alignment that gives the strongest pre-event rise. Structural changes in trading hours, tick size, contract design, or venue mix can further reduce comparability over time.
Evaluate incremental evidence before assigning a warning role
A careful VPIN study should specify its data and algorithm before inspecting the target event. State the market and contract, session, trade and quote filters, price input, trade-side procedure or BVC settings, \(V\), \(n\), initialization rule, and treatment of partial or boundary-crossing buckets. Show how much wall-clock time each VPIN window covers under different activity levels.
For a predictive claim, use a chronological out-of-sample design and compare VPIN with readily observed baselines such as volume, trade intensity, realized volatility, and order imbalance. Check whether VPIN adds information once those quantities are included. Report false alarms, missed events, lead time, uncertainty, and results across thresholds—not only a retrospective chart where the indicator rose before one selected crash. A threshold selected on the event itself cannot demonstrate advance warning.
For a claim about flow toxicity, independently measure adverse selection or liquidity outcomes, such as subsequent price impact, spreads, depth, or realized market-maker losses, and explain how those outcomes are identified. A correlation between VPIN and volatility does not by itself validate the toxicity interpretation. A higher value can arise from more one-sided classified volume, greater volatility affecting BVC, or a faster volume clock.
Treat VPIN as a contested diagnostic, not a trading signal
VPIN can be useful as a descriptive summary when a researcher wants to track estimated absolute order-flow imbalance across equal-volume windows. It can also be a feature in a broader analysis if its construction is transparent and its contribution survives comparisons with simpler measures. Its interpretation is narrow: it summarizes a specific classification of recent volume.
A high score alone does not establish that informed traders are active, that a liquidity crisis is imminent, that prices will move in a particular direction, or that reducing or increasing a position is profitable. A low score does not certify a safe or liquid market. Any operational use would require independent validation, suitable controls, an explicit decision rule, latency-aware data, and realistic execution-cost analysis.
VPIN is best presented with its measurement assumptions and the contrary evidence alongside it. When readers see the volume clock, BVC or alternative classifier, rolling window, and out-of-sample benchmarks, they can judge what the statistic shows—and where the inference ends. The [Roll spread estimator](/en/learn/roll-bid-ask-spread-autocovariance-estimator-explained), by contrast, addresses a different question by inferring a spread proxy from return autocovariance.
Common questions
Q1Does a VPIN reading of 0.32 mean a 32% chance of informed trading—or mean I should stop trading?
No. The common score is a normalized average of estimated absolute volume imbalance, not a calibrated probability that a trade or trader is informed. It also gives no direction, proves no imminent liquidity crisis, and does not account for your execution costs or constraints. Any decision rule needs separate out-of-sample validation and risk controls.
Q2Does VPIN use equal time intervals?
No. Its rolling observations contain equal amounts of traded volume, so the wall-clock time covered by a bucket varies with market activity. BVC may first estimate signed volume in separate time bars.
Q3Did VPIN predict the May 6, 2010 Flash Crash?
The published evidence is contested. Easley, López de Prado, and O’Hara presented elevated readings as evidence of possible warning value; Andersen and Bondarenko reported that the metric’s peak came after the event in their reconstruction and questioned its predictive content. Their rejoinder and later assessments disagree over methods and interpretation.
Q4Can two VPIN charts for the same market be compared directly?
Only when the data, price inputs, trade classification, volume-bucket size, rolling window, initialization, and other construction choices are sufficiently aligned. Different settings can produce different scores and update speeds.
Sources and further reading
Report an issue
We’ll prepare an email with this article link. Mark receives the report only after you send it
Quick check
Read the guide? Check yourself with 3 questions
Question 01
What does VPIN average across its recent volume buckets?
Choose an answer to see the explanation