Can You Cancel a Limit Order Before It Fills
Can you cancel a limit order? Usually yes, but a cancel is a request that races the fill. Here are the four outcomes you will meet and what decides each one.
Can you cancel a limit order? In almost every case yes, and the reason the answer is not a flat "always" comes down to one mechanic: a cancel is a request sent to the venue holding your order, not a command your broker applies retroactively. It travels the same path the order took, and it loses to a fill that is already in flight. Every surprise around cancels follows from that single race.
Can you cancel a limit order before it fills?
A resting limit order is a standing instruction sitting in a trading venue's order book: buy up to this size at this price or better, or sell at this price or better. It stays there until something ends it. A cancel is a separate message asking the matching engine to pull that instruction out of the book. The engine handles messages one at a time in arrival order. When an incoming order matches yours a fraction of a millisecond before your cancel lands, the trade is already done, and your cancel reaches an order that no longer exists.
That is not mistreatment and not a platform bug. It is how a first-come queue has to work. The useful question is how much traffic your cancel is racing through. The panel below counts updates to the best quote for two household names across one pinned session, September 15, 2026, in fifteen minute buckets.
| et_time | aapl_quote_updates_per_sec | ko_quote_updates_per_sec |
|---|---|---|
| 09:30 | 65.5 | 19.3 |
| 09:45 | 44.4 | 24.2 |
| 10:00 | 45.6 | 25.2 |
| 10:15 | 33.7 | 22.3 |
| 10:30 | 34 | 17.2 |
| 10:45 | 37.5 | 20.3 |
| 11:00 | 38.7 | 18.2 |
| 11:15 | 25 | 13.9 |
| 11:30 | 25.4 | 11.2 |
| 11:45 | 27.8 | 12.9 |
| 12:00 | 25.1 | 12.1 |
| 12:15 | 24.2 | 14.5 |
| 12:30 | 21.4 | 9.5 |
| 12:45 | 20.9 | 11.1 |
| 13:00 | 18.8 | 10.2 |
| 13:15 | 17.6 | 8.8 |
| 13:30 | 19 | 6.5 |
| 13:45 | 18.1 | 6.4 |
| 14:00 | 19.4 | 8.4 |
| 14:15 | 19.8 | 6.2 |
The exact SQL behind every number
SELECT
formatDateTime(toStartOfFifteenMinutes(toTimeZone(sip_timestamp, 'America/New_York')), '%H:%i') AS et_time,
round(countIf(ticker = 'AAPL') / 900, 1) AS aapl_quote_updates_per_sec,
round(countIf(ticker = 'KO') / 900, 1) AS ko_quote_updates_per_sec
FROM global_markets.cache_stocks_quotes
WHERE ticker IN ('AAPL', 'KO')
AND sip_timestamp >= '2026-09-15 13:30:00'
AND sip_timestamp < '2026-09-15 20:00:00'
GROUP BY et_time
ORDER BY et_timeIn the first bucket of that session, starting 09:30 ET, the best quote for Apple changed about 65.5 times a second, against roughly 19.3 a second for Coca-Cola. The final bucket, 15:45, measured 66 and 16 a second. Most of those updates are participants placing, modifying, and cancelling orders. The book on your screen is a photograph of something that changes thousands of times a minute, and your cancel is one more message joining that stream.
The four outcomes of a cancel request
- Cancelled. The venue acknowledges the cancel, the order leaves the book, and the buying power or shares are released. This is the ordinary case for an order resting away from the current market, a non-marketable limit order, with nothing trying to trade against it.
- Too late to cancel. The order filled first. What comes back is a fill report rather than a cancel confirmation, and the fill stands.
- Partially filled, residual cancelled. Part of the size traded and the cancel removed what was left. You own the shares that traded, at the prices they traded.
- Rejected. The cancel arrived at an order the venue no longer holds: already filled, already expired with the session, or already pulled by the broker's risk system. A reject on a cancel is usually the venue reporting that the order is gone, not that cancelling is forbidden.
How fast does the fill race run?
Speed decides outcome two, and it varies enormously by name. The panel below takes the same pinned session and measures the average gap between consecutive prints on the public tape for six widely held symbols.
| symbol | avg_ms_between_prints | prints_per_second |
|---|---|---|
| NVDA | 12.8 | 77.9 |
| AAPL | 35.3 | 28.3 |
| SPY | 49.5 | 20.2 |
| MSFT | 60.5 | 16.5 |
| KO | 100.7 | 9.9 |
| ADP | 525.8 | 1.9 |
The exact SQL behind every number
SELECT
ticker AS symbol,
round(23400000.0 / count(), 1) AS avg_ms_between_prints,
round(count() / 23400.0, 1) AS prints_per_second
FROM global_markets.stocks_trades
WHERE ticker IN ('AAPL', 'MSFT', 'NVDA', 'SPY', 'KO', 'ADP')
AND sip_timestamp >= '2026-09-15 13:30:00'
AND sip_timestamp < '2026-09-15 20:00:00'
GROUP BY ticker
ORDER BY avg_ms_between_printsThe busiest tape of the six, NVDA, printed a trade every 12.8 milliseconds on average through the session. The quietest, ADP, went 525.8 milliseconds between prints. A cancel on the quieter name has far more room, since the engine spends most of its time with nothing arriving to match against. On the busiest name during the busiest minutes, a human reaction time of a quarter second covers hundreds of chances for the order to trade. Routing adds distance too: a cancel passes the broker's risk checks and its link to the venue before it reaches the book, the same path described in how long a market order takes to fill.
Why a cancel can leave you holding half an order
A limit order for 1,000 shares is not one object to the market. It is 1,000 shares available at your price, and the market takes them in whatever pieces arrive. Four prints of 100 and one of 200 leaves 400 shares resting. Cancel at that moment and you keep 600 shares plus a cancelled remainder of 400. Print sizes on the tape show why residuals are normal rather than exceptional.
| print_size | pct_of_prints | pct_of_shares |
|---|---|---|
| under 100 shares | 93.3 | 45.3 |
| exactly 100 shares | 2.3 | 6.5 |
| 101 to 499 shares | 3.9 | 20.9 |
| 500 to 999 shares | 0.3 | 5.7 |
| 1,000 shares or more | 0.2 | 21.5 |
The exact SQL behind every number
WITH prints AS
(
SELECT size
FROM global_markets.stocks_trades
WHERE ticker = 'AAPL'
AND sip_timestamp >= '2026-09-15 13:30:00'
AND sip_timestamp < '2026-09-15 20:00:00'
)
SELECT
multiIf(size < 100, 'under 100 shares',
size = 100, 'exactly 100 shares',
size < 500, '101 to 499 shares',
size < 1000, '500 to 999 shares',
'1,000 shares or more') AS print_size,
round(100.0 * count() / (SELECT count() FROM prints), 1) AS pct_of_prints,
round(100.0 * sum(size) / (SELECT sum(size) FROM prints), 1) AS pct_of_shares
FROM prints
GROUP BY print_size
ORDER BY min(size)Prints of under 100 shares made up 93.3 percent of Apple's trades on that session while carrying 45.3 percent of the shares. The top bucket, 1,000 shares or more, accounted for 0.2 percent of prints and 21.5 percent of shares. Trading happens mostly in small pieces, so an order of any real size tends to be consumed in slices. Which resting order gets each slice is a matter of price time priority.
Resting limit orders die on their own schedule
A cancel you never sent can still happen. Four schedules end orders without your involvement:
- A day order expires at the end of the regular session. Nothing rests overnight.
- A good till cancelled order survives sessions up to a horizon the broker sets, commonly a few months, after which the broker cancels it for you.
- Immediate or cancel and fill or kill instructions are built to die on arrival when they cannot trade. Each one is defined in order time in force explained.
- Cancel on disconnect, offered by many venues and used by some brokers, pulls resting orders the moment a connection drops.
A day order's last minutes coincide with the heaviest trading of the day. The panel below shows one session's volume shape for SPY, the large S&P 500 exchange traded fund.
| et_time | spy_volume_millions |
|---|---|
| 09:30 | 1.77 |
| 09:45 | 0.97 |
| 10:00 | 2.27 |
| 10:15 | 1.12 |
| 10:30 | 1.37 |
| 10:45 | 1.81 |
| 11:00 | 1.1 |
| 11:15 | 1.07 |
| 11:30 | 0.98 |
| 11:45 | 0.96 |
| 12:00 | 0.6 |
| 12:15 | 0.61 |
| 12:30 | 1.08 |
| 12:45 | 0.62 |
| 13:00 | 0.75 |
| 13:15 | 0.52 |
| 13:30 | 0.54 |
| 13:45 | 0.31 |
| 14:00 | 0.71 |
| 14:15 | 0.53 |
The exact SQL behind every number
SELECT
formatDateTime(toStartOfFifteenMinutes(toTimeZone(window_start, 'America/New_York')), '%H:%i') AS et_time,
round(sum(volume) / 1000000, 2) AS spy_volume_millions
FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker = 'SPY'
AND window_start >= '2026-09-15 13:30:00'
AND window_start < '2026-09-15 20:00:00'
GROUP BY et_time
ORDER BY et_timeThe opening bucket, 09:30 ET, traded 1.77 million shares. The last bucket before the 4:00 p.m. close, 15:45, traded 4.57 million. Volume clusters at the two ends of the session, and the closing auction that follows carries its own cutoffs, set out in MOC and MOO order cutoff times. A day limit order sitting near the market into that window is in the busiest stretch of the race, right up to the point it expires.
Changing a limit order is a cancel plus a new order
Platforms show an edit button, and some venues accept a single modify message, but the economics match a cancel followed by a fresh order. Any change to price, and at most venues any increase in size, puts the order at the back of the queue at its new price. The order you waited behind twenty others to reach becomes a brand new arrival. Time priority does not transfer. Order modification and queue priority covers which edits keep your place, and how to estimate queue position covers measuring what an edit gives up.
How exchanges make cancellation winnable
Venues treat cancellation as a first-class function. Matching engines accept dedicated cancel messages that are lighter to process than new orders. Exchanges run purge ports and mass cancel facilities that wipe every resting order of a participant in one instruction. Most also offer a kill switch an exchange operator can pull on a firm's behalf. Those facilities exist for exactly the situation this post opened with, where cancelling has to outrun matching; mass cancel and purge ports walks through them. None of it is retail plumbing, and all of it points at the same fact: the ability to pull an order is what makes resting a limit order workable. Giving up that option in exchange for immediacy is the trade examined in market order vs limit order.
FAQ
Can you cancel a limit order after hours?
Yes, for an order still live outside the regular session, provided the platform is accepting instructions. A day order has already expired by then, so nothing remains to cancel. A good till cancelled order can be pulled overnight, with the cancel reaching the venue when it next accepts messages. The extended session clock is in after hours and premarket trading.
Can a limit order be cancelled after a partial fill?
Yes. The cancel applies only to the unfilled remainder. Shares that already traded stay yours at the prices they traded, and no cancel undoes them.
Why did my limit order disappear without me cancelling it?
Routine schedules end orders on their own: a day order expiring at the close, a good till cancelled order reaching the broker's horizon, an immediate or cancel instruction dying on arrival, or cancel on disconnect firing when a connection drops. A broker's risk system can also pull an order when the account no longer covers it.
Does cancelling a limit order cost money?
US retail brokers generally do not charge to cancel an equity order, and an order that never fills carries no commission. High message rates can attract fees for professional participants at some venues, which does not reach a retail ticket.
Is a cancel ever guaranteed?
No. A cancel is a request, and the case it loses is a fill that reached the matching engine first. A resting limit order counts as live until the venue confirms the cancel, not from the moment the button is pressed.
Data notes
All four panels pin one past session, September 15, 2026, so the figures stay fixed as the page ages. The per second quote figures divide each bucket's message count by the 900 seconds in a fifteen minute bucket. Print gaps divide the 23,400 second regular session by the number of prints, which is an average rather than a typical wait: traffic clusters, so gaps inside a busy minute run far shorter. Order level cancel messages are not public data. Quote churn and print spacing are the observable traces they leave.
Every panel here carries its SQL underneath, so each count is open to inspection. To measure the cancel race on a name you follow, ask for its print spacing in plain English on the Strasmore terminal.