PIN / VPIN
◆still alphaThe probability of informed trading (Easley–O’Hara) and its volume-bucketed cousin VPIN: the gauge that tells a market maker when flow has turned toxic, and to widen or pull.
See it move
What to notice. Push the flow one-sided and VPIN climbs past the dashed line, the gauge a market maker watches to decide when to widen quotes or pull them entirely. Toxic flow is informed flow arriving all at once.
What is PIN, the probability of informed trading?
PIN is the Easley–O'Hara estimate of the probability that a given trade comes from an informed trader. It models daily order flow as a mix of uninformed buys and sells plus, on "information days", a one-sided burst of informed trades, then infers from the buy/sell counts how toxic the flow has been. A higher PIN means more adverse selection.
The intuition: on a normal day, buys and sells arrive at roughly balanced background rates from uninformed traders. On a day when someone knows something, a burst of one-sided informed orders is added on top: lots of buys on good news, lots of sells on bad. PIN works backwards from the imbalance in the day's trade counts to estimate how often such information events occur and how big the informed burst is.
This is the structural sibling of adverse selection: the informed fraction that sets the Glosten–Milgrom spread is PIN. Where the GM model uses it to price one trade, PIN estimates it empirically from a window of trades, giving a market maker a number for how toxic a name's flow has been.
The weakness is practical: classic PIN is estimated by maximum likelihood over a sequence of trading days, so it is slow (a daily-frequency number) and numerically fiddly, because the likelihood is ill-conditioned for active stocks. It tells you a stock has been toxic over recent weeks; it cannot warn you that the next ten minutes are turning toxic. That latency gap is exactly what VPIN was built to close.
▸ Show the PIN model optional
In the Easley, Kiefer, O'Hara & Paperman (EKOP/PIN) model, each day an information event occurs with probability ; given an event, the news is bad with probability and good with . Uninformed buys and sells arrive as Poisson processes with rate each.
On event days, informed traders add Poisson arrivals at rate on the correct side. The day's buy count and sell count then follow a mixture of Poissons over the three states (no event, good news, bad news):
The parameters are fitted by MLE across many days. The toxicity number is then the informed rate over the total rate:
The estimator's instability for high-activity names (the likelihood becomes flat and ill-conditioned) is what motivated the volume-clocked reformulation below.
What is VPIN, and why a volume clock?
VPIN (Easley, López de Prado & O'Hara 2012) is a high-frequency toxicity proxy. It groups trades into equal-volume buckets, classifies each bucket's volume into buy and sell parts, and averages the absolute imbalance over a rolling window of buckets. The volume clock makes it react faster exactly when trading is heavy, which is when toxicity matters. The one-line gloss: chop the tape into equal lumps of volume, ask how lopsided each lump was, and average the lopsidedness.
Each of the buckets holds the same volume , split into buy and sell parts by bulk-volume classification: the fraction of a bucket's volume tagged as buys is the normal-CDF of the bucket's price change scaled by volatility, rather than signing each trade individually.
Why a volume clock instead of a wall clock. Information and toxicity arrive with volume, not with the calendar. In a busy minute a stock might trade as much as in a quiet hour; a time-clock samples both the same, smearing the busy, toxic period. VPIN's volume clock fills buckets faster when it is busy, so it takes more, finer readings exactly during the high-volume episodes where adverse selection spikes. This is the same "trade in event time, not calendar time" principle as irregular-time / ACD models.
Bulk classification, not trade-by-trade signing. Rather than apply the tick rule / Lee–Ready to every print, VPIN splits each bucket's volume probabilistically from its price change. This is faster and more robust to individual misclassification, but it is also an approximation whose behaviour is part of why VPIN's results are contested below. VPIN updates every bucket, intraday, which is its whole reason to exist over PIN: a market maker can in principle watch VPIN climb and widen or pull quotes before a toxic episode resolves against it.
VPIN and the 2010 Flash Crash
The headline claim for VPIN is that it rose to extreme levels in the hour before the 6 May 2010 Flash Crash (when US equity indices fell roughly 9% and recovered within minutes), flagging the toxic, one-sided flow that preceded the liquidity collapse. The episode is VPIN's signature case study and the reason it draws attention as a toxicity early-warning indicator.
The mechanism the authors propose: when flow becomes severely one-sided and toxic, market makers face mounting adverse selection, widen and then withdraw, depth evaporates, and a feedback loop of withdrawn liquidity and falling prices can trigger a dislocation. VPIN, by measuring exactly that one-sidedness on a volume clock, claims to capture the build-up before the price break, which the interactive's "inject toxic event" preset reproduces: the VPIN curve climbs while the price panel below is still calm, then the break follows.
The Flash Crash itself is well-documented: the CFTC–SEC joint report (2010) attributes the trigger to a large automated sell programme executed without regard to price into thinning liquidity. VPIN's contribution is the narrower claim that flow toxicity was measurably elevated beforehand. This connects to adverse selection and the maker's survival problem: a flash event is adverse selection at the level of the whole market, where everyone's flow turns toxic at once, makers pull, and the book collapses. Whether VPIN reliably predicts this, versus merely describing it as it happens, is exactly the crux of the next section.
Is VPIN actually predictive? The honest answer
It is genuinely disputed. Easley, López de Prado & O'Hara present VPIN as predicting toxicity-driven dislocations; subsequent work, notably Andersen & Bondarenko (2014), argues the predictive result is largely mechanical, dependent on the bucketing and bulk-classification choices, and weak out-of-sample. The honest position in 2026: VPIN is a reasonable toxicity descriptor, not a proven early-warning oracle.
The critiques, fairly stated. First, mechanical artefacts: VPIN's level is sensitive to the bucket size , the window length , and the bulk-classification smoothing, and much of its apparent "predictive" behaviour can be an artefact of these choices and of volatility (VPIN and realised volatility are mechanically linked) rather than independent information about future toxicity. Second, in-sample versus out-of-sample: some of the strongest "VPIN predicts crashes" evidence is in-sample on a small number of events, and out-of-sample the predictive edge is much weaker or absent, a familiar backtesting caution about small event counts and hindsight-chosen parameters. Third, description versus prediction: even where VPIN rises before a dislocation, it may be co-moving with the toxicity rather than forecasting it with usable lead time. By the time VPIN is extreme, a maker may already be in trouble.
The defence, also fairly stated: VPIN is cheap, model-light, and directionally sensible. A volume-clocked one-sidedness measure should be elevated in toxic regimes, and as one input among several it adds information. Few practitioners trade VPIN alone; many include a toxicity feature in this spirit.
The 2026 takeaway, honest and unsold: use VPIN as one gauge, validate it out-of-sample on your own data and venue, and never treat a rising VPIN as a guarantee. This is the brand's posture: name the result, cite the critique, do not oversell the edge. For the broader honesty stance see is HFT still profitable.
Worked example
Take a synthetic VPIN reading across a calm-then-toxic session, as of 2026. Reproduce it in the interactive above. The volume-bucket size is lots and the rolling window is buckets, with each bucket split into buy/sell volume by bulk classification from its price change.
In the calm regime the buckets are roughly balanced: a typical bucket is 5,300 buy / 4,700 sell, so its one-sidedness is . Averaged over 50 such buckets, VPIN sits near a low, benign 0.06.
Now press "inject toxic event": informed flow turns one-sided and buckets shift to about 8,500 buy / 1,500 sell, a one-sidedness of 0.70. As these toxic buckets enter the rolling window, VPIN climbs from 0.06 toward 0.50 and above, well past the threshold, while the price panel below is still roughly flat. Only after VPIN is elevated does the synthetic price dislocate, as the model's makers widen and withdraw. The lead between VPIN crossing the threshold and the price break is the early-warning claim.
The honesty experiment. Halve the bucket size to and lengthen the window to . The same underlying tape now produces a different VPIN level and a different apparent lead time: visible proof that VPIN's reading is parameter-dependent, exactly the Andersen–Bondarenko critique. The toxic episode is real in the data; the number you read off it is a modelling choice.
The numbers here are synthetic and rounded; VPIN levels, thresholds and any lead time are entirely sensitive to bucket size, window length and classification choices, and must be validated out-of-sample per instrument and dated. The toxicity concept is robust; VPIN's predictive edge is unsettled, and this page says so deliberately. For the short-horizon price signal that VPIN is often confused with, see order-flow imbalance: OFI predicts the next move on a time clock, while VPIN gauges flow toxicity on a volume clock. They are two different questions.