Search This Blog
A practical journal on algorithmic trading, market analysis, and building automated systems. Written by an independent developer and active trader.
Featured
- Get link
- X
- Other Apps
An Odd Lot Prints, Adds to Volume, and Never Sets the Last Sale
Two data vendors can show a different daily high for the same stock on the same day, and both can be right. The tape they read is identical. What differs is which prints each one allowed to touch the high.
This is not a rounding artifact or a feed delay. It is written into the plan specifications that govern the consolidated tape. Every trade message carries a sale condition modifier, and that modifier decides separately, field by field, whether the print may move the high and low, whether it may become the last sale, and whether it counts toward volume. A print can qualify for one and be barred from the rest.
The most common case is the odd lot. It has been on the public tape since December 2013. It has never once set a last sale price.
One Message, Three Separate Ledgers
The intuition that causes the error is that a trade is a trade. Something printed at 47.20, so 47.20 is now the last price, and if it is above the previous high then it is the new high, and the shares add to volume. Three consequences, one event.
The plan specifications do not work that way. The UTP Data Feed Services Specification (Version 4.1, September 2026) lays out the sale condition table as a grid with five separate columns, not one verdict. Two of those columns belong to a group headed Consolidated Processing Guidelines — update high/low, and update last. Three belong to a group headed Market Center Processing Guidelines — update high/low, update last, and update volume.
So each trade gets five independent yes-or-no answers. The consolidated high can move while the consolidated last stays put, market center statistics can diverge from consolidated ones, and volume is its own column answering to nobody else.
Reading the rows this way makes the pattern obvious. Three of the conditions a retail trader is most likely to meet — odd lot, Form T, and average price — return No, No, No, No, Yes. They are volume and nothing else.
The Modifier Has Four Levels, and Any One of Them Can Veto
The modifier is not a single character. Appendix A of the Nasdaq PSX Last Sale specification sets it out in four levels: Level 1 is settlement type, Level 2 is trade-through and cross transactions, Level 3 is extended hours and sold codes, Level 4 is special conditions. The governing sentence is short and absolute: "A trade should only be applied to the high, low, lastsale, and volume calculations if all four sales condition modifiers so allow."
The UTP specification states the same logic from the other direction: "For statistical update of the High/Low/Last, if there are multiple sale conditions within the trade record, a 'no' update for any one of the statistics will take precedence for that related statistical record and no update will occur for the related value."
This is a veto structure, not a vote. A Level 1 regular settlement flag carries the qualifier "Yes, if other levels do not overrule" — it permits, it does not guarantee. Put an odd lot code in Level 4 and the permission at Level 1 is irrelevant.
Odd Lots: On the Tape Since 2013, Never on the Last Sale
Before December 2013 an odd lot execution was not reported to the consolidated tape at all. The change was filed with the SEC and the rationale is stated plainly in Release No. 34-70428 (File No. SR-CTA-2013-05, September 17, 2013). The amendment would "add odd-lot transactions to the consolidated tape by removing them from Section VI(d)'s list", and the treatment was split from the start: "odd-lot transactions would not be included in calculations of last sale prices" while "odd-lot transactions would be included in calculations of daily consolidated volume".
Note the dates carefully, because they differ by source and it is worth keeping them separate. The CTA release says the participants "intend to add odd-lot transactions to the consolidated tape under the CTA Plan commencing October 21, 2013". Nasdaq's Equity Technical Update 2013-33 gives the date that actually took effect: Monday, December 9, 2013. That notice also pins the code and the scope — "The Odd Trade value 'I' will appear in Level 4 of the extended sale condition modifier field", and "Odd Lot Trade transactions will be included in volume statistical calculations only."
One more line from the same notice matters for anyone running a volatility or halt filter: "Odd lots will not update the Limit Up / Limit Down (LULD) references prices." An odd lot cannot drag a price band, no matter where it prints.
Two other conditions behave the same way and are easy to forget. Form T (code T) marks a trade executed outside regular hours: no consolidated high/low, no consolidated last, volume only. Average price trade (code W) marks the single wrap-up print of an institutional order worked over hours: no high/low, no last, volume only. Neither price was a live, executable market print at the moment it hit the tape, so neither is allowed to define the day's range.
Then there is the pair that splits the difference. Sold out of sequence (code Z) and prior reference price (code P) both show consolidated high/low as Yes and consolidated last as No — with a footnote saying the last sale field updates only if the print "is the first or only last sale eligible trade transaction of the business day from any UTP participant." The logic is coherent once you see it: the trade genuinely happened at that price, so it belongs inside the day's range, but it is stale, so it must not overwrite the current price.
How Many Prints Carry a Veto
This would be trivia if the excluded prints were rare. They are not. The SEC's own market structure research, built from the MIDAS dataset, reports the odd lot rate — defined as "the percentage of exchange-based trades that are smaller than one round lot (100 shares for nearly all equities)" — across the three calendar quarters ending June 30, 2013.
Roughly one exchange print in five in corporate stocks, and about one in nine in exchange-traded products, could not set a last sale price. In the highest price decile the SEC reports only "typically much larger". Anyone watching time and sales and treating every print as a new price was already misreading about a fifth of the messages.
A second figure is worth quoting for a reason unrelated to the number itself. Cboe reported in October 2021 that "Odd lots currently represent 54.8% of all trades in the U.S. financial markets, up from 43% at the beginning of 2020." That sits far above the SEC figures, and the two are not comparable. The SEC's denominator is exchange-based trade count with opening and closing crosses stripped out. Cboe's is all trades in the U.S. market, including off-exchange prints reported through the FINRA trade reporting facilities. Same word, different populations. Do not draw a line between them and call it a trend — the same error as reading two indicators with different windows against one threshold, which we worked through in an earlier piece on regime filters and units.
16:00:10, When Consolidated Last and Market Center Last Split
There is a hard clock inside the last sale field, and it is not 16:00:00. Footnote 2 of the UTP sale condition table states it exactly: "UTDF subscribers should update consolidated last sale field if received prior to the End of Last Sale Eligibility Control Message (16:00:10). After End of Last Sale Eligibility Control Message is received the transaction would only update the market center-specific last sale value but not the consolidated last sale value."
Ten seconds past the hour, a control message crosses the feed and the consolidated last sale field stops accepting updates. Prints keep arriving. They keep updating each venue's own last sale. They no longer move the consolidated one.
This is one reason a closing price pulled at 16:00:30 from a market center feed can disagree with the consolidated close, and why a backtest stamping closes from a raw venue feed will not reproduce one stamping them from the consolidated tape. The same gap between a settlement construct and a last traded price appears in futures, examined in a piece on what a futures close actually measures.
The Definition of Odd Lot Moved on November 3, 2025
Here is the part that breaks historical comparisons. An odd lot is not defined by a fixed share count. Under 17 CFR 242.600(b)(68), "Odd-lot means an order for the purchase or sale of an NMS stock in an amount less than a round lot." It is defined relative to the round lot — and the round lot is no longer always 100 shares.
Rule 600(b)(93) now assigns round lot size by price tier: 100 shares at $250.00 or less per share, 40 shares from $250.01 to $1,000.00, 10 shares from $1,000.01 to $10,000.00, and 1 share at $10,000.01 or more. NYSE's regulatory memo on the change gives the operative date as November 3, 2025.
Work the consequence. A 50-share order in a $180 stock is an odd lot: it prints with code I, adds to volume, sets nothing. The identical 50-share order in a $400 stock is above that stock's 40-share round lot, so it is not an odd lot at all, and — conditions permitting — it can set the last sale and the high.
The assignment is not continuous either. The evaluation periods are all trading days in March, applied on the first business day of May, and all trading days in September, applied on the first business day of November. A stock that drifted through $250 during September changes round lot class in November, and every odd lot statistic spanning that boundary changes denominator without anything changing in trader behavior. The same hazard of a reporting bucket redefining a metric came up with the notional buckets in the Rule 605 reporting change.
What Would Invalidate This
Several things could make the framework above wrong or obsolete, and it is worth naming them rather than assuming permanence.
The specifications are versioned and they change. The table quoted here is section 3.14.2 of UTP specification version 4.1, dated September 2026, and condition codes have been added and retired before. If a later version moves a row from No to Yes, the row governs, not this article.
The two tapes are governed by separate plans. Tape C securities run under the UTP Plan; Tape A and Tape B run under the CTA Plan. Odd lot treatment matches across them, which is why the 2013 SEC release and the Nasdaq notice describe the same split. But nothing guarantees every condition code aligns. If a behavior matters, check the plan governing the listing venue rather than generalizing from one specification.
The chart is a 2012 to 2013 measurement. The SEC figures predate odd lot tape reporting, and they exclude opening and closing crosses. They establish that the excluded share of prints was large at that time. They are not a current estimate, and they should not be extended forward or spliced to the Cboe figure.
Vendors are not obliged to implement the guidelines identically. The specification tells subscribers what they should do. Whether a given charting package, broker platform or data API follows it is an empirical question about that vendor, which the test below answers for one feed rather than in general.
If a strategy never reads a high, low, last or volume field, none of this binds. A system working only from full-depth order book messages and its own trade classification has no exposure to the consolidated statistics. The exposure comes from consuming a derived field without knowing how it was derived.
Concrete Framework
A checklist for auditing whether a data feed and a strategy agree on what a price is.
Step 1 — Establish which fields the strategy actually consumes. List every place the code reads a daily high, daily low, last price, close or volume. For each, record whether it comes from a consolidated source or a single venue feed. Everything that feeds a signal, a stop, or a position sizing calculation goes on the list.
Step 2 — Test whether the feed honors the modifier. Pick 20 trading days and at least 10 liquid names. For each name-day, compare the vendor's reported daily high against the highest trade price in that day's raw print history. A consistently lower vendor high means the modifier is honored. A match on days containing extended-hours or average-price prints above the session range means the eligibility columns are being ignored. Record the outcome per vendor, not per name.
Step 3 — Time-stamp the close. Pull the closing price from each feed at 16:00:05 and again at 16:05:00 on the same 20 days. If the two differ on any day, the feed is exposing a market center last rather than a frozen consolidated last. Note which one it is and standardize on a single source for the whole research pipeline.
Step 4 — Separate volume from price eligibility in every filter. Where a rule combines a volume threshold with a price-level threshold, confirm it is not assuming the same prints produced both. Odd lot, Form T and average price trades feed the first and not the second, so a liquidity filter and a breakout filter reading one bar are reading two populations.
Step 5 — Anchor odd lot statistics to a round lot date. Any metric that counts odd lots must record the round lot size in force for that security on that date, given the May and November reset schedule. Comparisons across a reset boundary require the round lot class to be held constant or the series is measuring the rule, not the market.
Step 6 — Re-run the audit after each specification revision. Check the version and date on the plan specification once per quarter. When the version changes, repeat Step 2 on a five-day sample before trusting any comparison spanning the change.
Step 7 — Write down what failed. If Step 2 or Step 3 shows a vendor diverging from the specification, record the direction and size of the divergence before switching vendors. A measured bias is usable; an unknown one is not.
The single takeaway is narrow and checkable: volume, last sale and high/low are three separate permissions on one message, and at least three common condition codes grant only the first. A print that adds to volume has not necessarily set a price, and a backtest that assumes otherwise is measuring a tape that does not exist.
This article is for informational and educational purposes only. It is not investment advice, and nothing in it is a recommendation to buy or sell any security or to adopt any trading strategy. Market data specifications and regulations change; verify the current version of any rule or specification before relying on it.
- Get link
- X
- Other Apps
Popular Posts
Trading Value vs. Market Cap — What the Numbers Actually Tell You About Who's Driving the Market
- Get link
- X
- Other Apps
The Hidden Flaw in a 25-Step Grid — Why Losses Exploded in Later Stages
- Get link
- X
- Other Apps
Comments
Post a Comment