Skip to content

Tick and quote trade-classification rules

Compare transaction prices with earlier trades or a quote midpoint, handle zero ticks and midpoint ties, and separate estimated signs from exchange aggressor labels.

Tick and quote trade-classification rules estimate whether the buyer or seller initiated a transaction by comparing its price with earlier trades or an aligned bid–ask quote. The resulting trade sign feeds signed order flow; a classification error changes that input before any forecasting model sees it. Every transaction still has both a buyer and a seller.

Two reference prices, two questions

Let pip_i be the transaction price. Use +1+1 for an estimated buyer-initiated trade and −1-1 for an estimated seller-initiated trade. An unknown result is missing information, not a third economic direction.

The quote rule compares pip_i with the midpoint mi=(bi+ai)/2m_i=(b_i+a_i)/2 of an eligible bid–ask spread: above means buy, below means sell, and equality is unassigned by the quote rule alone. It therefore signs inside-spread trades away from the midpoint, not just trades at the bid or ask.
The tick rule compares pip_i with the most recent earlier eligible transaction at a different price. A higher price means buy; a lower price means sell. This looks through unchanged-price runs: a zero-uptick carries the last upward price change, and a zero-downtick carries the last downward change. Without enough history to establish that direction, leave the tick result unknown. The price-history convention is set out in Chakrabarty and coauthors’ trade-classification section.
“Carry the direction” means the last nonzero transaction-price change, not the last output of a combined classifier. For example, with bid 100.00 and ask 100.04, a trade at 100.03 following a different price of 100.04 is a quote-rule buy but a tick-rule sell. Storing only the quote-rule buy would corrupt subsequent zero-tick logic.

A midpoint tie that can be signed

Consider fictional prices in USD per share, using a valid quote of 100.00 / 100.04. Its midpoint is 100.02.
Transaction priceQuote-rule resultReason
100.03Buy, +1+1Above 100.02
100.01Sell, −1-1Below 100.02
100.02UnassignedEquals 100.02
For that last case, suppose the most recent earlier different transaction price was 100.01. The tick comparison is upward, so a quote-then-tick combination assigns buy. If another transaction follows at 100.02, it remains a zero-uptick and receives the same tick estimate. If the available history instead starts with repeated 100.02 prices, no earlier different price establishes a direction: the fallback stays unknown.
Fictional USD per share quote: bid 100.00, ask 100.04, midpoint 100.02. Quote signing labels 100.01 sell and 100.03 buy, with a tie at 100.02. Tick history 100.01, 100.02, 100.02 yields unknown, buy, buy.
Fictional USD per share quote: bid 100.00, ask 100.04, midpoint 100.02. Quote signing labels 100.01 sell and 100.03 buy, with a tie at 100.02. Tick history 100.01, 100.02, 100.02 yields unknown, buy, buy.
Original fictional comparison. Quote signing locates a trade within a spread; tick signing follows transaction-price changes, including a known direction through repeated prices.
The Lee–Ready algorithm combines these ingredients: quote signing away from midpoint equality, then tick signing at the midpoint; its original Table IV also uses ticks when eligible quotes are unavailable. A missing-quote fallback and a midpoint fallback should have separate reason codes, even when they produce the same sign.

Decide whether the comparison is meaningful first

For the examples here, an eligible quote is a current, correctly scoped, two-sided quote with bi<aib_i<a_i, aligned to an eligible continuous-market transaction. The following are explicit conservative implementation choices, not extra information inferred from the price:

Data conditionTreatment in this implementation
Locked quote, bi=aib_i=a_i, or crossed quote, bi>aib_i>a_iReject the quote comparison; retain the reason
Quote missing or beyond the declared age limitNo quote sign; use a separately identified tick-only estimate only if trade history is valid
Feed sequence gap or uncertain trade orderingSuspend affected history-dependent signing until state is recovered or deliberately reset
Late print, auction, cancellation, correction or special-condition tradeApply the record’s documented semantics before inclusion; do not append it blindly to tick history
Price outside the matched bid–ask intervalFlag for investigation and leave the combined result unknown here

The last choice is stricter than simply applying a midpoint inequality to every price. Keep it visible when comparing implementations. A trade rejected for an unreliable quote can still have an independently valid tick estimate; a trade rejected because its own sequence or conditions are unsuitable should not seed that tick history.

State the quote venue or consolidation scope, event-time versus receipt-time basis, ordering for equal timestamps, maximum age, and any alignment offset. A quote after execution can misrepresent the pretrade market. A quote received after a live decision cannot be used as if it had already arrived. There is no universal staleness threshold in these rules.

Lee and Ready used a five-second quote lag for their 1988 data; footnote 10 explicitly allows different delays in other periods. It is a historical reporting adjustment, not a universal fix for modern feeds. Original paper, §II and footnote 10.

Nearby methods and actual exchange labels

The Ellis–Michaely–O’Hara rule uses exact ask/bid matches first and ticks for inside-spread trades in the implementation evaluated by Chakrabarty and coauthors, §§4.1–4.2. An inside trade at 100.01 after a different price of 100.00 is therefore an EMO buy but a midpoint-rule sell. Replacing exact touch tests with “at or beyond” inequalities changes that implementation.
Boehmer–Jones–Zhang–Zhang retail classification has another purpose: it identifies and signs a proxy for marketable retail activity from particular off-exchange U.S. equity trades and subpenny price improvement. It is not a general quote/tick replacement or proof of a participant’s identity. BJZZ (2021), pp.2254–2255.
When reliable exchange labels exist, retain them separately from estimates. For example, CME’s current Trade Summary specification defines AggressorSide (5797) as 1 = buy, 2 = sell, 0 = no aggressor. Its zero cases include market opening or reopening and specified implied-order events. Zero is not a sell and should not be overwritten as an observed buy merely because a tick test says buy. CME Group field specification, checked 31 October 2026.

For research, save the inferred sign, method, branch, quote identifier and quality flags alongside any observed aggressor field. Compare disagreement and unclassified rates by market state; high accuracy on the easiest retained trades can hide poor coverage elsewhere.

Order Flow and Adverse Selection develops signed-volume features and their interpretation limits. Trades, Quotes and Market State develops the event and receipt-time distinction behind a defensible quote match. Both links open public previews; full lessons require membership.

Sources

Last updated
  • market microstructure
  • trade classification
  • tick rule
  • quote rule
  • trade sign
← Back to the glossaryBack to top ↑