NYSE Closing Auction Explained: How It Works
How the NYSE closing auction sets the official close: the DMM's role, the 3:50 p.m. MOC and LOC cutoff, Closing D Orders at 3:59:50, and a real closing print.
The NYSE closing auction is the single batch trade, run just after 4:00 p.m. ET, that sets the official closing price of every NYSE-listed stock. A Designated Market Maker (DMM), the firm assigned to the stock, gathers the on-close orders and the resting book and prints them together at one price under NYSE Rule 7.35B. That auction print, not the last trade of the continuous session, is the close in every daily bar built on it.
What is the NYSE closing auction?
Core Trading Hours on the NYSE end at 4:00 p.m. ET. Rather than let whichever trade happened last stand as the close, the exchange pools all closing interest and matches it in one auction; what a closing auction is covers the general idea. Four order types exist only for this auction, all defined in NYSE Rule 7.31(c)(2):
- A market-on-close (MOC) order executes only in the auction, at whatever price the auction sets.
- A limit-on-close (LOC) order executes only in the auction, and only if the closing price is at or better than its limit.
- A Closing IO order (a Closing Offset, or CO, in NYSE's own fact sheet) is a limit order that trades only against the opposite side of an imbalance. It yields to every other order and never adds to an imbalance.
- A Closing D Order is a limit order only a Floor broker can enter, with an undisplayed discretionary price the order will reach in the auction. NYSE parity and D-quote orders has the full mechanics.
Resting limit orders on the NYSE book participate too. A Floor broker's verbal interest does not: Rule 7.35B(a)(1) requires closing orders to be entered electronically during Core Trading Hours.
What does the DMM do in the NYSE closing auction?
Nasdaq's close is an algorithm. The NYSE close is a firm with an algorithm and an obligation. Rule 7.35B(a) makes each DMM responsible for closing its securities as soon after the end of Core Trading Hours as possible, while not being "unduly hasty" when the likely closing price sits far from the last NYSE sale. That wording is what puts NYSE closing prints a few seconds after 4:00:00 p.m. rather than on the tick.
Rule 7.35B(c) lets the DMM close a stock electronically, the routine path, or manually, which the rule requires when the closing price or volume falls outside the parameters it sets for an electronic close. Either way the DMM carries two obligations restated in NYSE Regulatory Memo RM-26-03 (March 20, 2026): select a price at which every better-priced order on the side of the imbalance is satisfied, and keep a fair and orderly market under Rule 104. A DMM may commit its own capital to absorb an unpaired imbalance.
The NYSE closing auction timeline: 3:50, 3:59:50, 4:00
Each deadline is written in the rulebook as an offset from the scheduled end of Core Trading Hours, so on a 1:00 p.m. early-close day the whole schedule moves up three hours. On a normal day, as of September 2026:
- Before 3:50 p.m. On-close orders of every type can be entered, cancelled or reduced freely. Floor brokers can see the Total Imbalance and paired quantities from 2:00 p.m. (Rule 7.35B(e)(1)(B)), and a DMM who expects a dislocated close may publish a Manual Closing Imbalance from 3:00 p.m. with a Trading Official's approval (Rule 7.35B(d)(2)).
- 3:50 p.m., the Closing Auction Imbalance Freeze Time (Rule 7.35(a)(8): ten minutes before the scheduled close). MOC and LOC orders must be in. From here a new MOC or LOC is accepted only opposite a published Significant Closing Imbalance, and rejected if none was published. No on-close order can be cancelled or reduced after 3:50 p.m., even to correct a legitimate error. Older guides still describe a 3:58 p.m. error window; the current rule and the March 2026 memo close that door at 3:50, leaving Rule 7.35B(j)(2)(B), which only the DMM can invoke, as the sole exception.
- 3:50 p.m., the imbalance goes public. A Significant Closing Imbalance hits the consolidated tape when it is worth at least $200,000 and equals at least 30% of the stock's 20-day Average Closing Size for S&P 500 names, 50% for S&P 400 and S&P 600 names, or 70% for all others (Rule 7.35B(d)(1)). The full Closing Auction Imbalance Information starts on the NYSE proprietary feed at the same moment and refreshes at least every second whenever it changes, until the auction runs (Rule 7.35B(e)); Closing D Orders count in it at their hidden price. NYSE imbalance messages decodes each field.
- 3:50 p.m. to 4:00 p.m. Closing IO orders are still accepted on either side of the market, in any size.
- 3:59:50 p.m. The exchange rejects any new Closing D Order (Rule 7.35B(f)(3)), and today also rejects cancels and modifications from this point. A filing effective August 13, 2026 (SR-NYSE-2026-36) moves that cancel cutoff to 3:59:00 p.m. once implemented, which NYSE has said will be no later than the first quarter of 2027.
- 4:00 p.m. Core Trading Hours end and the DMM begins the close.
MOC and MOO cutoff times lines up the same deadlines across US exchanges.
What the closing print looks like on the tape
Here is a real close. The panel below buckets every trade in KO, Coca-Cola, an NYSE-listed stock, by the second, from ten seconds before the 4:00 p.m. bell on August 19, 2026 to thirty seconds after it. Read the volume column.
| et_time | trade_count | volume | last_price | largest_print_conditions |
|---|---|---|---|---|
| 15:59:50 | 67 | 4169 | 90.33 | [14,41] |
| 15:59:51 | 51 | 3407 | 90.34 | [] |
| 15:59:52 | 66 | 4714 | 90.35 | [] |
| 15:59:53 | 58 | 7900 | 90.34 | [14,41] |
| 15:59:54 | 75 | 15225 | 90.34 | [14,41] |
| 15:59:55 | 85 | 15803 | 90.34 | [] |
| 15:59:56 | 43 | 6391 | 90.34 | [14,41] |
| 15:59:57 | 38 | 5022 | 90.38 | [14,41] |
| 15:59:58 | 32 | 8890 | 90.36 | [] |
| 15:59:59 | 53 | 20243 | 90.38 | [] |
| 16:00:00 | 2 | 3395 | 90.37 | [15] |
| 16:00:02 | 46 | 4494556 | 90.35 | [8,41] |
| 16:00:03 | 3 | 9958 | 90.35 | [12] |
| 16:00:04 | 8 | 2407 | 90.35 | [12] |
| 16:00:05 | 1 | 11804 | 90.35 | [12] |
| 16:00:09 | 1 | 12 | 90.35 | [12,37] |
| 16:00:11 | 15 | 91035 | 90.35 | [12,22] |
| 16:00:22 | 1 | 89315 | 90.35 | [12,22,41] |
| 16:00:25 | 10 | 59745 | 90.35 | [12,22,41] |
The exact SQL behind every number
SELECT
formatDateTime(toTimeZone(sip_timestamp, 'America/New_York'), '%H:%i:%S') AS et_time,
count() AS trade_count,
toUInt64(sum(size)) AS volume,
round(toFloat64(argMax(price, sip_timestamp)), 2) AS last_price,
toString(argMax(conditions, size)) AS largest_print_conditions
FROM global_markets.stocks_trades
WHERE ticker = 'KO'
AND sip_timestamp >= toDateTime('2026-08-19 19:59:50', 'UTC')
AND sip_timestamp < toDateTime('2026-08-19 20:00:30', 'UTC')
GROUP BY et_time
ORDER BY et_timeContinuous trading in the final seconds is a stream of small prints; the window holds 19 seconds with at least one trade. Then one second carries a print orders of magnitude larger than anything around it: the DMM's auction. The last column shows the condition codes on the biggest print of each second; the auction print carries a close-specific code that ordinary trades do not, and the dictionary further down decodes it. The next panel pins the two trades that matter beside the close recorded in the daily bar.
| last_continuous_time_et | last_continuous_price | last_continuous_shares | last_continuous_conditions | closing_print_time_et | closing_print_price | closing_print_shares | closing_print_shares_readable | closing_print_conditions | official_close | print_vs_close_gap | print_vs_last_minute |
|---|---|---|---|---|---|---|---|---|---|---|---|
| 15:59:59 | 90.38 | 73 | [37] | 16:00:02 | 90.35 | 2168975 | 2.17 million | [8,41] | 90.35 | 0 | 5.8 |
The exact SQL behind every number
WITH
toDateTime('2026-08-19 20:00:00', 'UTC') AS bell,
(
SELECT round(toFloat64(any(close)), 2)
FROM global_markets.stocks_daily_aggs
WHERE ticker = 'KO'
AND date = toDate('2026-08-19')
) AS official_close
SELECT
formatDateTime(toTimeZone(maxIf(sip_timestamp, sip_timestamp < bell), 'America/New_York'), '%H:%i:%S') AS last_continuous_time_et,
round(toFloat64(argMaxIf(price, sip_timestamp, sip_timestamp < bell)), 2) AS last_continuous_price,
toUInt64(argMaxIf(size, sip_timestamp, sip_timestamp < bell)) AS last_continuous_shares,
toString(argMaxIf(conditions, sip_timestamp, sip_timestamp < bell)) AS last_continuous_conditions,
formatDateTime(toTimeZone(argMaxIf(sip_timestamp, size, sip_timestamp >= bell), 'America/New_York'), '%H:%i:%S') AS closing_print_time_et,
round(toFloat64(argMaxIf(price, size, sip_timestamp >= bell)), 2) AS closing_print_price,
toUInt64(maxIf(size, sip_timestamp >= bell)) AS closing_print_shares,
formatReadableQuantity(toFloat64(maxIf(size, sip_timestamp >= bell))) AS closing_print_shares_readable,
toString(argMaxIf(conditions, size, sip_timestamp >= bell)) AS closing_print_conditions,
official_close,
round(abs(round(toFloat64(argMaxIf(price, size, sip_timestamp >= bell)), 2) - official_close), 2) AS print_vs_close_gap,
round(toFloat64(maxIf(size, sip_timestamp >= bell)) / toFloat64(sumIf(size, sip_timestamp < bell)), 1) AS print_vs_last_minute
FROM global_markets.stocks_trades
WHERE ticker = 'KO'
AND sip_timestamp >= toDateTime('2026-08-19 19:59:00', 'UTC')
AND sip_timestamp < toDateTime('2026-08-19 20:05:00', 'UTC')The last continuous-session trade in KO printed at 15:59:59 ET, 73 shares at $90.38. The closing auction printed at 16:00:02 ET: 2.17 million shares at $90.35, one trade 5.8 times the size of every share that changed hands in the entire final minute of continuous trading. The official close in the daily bar is $90.35, and the two differ by $0. The auction print is the close.
Every trade on the consolidated tape carries condition codes, and that is how a data vendor knows which print to call the close: 5 codes in the reference dictionary describe a close of some kind. Match the codes on the auction print above against this list.
| code | condition_name | description |
|---|---|---|
| 8 | Closing Prints | |
| 14 | Closing | |
| 15 | Market Center Official Close | |
| 19 | Market Center Closing Trade | |
| 38 | Corrected Consolidated Close (per listing market) |
The exact SQL behind every number
SELECT
toString(id) AS code,
any(name) AS condition_name,
any(description) AS description
FROM global_markets.stocks_condition_codes
WHERE lower(name) LIKE '%clos%'
GROUP BY id
ORDER BY idHow big is the NYSE closing print?
In an NYSE-listed large cap the closing auction is routinely the largest single trade of the day. Across eight household NYSE names on the same session, the biggest print in the five minutes after the bell, which for these names is the auction, ranged from 10.7% to 22.7% of the day's consolidated volume. XOM sat at the top with 3.1 million shares in one print.
That concentration is what gives the imbalance feed its value: a few million shares left unpaired at 3:50 p.m. is information about where the close can land, and the ten minutes that follow exist for other participants to take the other side.
How is the closing price chosen when buys and sells do not match?
Imbalance has a precise meaning on the NYSE (Rule 7.35(a)(4)): the volume of better-priced orders on one side that cannot be paired with the better-priced and at-priced orders on the other side at the Imbalance Reference Price. That reference price is the last NYSE sale, clamped to the exchange's own best bid and offer (Rule 7.35B(d)). Two more prices in the feed bracket the answer: the Continuous Book Clearing Price, at which every better-priced order on the imbalance side could be filled against the whole book (the highest possible close for a buy imbalance, the lowest for a sell imbalance), and the Closing Interest Only Clearing Price, the same calculation restricted to on-close interest.
With that map the DMM selects the closing price. The hard floor is the obligation above: every better-priced order on the side of the imbalance is satisfied at the chosen price, so a buy imbalance cannot close at a level that leaves an LOC buyer with a higher limit unfilled. MOC orders fill in full at the closing price. LOC orders fill when the closing price is at or better than their limit. Closing IO orders fill only against the imbalance side, after every other order. Closing D Orders reach to their hidden price to absorb what is left. Whatever remains unpaired is the DMM's to take with its own capital or, in an extreme case, to cover by soliciting offsetting orders after 4:00 p.m. under Rule 7.35B(j)(2). Allocation among orders at the same price follows Rule 7.35B(h) and the parity rules in Rule 7.37(b).
NYSE closing auction vs the Nasdaq closing cross
The Nasdaq closing cross gets its own post; here is the contrast in one place, with Nasdaq's figures taken from its Closing Cross FAQ.
- Who runs it. NYSE: a DMM, manually or electronically, under a fair-and-orderly obligation. Nasdaq: an algorithm, with no market maker in the loop.
- When the print lands. NYSE: as soon after 4:00:00 p.m. as the DMM can close the stock, typically seconds later. Nasdaq: 4:00:00 p.m.
- Entry cutoffs. NYSE: 3:50 p.m. for MOC and LOC alike, then only to offset a published imbalance. Nasdaq: 3:55 p.m. for MOC and 3:58 p.m. for LOC, with late LOCs repriced when more aggressive than the 3:50 or 3:55 reference price.
- Cancel cutoff and offsetting orders. Both exchanges stop cancels at 3:50 p.m. and accept offsetting orders (NYSE Closing IO, Nasdaq Imbalance-Only) until 4:00 p.m.
- Floor-broker tool. NYSE: the Closing D Order, entry until 3:59:50 p.m. Nasdaq: none.
- Imbalance feed. NYSE: from 3:50 p.m., at least every second when changed. Nasdaq NOII: from 3:50 p.m., every ten seconds, then every second from 3:55 p.m.
- Price rule. NYSE: the DMM selects a price that satisfies all better-priced orders on the imbalance side. Nasdaq: the price that maximizes matched shares, then minimizes the imbalance, then sits closest to the midpoint.
FAQ
What time is the NYSE closing auction?
Core Trading Hours end at 4:00 p.m. ET, and Rule 7.35B directs the DMM to close each stock as soon after that as possible. On most days the print lands within a few seconds of 4:00:00 p.m.; on a 1:00 p.m. early-close day the auction and every deadline move up three hours.
What is the cutoff for MOC and LOC orders on the NYSE?
3:50 p.m. ET, the Closing Auction Imbalance Freeze Time. After it, MOC and LOC orders are accepted only on the side that offsets a published Significant Closing Imbalance, and rejected outright when none was published.
Can I cancel a market-on-close order on the NYSE after 3:50 p.m.?
No. On-close orders cannot be cancelled or reduced after 3:50 p.m., even to fix a legitimate error. The only exception is Rule 7.35B(j)(2)(B), which the DMM may invoke with a Trading Official's approval when a mistaken order would dislocate the close.
Is the NYSE closing price the last trade of the day?
No. The official close is the closing auction print, a separate transaction that lands after the last continuous-session trade. In the KO example above, the daily bar's close matches the auction print, not the trade before it.
What is a Closing D Order?
A limit order that only an NYSE Floor broker can enter, carrying a hidden discretionary price the order will reach in the closing auction. It counts in the published imbalance from 3:50 p.m. and cannot be entered after 3:59:50 p.m.
Every panel above carries its SQL beneath it; expand any one to see how the numbers were pulled. To trace the close in any NYSE-listed name on any past session, ask for it in plain English on the Strasmore terminal.