Trading strategies·mm-information

PIN / VPIN

still alpha
Reviewed 4 June 2026. As of 2026: a real edge still exists for those who can run it well.

The 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

VPIN flow toxicityliveIX-VPIN
VPIN0.000
Verdictbenign
Flow one-sidedness30%

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 μ\mu 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.

PIN is the informed arrival rate as a fraction of total arrivals, the unconditional probability that a trade is informed.
PIN=αμαμ+2ε\text{PIN} = \frac{\alpha\mu}{\alpha\mu + 2\varepsilon}

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 α\alpha; given an event, the news is bad with probability δ\delta and good with 1δ1-\delta. Uninformed buys and sells arrive as Poisson processes with rate ε\varepsilon each.

On event days, informed traders add Poisson arrivals at rate μ\mu on the correct side. The day's buy count BB and sell count SS then follow a mixture of Poissons over the three states (no event, good news, bad news):

L(B,S)=(1α)P0+αδP+α(1δ)P+\mathcal{L}(B, S) = (1-\alpha)\,P_0 + \alpha\delta\,P_{-} + \alpha(1-\delta)\,P_{+}

The parameters (α,δ,ε,μ)(\alpha, \delta, \varepsilon, \mu) are fitted by MLE across many days. The toxicity number is then the informed rate over the total rate:

PIN=αμαμ+2ε\text{PIN} = \frac{\alpha\mu}{\alpha\mu + 2\varepsilon}

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.

Average one-sidedness over a rolling window of equal-volume buckets: how far from balanced, on average, the recent flow has been.
VPIN=1nk=1nVkbuyVksellV\text{VPIN} = \frac{1}{n}\sum_{k=1}^{n} \frac{\left| V_k^{\text{buy}} - V_k^{\text{sell}} \right|}{V}

Each of the nn buckets holds the same volume VV, 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 VV, the window length nn, 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 concept (flow toxicity, measured on a volume clock) is sound and structural; VPIN the specific estimator is contested and parameter-sensitive. The number you read depends on the choices you make.
VPIN=VPIN(V,n,classification)    level and lead time both shift with the parameters\text{VPIN} = \text{VPIN}(V, n, \text{classification}) \;\longrightarrow\; \text{level and lead time both shift with the parameters}

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 V=10,000V = 10{,}000 lots and the rolling window is n=50n = 50 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 600/10,000=0.06600/10{,}000 = 0.06. Averaged over 50 such buckets, VPIN sits near a low, benign 0.06.

Balanced buckets give a low VPIN; one-sided toxic buckets push it far above the threshold line, and the climb happens while the price panel is still flat.
5,3004,70010,000=0.068,5001,50010,000=0.70\frac{|5{,}300 - 4{,}700|}{10{,}000} = 0.06 \quad\longrightarrow\quad \frac{|8{,}500 - 1{,}500|}{10{,}000} = 0.70

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 V=5,000V = 5{,}000 and lengthen the window to n=100n = 100. 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.

Where this fits