Skip to content
All option guides
Market microstructure10 min read

Trade Direction Classification: Tick Test, Quote Rule, and Lee–Ready

Learn how tick tests, quote rules, and the Lee–Ready algorithm infer buyer- or seller-initiated trades, why their labels can disagree, and how timestamps affect the result.

In this guideA trade-side label names the liquidity taker

Short summary

A time-and-sales print records a completed trade, but it may not say which side crossed the spread. The quote rule, tick test, and Lee–Ready algorithm infer whether the buyer or seller initiated the trade. These are estimates of the liquidity-taking side, not labels of who owns the asset or guarantees about the next price move.

A trade-side label names the liquidity taker

Every execution has both a buyer and a seller. In trade classification, a “buyer-initiated” print means a buyer sent the order that took available liquidity, usually by trading at the offer. A “seller-initiated” print means a seller took available liquidity, usually by trading at the bid. The label describes how the match happened; it does not mean that only one side bought or sold.

Many time-and-sales feeds show a price and quantity without an aggressor-side field. Researchers and data vendors then infer a sign from the price path or from the quote that was available around the trade. This inferred sign is often represented as +1 for buyer-initiated and −1 for seller-initiated, but the underlying message can remain ambiguous. When a data source supplies a venue-defined aggressor field, its code and no-aggressor cases still need to be read in that feed’s specification.

Trade direction is useful when estimating signed volume, effective spreads, order imbalance, or short-run price formation. It answers a different question from order flow imbalance (OFI), which also counts additions, cancellations, and quote-price changes. The order-book and time-and-sales guide explains why the two records contain different events.

The tick test infers a side from consecutive trade prices

The tick test compares a trade price with the preceding trade price. If the current print is higher, it is an uptick and is classified as buyer-initiated. If it is lower, it is a downtick and is classified as seller-initiated. When the price is unchanged, the zero-tick rule carries forward the direction of the most recent nonzero price change: a zero tick after an uptick keeps a buy sign, while a zero tick after a downtick keeps a sell sign.

For example, prints at $40.00, $40.02, $40.02, and $40.01 receive signs of unknown, buy, buy, and sell under this rule. The second print rises; the third inherits the last nonzero uptick; and the fourth falls. If there is no previous nonzero price change, a zero tick has no direction from the tick test alone. It is better to leave that trade unclassified than to invent a sign.

The tick test can be applied when quote data are unavailable, but it does not inspect the prevailing bid and ask. A price can rise because the quote moved, not because the current trade was buyer-initiated. Trades reported out of sequence, opening prints, corrections, and special-condition trades also need feed-specific handling. The original Lee and Ready paper reviews these tick tests and explains their limits alongside quote-based methods (Lee and Ready, 1991).

The quote rule compares the print with the prevailing midpoint

Let the best bid be b and the best ask be a. When the quote is valid and uncrossed, its midpoint is m = (a + b) / 2. A simple quote rule classifies a trade above m as buyer-initiated and a trade below m as seller-initiated. A trade exactly at the midpoint has no sign from this comparison alone. Some implementations leave it unclassified; others use the tick test as a fallback.

Suppose the best bid is $100.00 and the best ask is $100.04. The midpoint is $100.02. A print at $100.03 is on the buyer side of the midpoint, while a print at $100.01 is on the seller side. A trade at $100.02 is tied and needs an explicit tie rule. The quote rule compares a transaction with a quoted price, not with the previous transaction.

This comparison is only meaningful if the quote is the one that applied when the trade occurred. A stale quote can place a print on the wrong side of the midpoint. A crossed or locked market, missing quote, multiple venues, or a trade inside the spread can also make the label uncertain. Classifying an inside-spread print by whichever quote it is closer to is a heuristic; it is not an observed aggressor flag.

Lee–Ready combines quote location, a tie-breaker, and quote timing

The Lee–Ready procedure compares a trade with a prevailing quote and uses price information to handle cases the quote comparison does not resolve. Trades at or above the ask are treated as buyer-initiated and trades at or below the bid as seller-initiated. For a trade inside the spread but not at its midpoint, the original method assigns the side of the nearer quote. At the midpoint it applies the tick test; if that test also has no prior direction, the observation can remain unclassified.

The method also addressed a historical sequencing problem. In the 1988 NYSE data studied by Lee and Ready, quote revisions triggered by a trade could be entered before the trade appeared in the recorded sequence. Their 1991 procedure used the most recent quote at least five seconds before a trade when the current quote was too recent. That adjustment was calibrated to the reporting process in that sample. Five seconds is not a general-purpose correction for modern feeds, and blindly applying it can create a new timing error.

In current research, the core decision rule and the quote-matching rule should be documented separately. Quote and trade timestamps may come from different clocks or from a consolidated feed with different reporting paths. Select a quote using a defensible event-time convention, avoid using a quote that was only observable after the print, and report how much data is left unmatched or unclassified.

A small example shows why methods can disagree

Keep the quote fixed at a $100.00 bid and $100.04 ask, so the midpoint is $100.02. Assume the last trade was $100.00. A new print at $100.01 is an uptick, so the tick test labels it buyer-initiated. The same print is below the midpoint, so the quote rule and Lee–Ready label it seller-initiated. The methods disagree because one follows the last transaction and the other follows the current quote.

If the next print is $100.02, it lies at the midpoint. The quote rule alone does not decide its side. The last nonzero price change was upward, so the tick-test fallback used by Lee–Ready labels it buyer-initiated. A print at $100.04, exactly at the ask under the same stable quote, is buyer-initiated under the quote comparison. These are hypothetical classifications, not a claim about actual market prints.

