Trade-sign inference
∞structuralMost feeds don’t label who was the aggressor, so you infer it. The tick rule signs by price change; Lee–Ready (1991) compares the trade to the prevailing mid. Both are imperfect, and accuracy drops in fast markets.
See it move
?
?
?
?
?
?
?
?
?
?
?
?
?
?
What to notice. The raw tape doesn't tell you who was the aggressor. Lee–Ready compares each trade to the prevailing mid: above is buyer-initiated, below is seller-initiated. Run it and the unlabelled prints turn into signed flow you can actually model.
Why isn't the buy/sell side in the data?
A trade is a match between a resting order and an incoming one: the tape records the execution (price, size, time) but most public feeds do not label which side initiated, which one crossed the spread to take liquidity. When a trade prints, two orders met: one was resting (passive, the maker), one arrived and crossed (aggressive, the taker). The taker's direction is the "trade sign": a buy if the taker bought (lifted the ask), a sell if the taker sold (hit the bid). The information content is in the taker's choice to demand immediacy. Consolidated tapes and most historical equity data were built to report prices, not intent; the matching engine knows the aggressor but the public feed historically did not carry it. So the single most useful microstructure label is absent and must be reconstructed.
It matters because signed order flow is the input to nearly every order-flow signal: order-flow imbalance, PIN/VPIN toxicity, Kyle's lambda (price impact per unit signed volume), the spread decomposition. Get the sign wrong and every one of those is biased. The 2026 exception: many crypto venues and some modern feeds do publish the taker side per trade (where you have such a feed, you skip this problem) but historical data, consolidated tapes and many venues still do not, so inference remains a core skill.
What is the tick rule?
The tick rule classifies a trade by its price change: a trade printed above the previous trade is a buy (an uptick), below is a sell (a downtick), and on a flat price you carry the last non-zero sign forward (a zero-tick). Aggressive buyers push prices up and aggressive sellers push them down, so the direction of the last price change is a decent proxy for who is currently demanding liquidity. It is crude (it can only react after a price change, classifying the current trade using a past price move) but it works because flow is persistent, and it needs only the trade tape, no quotes, which is why it is the universal fallback.
Its weaknesses are the flip side: it lags, and it struggles in fast markets and at the open. Accuracy on liquid US equities is typically reported around 85% against the true side. Select only the tick rule in the explorer above and watch an uptick classify as a buy and a zero-tick inherit the prior sign.
What is the quote rule, and what is Lee–Ready (1991)?
The quote rule compares the trade price to the prevailing mid: above the mid is a buy, below is a sell. A trade printed near the ask was probably a buyer lifting the offer; near the bid, a seller hitting it. Comparing the trade to the contemporaneous mid is more direct than the tick rule because it uses the quote, not just the price history. The catch is the ambiguity at : a mid-print has no side to read. Lee–Ready (1991) resolves it: apply the quote rule when the trade is away from the mid, and fall back to the tick rule for mid-prints. It is the standard equities trade-sign classifier.
Lee and Ready also specified a trade-quote timing alignment, historically lagging the quote by about 5 seconds to match the trade to the quote in force before it printed, because of reporting delays (a caveat the failure-modes section revisits). The EMO variant (Ellis–Michaely–O'Hara 2000) uses the quote rule only for trades at the bid or ask, and the tick rule for everything in between, a different split that does better on some venues. Lee–Ready is the equities benchmark, typically about 85% accurate overall, better on trades away from the mid, worse on mid-prints and in fast markets. The classifier selector above (tick · quote · Lee–Ready · EMO) compares them on the current regime.
Where do these rules fail?
Trade-sign rules fail on four fronts. On mid-prints, a trade exactly at the mid has no quote-side signal, so the rule falls back to the tick rule (the weakest case) and midpoint-peg and dark executions concentrate exactly here, making venues with lots of mid liquidity the hardest. On trade-quote timing, the rule compares the trade to the prevailing quote, but which quote was in force when the trade actually executed? Reporting delays meant Lee–Ready lagged the quote by seconds in 1991-era data; on modern microsecond data the right offset is near-zero or even negative, and using the stale 5-second rule degrades accuracy. Holden–Jacobsen (2014) documented this and the resulting biases in modern equity data, so use the venue's own timestamps and test the alignment. In fast markets and bursts, quotes flicker faster than trades report, the "prevailing" quote is ambiguous, and accuracy drops in exactly the high-activity bursts (irregular time) where signed flow matters most. And non-standard executions (auctions, hidden/midpoint orders, odd lots) break the assumptions outright.
The honest framing: no rule is exact. Treat trade-sign as a noisy label with a known, regime-dependent error rate, and propagate that uncertainty into anything you build on it; do not pretend the inferred sign is ground truth. Switch the explorer above to the "lots of mid-prints (hard)" preset and accuracy visibly drops as the confusion matrix fills its off-diagonal.
Bulk-volume classification, and why the error propagates
Bulk-volume classification (BVC, Easley–López de Prado–O'Hara) abandons per-trade signing. Instead of labelling each trade, it works on volume bars (business time): the share of a bar's volume treated as buys is the standard-normal CDF of the bar's standardised price change, . It trades per-trade precision for a smoother, aggregate buy/sell split that is robust in fast markets, and it is exactly what VPIN consumes.
The real point of this page is propagation. Every signed-flow construct inherits the sign error: order-flow imbalance sums signed volume; VPIN measures the imbalance between buy and sell volume; Kyle's lambda regresses price change on signed volume. A few percent of mislabelled trades biases all of them, and the bias is worst in toxic, fast regimes, which is precisely when those signals are supposed to be most informative. The discipline: when you report an OFI or a VPIN, know which classifier produced its signs and what its error rate is on your regime. The signal is only as clean as the labels under it. This is the maker/taker match of the limit order book seen from the data side, and where signed flow becomes a quoting edge, in order-flow / information-based market making.
Worked example
A synthetic tape with known true signs, as of 2026; reproduce it in the explorer above. Generate an efficient price plus bid-ask bounce, mark each trade as taker-buy or taker-sell (ground truth known), set a controllable share of mid-prints (say 15%) and a tunable spread. Now run each classifier against the truth. The tick rule lands at about 85%, errors concentrating where the price did not change (zero-ticks inheriting a stale sign) and right after the mid reverses. The quote rule reaches about 88% on trades away from the mid, but cannot classify the 15% mid-prints at all. Lee–Ready (quote rule plus tick-rule fallback on mid-prints) comes out about 87% overall, beating the pure tick rule by recovering the away-from-mid trades while still handling mid-prints, just less well.
Then make it hard: raise mid-prints to 40% and add fast-market quote flicker. Every classifier's accuracy falls (Lee–Ready toward about 78%) and the confusion matrix's off-diagonal fills, exactly the regime where you most wanted clean signs.
The downstream cost is the lesson: the inferred sign is a noisy label, and the noise does not vanish when you aggregate. It propagates into every signal built on signed flow, worst in exactly the toxic, fast regimes those signals exist to catch. Reverify accuracy figures against real, side-flagged data before relying on them; these synthetic figures exist to make the mechanism legible. The explorer lets you set the spread, the mid-print frequency and the toxicity, switch classifiers, and read the exact accuracy and confusion matrix against ground truth. Trade-sign inference is the fourth of these statistical traps, after bid-ask bounce, fat tails and irregular time; side-flagged trade data with a reference classifier benchmarked against ground truth is exactly what this page implies (datasets and tools).