The Sub-Penny Rule and Price Improvement
Rule 612, the sub-penny rule, bans quotes in fractions of a cent above $1.00. Here is why your fill still printed at four decimals, with real tape data.
The sub-penny rule, Rule 612 of Regulation NMS, sets the finest increment a displayed stock quote may use: one cent for a price of $1.00 or more, and one hundredth of a cent below $1.00. It binds what a venue may display or accept. It says nothing about the price a trade may print at, which is how a fill lands on your confirmation at $47.3218 while every quote on the screen ended in a round cent.
What the sub-penny rule actually says
Rule 612 came in with Regulation NMS in 2005, and the operative text is short. No national securities exchange, alternative trading system, vendor, or broker may display, rank, or accept an order, quotation, or indication of interest in an NMS stock priced in an increment finer than $0.01 when that price is $1.00 or above. Below $1.00 the floor drops to $0.0001. An NMS stock is an exchange-listed equity, so the rule covers essentially everything a retail brokerage account can buy on a US exchange.
The load-bearing words are display and accept. The rule reaches quotes and orders. It does not reach executions. No venue may post a bid of $47.3215, and your broker may not accept a limit order at that price, yet a trade may lawfully print there.
The practice the rule was written against was stepping ahead. A trader could jump the queue in front of a resting $10.00 bid by posting $10.0001, taking priority for one hundredth of a cent of real economic commitment. A coarse displayed grid removes that move and gives price priority some weight.
Why your fill printed at four decimal places
Most marketable retail orders in US stocks never reach an exchange. They route to a wholesaler, an off-exchange market maker that fills the order against its own inventory. The wholesaler is not displaying a quote when it fills you, so the penny grid does not bind the execution price. It fills inside the national best bid and offer, often by a fraction of a cent, and that gap between the NBBO and your fill is the price improvement figure on the confirmation and in your broker's execution quality reports.
The mechanism leaves a signature on the public tape. Every trade prints to the consolidated feed at its exact price, so counting the prints whose price carries a fraction of a cent counts the fills that happened inside the grid.
The exact SQL behind every number
SELECT
ticker,
round(100 * countIf(toUInt64(round(toFloat64(price) * 10000)) % 100 != 0) / count(), 2) AS subpenny_trade_pct,
round(100 * sumIf(size, toUInt64(round(toFloat64(price) * 10000)) % 100 != 0) / sum(size), 2) AS subpenny_volume_pct
FROM global_markets.stocks_trades
WHERE ticker IN ('MSFT', 'AAPL', 'NVDA', 'KO', 'BAC', 'T', 'F')
AND sip_timestamp >= '2026-06-17 14:00:00'
AND sip_timestamp < '2026-06-17 14:15:00'
AND price > 0
GROUP BY ticker
ORDER BY subpenny_trade_pct DESCOver a fifteen minute window on 17 June 2026, KO showed the highest rate of the 7 names measured, with 46.56% of prints landing on a sub-penny price. MSFT showed the lowest at 31.87%. Counting shares instead of prints gives the second view: on KO, sub-penny prints carried 24.88% of the shares that changed hands.
Wholesaler fills skew small. The panel below splits one full session of AAPL prints by trade size, which separates retail-sized flow from institutional blocks.
The exact SQL behind every number
WITH prints AS
(
SELECT
size,
multiIf(size < 100, 'under 100 shares',
size < 500, '100 to 499 shares',
size < 1000, '500 to 999 shares',
size < 5000, '1,000 to 4,999 shares',
'5,000 shares and up') AS size_bucket,
toUInt64(round(toFloat64(price) * 10000)) % 100 != 0 AS sub_penny
FROM global_markets.stocks_trades
WHERE ticker = 'AAPL'
AND sip_timestamp >= '2026-06-17 00:00:00'
AND sip_timestamp < '2026-06-18 00:00:00'
AND price > 0
AND size > 0
)
SELECT
size_bucket,
round(100 * countIf(sub_penny) / count(), 2) AS subpenny_trade_pct,
round(100 * count() / (SELECT count() FROM prints), 2) AS share_of_prints_pct
FROM prints
GROUP BY size_bucket
ORDER BY min(size)Prints of under 100 shares account for 88.99% of that session's AAPL trades and carry a sub-penny price 38.66% of the time. The largest band, 5,000 shares and up, prints sub-penny 18.06% of the time. Both ends of the panel carry them.
Why a penny is a heavier tax on a cheap stock
A basis point is one hundredth of one percent, the standard unit for comparing trading costs across share prices. Measured in basis points, a one cent minimum tick is a completely different charge on a $3 stock than on a $500 stock.
The exact SQL behind every number
WITH day_prices AS
(
SELECT
ticker,
toFloat64(close) AS px
FROM global_markets.stocks_daily_aggs
WHERE date = '2026-06-17'
AND volume >= 500000
AND close >= 1
AND close < 1000
)
SELECT
multiIf(px < 2, '$1 to $2',
px < 5, '$2 to $5',
px < 10, '$5 to $10',
px < 25, '$10 to $25',
px < 50, '$25 to $50',
px < 100, '$50 to $100',
px < 250, '$100 to $250',
'$250 to $1,000') AS price_bucket,
count() AS stock_count,
round(avg(10000 * 0.01 / px), 2) AS one_cent_bps
FROM day_prices
GROUP BY price_bucket
ORDER BY min(px)Across the 8 price bands on 17 June 2026, one cent is worth 71.37 basis points of the share price in the $1 to $2 band, and 0.28 basis points in the $250 to $1,000 band. The same penny, measured against very different prices.
The rule already contains one adjustment for this. Below $1.00 the increment drops to $0.0001, one hundredth of the tick that applies a fraction of a cent higher up. A stock at $0.99 quotes on a grid one hundred times finer than the same stock at $1.01, and the cliff sits right at the boundary.
That arithmetic shows up in quoted bid ask spreads. The panel below takes the highest bid and the lowest offer posted anywhere in the same second, then averages that gap over a fifteen minute window. Seconds where the book was locked or crossed are dropped, and locked and crossed markets covers what those look like.
The exact SQL behind every number
WITH best_quote AS
(
SELECT
ticker,
toStartOfSecond(sip_timestamp) AS sec,
toFloat64(max(bid_price)) AS best_bid,
toFloat64(min(ask_price)) AS best_ask
FROM global_markets.cache_stocks_quotes
WHERE ticker IN ('MSFT', 'AAPL', 'NVDA', 'KO', 'BAC', 'T', 'F')
AND sip_timestamp >= '2026-06-17 14:00:00'
AND sip_timestamp < '2026-06-17 14:15:00'
AND bid_price > 0
AND ask_price > bid_price
GROUP BY ticker, sec
HAVING min(ask_price) > max(bid_price)
)
SELECT
concat(ticker, ' ($', toString(round(avg((best_bid + best_ask) / 2), 0)), ')') AS name,
round(avg(best_ask - best_bid) * 100, 2) AS avg_spread_cents,
round(10000 * 0.01 / avg((best_bid + best_ask) / 2), 2) AS one_cent_bps,
round(10000 * avg(best_ask - best_bid) / avg((best_bid + best_ask) / 2), 2) AS spread_bps,
if(avg(best_ask - best_bid) <= 0.015, 'at or under $0.015', 'above $0.015') AS tier
FROM best_quote
GROUP BY ticker
ORDER BY avg((best_bid + best_ask) / 2) DESCFor MSFT ($388), the penny tick is 0.26 basis points of the price, and the average quoted gap ran 6.23 cents, or 1.61 basis points. For F ($14), the penny is 6.94 basis points and the quoted gap of 1 cents works out to 6.94 basis points. A low priced name can look wide on a percentage screen while quoting a one cent gap, the narrowest the displayed grid allows. At that point the quoted spread is measuring the size of the tick rather than the depth of the market.
The 2024 amendment and the half cent tick
In September 2024 the SEC amended Rule 612 and added a second quoting increment. An NMS stock whose time-weighted average quoted spread over the prior evaluation period comes in at $0.015 or less quotes in $0.005 increments. Everything else stays on the penny. The evaluation repeats on a fixed schedule and the affected symbols are republished each round, which is why this page states the threshold and leaves the roster to the SEC.
Which names does a $0.015 test select? The ones already pinned to the floor: heavily traded stocks whose quoted spread sits at or very near one cent through most of the session. A stock that routinely quotes three or four cents wide never approaches the test. The panel above carries a tier column that applies the threshold arithmetic to the window it measured, which makes it an illustration rather than a designation. The SEC measures a time-weighted average across a full evaluation period. Fifteen minutes of one session is not that.
The same rulemaking lowered the cap on the fee an exchange may charge to access a protected quote, to $0.0010 per share for stocks priced $1.00 and above. The two numbers work together: a half cent quoting grid next to a tenth of a cent access fee keeps the fee from consuming a large fraction of the tick.
The amendment governs quoting. Everything above about execution prices is unchanged by it, and an off-exchange fill inside the quote can still land on a finer increment.
Why a limit order gets rejected for an invalid increment
A limit order at $47.3215 asks a broker to accept a price the rule forbids it to accept, so the order comes back with an invalid price increment message, or gets rounded to the nearest legal tick depending on the firm. The $1.00 boundary applies to the price of the order itself and not to the stock's last sale, so an order at $0.4732 is legal on the $0.0001 grid while $0.47325 is not.
The mirror image sits on the other side of the trade. A wholesaler filling you at $47.3218 keeps the fraction of a cent between your price and its own, and how market makers make money walks through where that fraction goes.
FAQ
What is the sub-penny rule?
Rule 612 of Regulation NMS. It bars any exchange, alternative trading system, broker, or vendor from displaying or accepting an order or quote in an NMS stock priced in an increment finer than $0.01 when the price is $1.00 or more, and finer than $0.0001 when the price is below $1.00.
Why did my stock order fill at a price with four decimal places?
The rule governs quotes and orders rather than executions. An off-exchange market maker filling your order inside the national best bid and offer may execute at a fraction of a cent better than the quote, and that difference is what brokers report as price improvement.
Why was my limit order rejected for an invalid price increment?
The limit price used a finer increment than Rule 612 permits at that price level: finer than one cent for an order priced $1.00 or above, or finer than $0.0001 for an order priced below $1.00. Re-entering the order on a legal increment clears the rejection.
What did the 2024 SEC tick size amendment change?
It added a $0.005 quoting increment for NMS stocks whose time-weighted average quoted spread over the prior evaluation period measures $0.015 or less. Stocks outside that threshold keep quoting in whole cents, and the amendment governs quoting increments rather than execution prices.
Every panel here ships with the SQL that produced it, so expand one to see exactly how each count was taken. Sub-penny print share and average quoted spread can be measured for any symbol and any window on the Strasmore terminal.