Now assign quantities of 4, 3, and 2 shares to those three prints in the same order. Under the Lee–Ready signs, signed volume is −4 + 3 + 2 = +1 share. Under the tick test alone, it is +4 + 3 + 2 = +9 shares. A method choice has changed the aggregate by eight shares without changing any trade price or quantity. If some trades remain unknown, report that coverage and your treatment of unknown volume rather than silently calling it zero.

Text-free conceptual diagram of bid and ask quotes, their midpoint, trade markers, and a timing comparison between a trade and an earlier quote update.
This conceptual illustration is not observed market data and does not guarantee the initiating side or a future price direction.

Accuracy studies show why the labels need context

Lee and Ready examined 1988 trades for 150 NYSE firms and documented two difficulties: quote updates could be recorded ahead of the triggering trade, and many prices fell inside the quoted spread. Their five-second adjustment and tick-test fallback addressed those issues in the historical setting they studied; the paper itself cautions that the effects of classification errors depend on the research application.

Ellis, Michaely, and O’Hara compared classification rules with a proprietary Nasdaq dataset that included trade-direction labels. In their sample, the quote rule correctly classified 76.4% of trades, the tick rule 77.66%, and Lee–Ready 81.05%. They also found that all of the rules had limited success for trades executed inside quotes and that errors could affect estimates for large trades, high-volume periods, and ECN trades (their 2000 study). Those percentages describe that dataset and market design; they are not a current accuracy guarantee.

Jurkatis’s 2022 full-information method took a different approach: it searched for the quote corresponding to a trade rather than applying a fixed ad hoc quote assignment. In the study, its improvement over common alternatives was largest when timestamps had only second-level precision; the paper reports about half as many misclassifications as Lee–Ready in that condition (Jurkatis, 2022). That result depends on the data and algorithm evaluated. It is not evidence that one classifier is best for every venue, instrument, or research question.

Feed definitions and time alignment determine what can be inferred

Before classifying trades, identify whether the feed reports exchange time, participant time, or a consolidated timestamp; its precision; its correction and sequence rules; and whether quote and trade messages share the same clock. Preserve the original sequence before sorting or joining records. If timestamps can tie, use the feed’s sequence numbers where available. Do not select the next quote simply because its timestamp is nearest if it may have followed the trade.

A market-data feed may supply an aggressor-side field directly. CME’s MDP 3.0 Trade Summary documentation describes an AggressorSide field and includes events with no defined aggressor; the enum must be interpreted for the relevant feed and product (CME MDP 3.0 Trade Summary). Nasdaq TotalView-ITCH instead documents order-level add and execution messages, including the resting order reference and execution quantity; it does not make every printed trade a venue-independent buy/sell label (Nasdaq ITCH 5.0 specification). Exchange-specific fields should not be copied to a different market without checking its own rules.

Specify how you handle auctions, crosses, off-exchange prints, corrections, trade breaks, odd lots, locked or crossed quotes, and prices outside the best quotes. A single global label may be inappropriate if these events have different reporting and matching rules. When ground truth exists, validate classifications on the same instrument, venue, period, and event types used in the analysis.

Validate the classifier on your actual feed and use case

A reproducible check starts with the feed specification and a small set of raw messages around known executions. Rebuild the quote using sequence and event-time rules, then keep each classifier’s output and an explicit unknown value. Compare methods on the same sample and report both the disagreement rate and the classified-volume share. If a feed’s aggressor flag or order-level messages provide a reference label, compare against it separately for at-quote, inside-spread, outside-quote, auction, and low-timestamp-precision trades. This reveals whether overall accuracy hides a weak subgroup. Finally, rerun the signed-volume or effective-spread result with reasonable alternative classifiers to measure sensitivity.

Trade classification is most useful when it is treated as a reproducible data decision. State the rule, the quote-selection convention, the unclassified cases, and the validation evidence. If the result changes materially across reasonable classification methods, that sensitivity is part of the finding.

Signed volume is a measurement, not a trading conclusion

For a set of prints i, one common signed-volume statistic is the sum of sᵢvᵢ, where vᵢ is the traded quantity and sᵢ is +1 for a buyer-initiated print or −1 for a seller-initiated print. Its value depends on the classification method, volume unit, sampling window, venue coverage, and handling of unknown trades. A report should name these choices and, when useful, show the fraction of volume that received a sign.

A positive total does not prove that buyers outnumbered sellers in an economic sense: each transaction still has both sides. It summarizes estimated liquidity-taking direction under a stated rule. Nor does positive signed volume prove informed buying, predict a price increase, or mean that a strategy can obtain a fill at the quoted midpoint. Compare the measure against a clearly specified benchmark and include spread, fees, queue position, latency, and market impact when studying execution costs. Implementation shortfall measures realized decision-to-execution costs from a different angle.

Common questions

Q1Is every trade either buyer-initiated or seller-initiated?

An execution always has a buyer and a seller, but the observed feed may not reveal which side initiated the match. A classification rule can leave some prints unresolved, and exchange feeds can contain events with no aggressor.

Q2Does the Lee–Ready algorithm always use a quote from five seconds earlier?

No. That adjustment addressed quote-entry timing in the 1988 NYSE data studied by Lee and Ready. A researcher should align quotes and trades using the timing, sequence, and precision rules of the current feed rather than copy a fixed delay.

Q3Can signed trade volume predict the next price?

It can be studied as an explanatory or forecasting input, but its sign is estimated and depends on the classifier. A positive total does not guarantee a higher price or profitable execution after costs.

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 1 / 3

Question 01

A print is unchanged from the prior trade, and the last nonzero price change was downward. What does the tick test assign?

Choose an answer to see the explanation

Options glossary