Market order vs limit order, measured
Market order dey fill now for best price; limit order dey cap your price but e fit no fill. Real quote data show wetin each choice cost in dollars.
Market order dey talk say "fill me now for the best price wey dey available"; limit order dey talk say "fill me only for my price or better." Na that one difference dey decide wetin you go pay, whether you go trade at all, and wetin fit spoil. This guide dey measure the trade-off with real quote data — in dollars, on real tickers — then e dey show where e dey bite pass: fast tape, bigger orders, options, and extended hours.
Wetin be market order?
Market order dey execute sharp-sharp against the best quote for the other side of the market: buy order go fill for the ask price, sell order go fill for the bid price. For any normal retail size inside listed stock, the fill almost sure to happen; but the price no get guarantee. Wetin market order cost, when you compare am to the midpoint between bid and ask, na half of the bid-ask spread — na the toll wey you pay make dem do am quick-quick. The quote wey you dey see for screen na the NBBO, wey be the best bid and offer across all exchanges, and e dey move every time: your order go fill against the NBBO wey dey ground when e reach, no be the one wey dey when you click.
Wetin be limit order?
Limit order get price cap (for buy) or floor (for sell). If you set buy limit for $50.00, you no go ever pay pass $50.00 — but if market no reach your price, you no go trade; di order go just dey wait. One middle setting dey important: marketable limit order — na buy limit wey dey at or small above di current ask. E dey fill sharp-sharp like market order for normal case, and di limit dey act as ceiling if di quote jump while your order dey travel.
Two settings dey decide wetin go happen while e dey wait. Duration: day order dey cancel at close if e no fill; good-till-canceled (GTC) dey rest across sessions until e fill, cancel, or expire by di broker time limit (normally 60 to 90 days). Partial fills: limit order fit execute for pieces — 40 shares out of 100-share order fit fill for your price while di other 60 dey rest.
Stop orders and stop-limit orders
Order tickets dey list two more types wey dem build from dis ones. A stop order dey sleep until di stock trade reach or pass your stop price, den e wake up as ordinary market order — di classic "stop-loss" na sell stop wey dey below di current price. Di wahala be say: di order wey wake up na market order, and if di stock dey gapping, di fill fit land well-well below di stop price. A stop-limit order go wake up as limit order instead — e get stop price plus limit price — e go cap how bad di exit print fit be, and e dey accept say if di drop fast well-well, e fit no ever fill.
Wetin immediacy cost, for dollar
Di cost wey dey for crossing di spread fit measure from di quote record. One full regular session, five tickers, di median quoted spread and wetin half of am be for 100 shares:
The exact SQL behind every number
SELECT ticker,
round(quantileExactIf(0.5)(toFloat64(ask_price - bid_price) * 100, bid_price > 0 AND ask_price > bid_price), 1) AS spread_cents,
round(quantileExactIf(0.5)(toFloat64(ask_price - bid_price) * 50, bid_price > 0 AND ask_price > bid_price), 2) AS half_spread_cost_100sh_usd,
round(count() / 23400, 1) AS quote_updates_per_sec
FROM global_markets.cache_stocks_quotes
WHERE ticker IN ('SPY', 'IWM', 'AAPL', 'KO', 'CATO')
AND sip_timestamp >= '2026-07-08 04:00:00'
AND sip_timestamp < '2026-07-09 04:00:00'
AND toTimeZone(sip_timestamp, 'America/New_York') >= toDateTime('2026-07-08 09:30:00', 'America/New_York')
AND toTimeZone(sip_timestamp, 'America/New_York') < toDateTime('2026-07-08 16:00:00', 'America/New_York')
GROUP BY ticker
ORDER BY quote_updates_per_sec DESCRead di extremes. SPY, di busiest name for di panel, update im national best quote about 176.8 times per second and keep median spread of 2 cents — crossing am for 100 shares run about $1. For di oda end, CATO barely quote at all, with median spread of 5 cents and half-spread cost near $2.5 for di same 100 shares. For liquid large-cap, immediacy cost na pocket change; for thin name e cost real money — and di on-screen quote fit be minutes wey don pass. Di market-wide economics dey inside wetin e cost to trade one stock.
Wetin dey happen to price as your order dey travel
Di real risk for market order no be di spread wey you fit see — na di movement wey you no fit see. Quotes dey update hundreds of times per second for busy names, and price dey drift fastest wen most people reach for market orders: just after open. Di same session, as di average high-to-low range inside each minute of SPY trading:
The exact SQL behind every number
SELECT round(avgIf(range_cents, et_minute >= '09:30' AND et_minute < '09:45'), 1) AS open_window_cents,
round(avgIf(range_cents, et_minute >= '12:00' AND et_minute < '13:00'), 1) AS midday_window_cents,
round(avgIf(range_cents, et_minute >= '15:45' AND et_minute < '16:00'), 1) AS close_window_cents,
round(avgIf(range_cents, et_minute >= '09:30' AND et_minute < '09:45')
/ avgIf(range_cents, et_minute >= '12:00' AND et_minute < '13:00'), 1) AS open_vs_midday
FROM (
SELECT formatDateTime(toTimeZone(window_start, 'America/New_York'), '%H:%i') AS et_minute,
toFloat64(high - low) * 100 AS range_cents
FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker = 'SPY'
AND window_start >= '2026-07-08 04:00:00'
AND window_start < '2026-07-09 04:00:00'
)
WHERE et_minute >= '09:30' AND et_minute < '16:00'For di first fifteen minutes, SPY price travel an average of 70.3 cents inside each single minute — versus 35.8 cents per minute for midday hour, and 38.8 cents for di final fifteen. A market order wey dem place by 9:31 go land inside target wey dey move about 2x faster dan one wey dem place for noon. Spreads dey widest for those first minutes too — see why spreads dey wide for open.
Wetin fast day dey do to di trade-off
July 8, 2026 na ordinary session; di trade-off dey reprice for one extraordinary one. April 9, 2025 bin dey inside dat spring tariff-headline wahala — SPY for both days, same measurements:
The exact SQL behind every number
WITH quotes AS (
SELECT toDate(toTimeZone(sip_timestamp, 'America/New_York')) AS d,
round(quantileDeterministicIf(0.5)(toFloat64(ask_price - bid_price) * 100, cityHash64(ticker, sip_timestamp), bid_price > 0 AND ask_price > bid_price), 1) AS median_spread_cents
FROM global_markets.cache_stocks_quotes
WHERE ticker = 'SPY'
AND ((sip_timestamp >= '2026-07-08 04:00:00' AND sip_timestamp < '2026-07-09 04:00:00')
OR (sip_timestamp >= '2025-04-09 04:00:00' AND sip_timestamp < '2025-04-10 04:00:00'))
AND (toHour(toTimeZone(sip_timestamp, 'America/New_York')) * 60 + toMinute(toTimeZone(sip_timestamp, 'America/New_York'))) BETWEEN 570 AND 959
GROUP BY d
HAVING countIf(bid_price > 0 AND ask_price > bid_price) > 0
),
bars AS (
SELECT toDate(toTimeZone(window_start, 'America/New_York')) AS d,
round(avg(toFloat64(high - low) * 100), 1) AS avg_minute_range_cents,
round(max(toFloat64(high - low) * 100), 0) AS worst_minute_range_cents,
round((max(high) - min(low)) / argMin(toFloat64(open), window_start) * 100, 1) AS session_range_pct
FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker = 'SPY'
AND ((window_start >= '2026-07-08 04:00:00' AND window_start < '2026-07-09 04:00:00')
OR (window_start >= '2025-04-09 04:00:00' AND window_start < '2025-04-10 04:00:00'))
AND (toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959
GROUP BY d
)
SELECT formatDateTime(quotes.d, '%Y-%m-%d') AS session,
bars.session_range_pct,
bars.avg_minute_range_cents,
bars.worst_minute_range_cents,
quotes.median_spread_cents
FROM quotes INNER JOIN bars ON quotes.d = bars.d
ORDER BY quotes.d DESCFor 2025-04-09, SPY waka from 10.8% low go high inside one regular session, against 0.9% for di calm day; di average minute spread across 156.4 cents against 37.2, di wildest one 1638 against 133. Di spread sef wide — median na 5¢ vs 2¢ — but movement big pass am: for dat kind day, di main cost of market order na di distance wey price cover between decision and fill. Na dat time limit cap dey show im value — and na dat time resting limit dey most likely fill early and get left behind.
Bigger orders and the displayed quote
Quote na price and size — di shares wey dem really offer for di best ask. Market order wey big pass di displayed size fit exhaust am and fill di rest for di next prices up: walking the book. For display across di same session:
The exact SQL behind every number
SELECT ticker,
minIf(ask_size, bid_price > 0 AND ask_price > bid_price) AS smallest_displayed_shares,
round(quantileDeterministicIf(0.5)(toFloat64(ask_size), cityHash64(ticker, sip_timestamp), bid_price > 0 AND ask_price > bid_price), 0) AS median_ask_shares,
round(countIf(ask_size >= 1000 AND bid_price > 0 AND ask_price > bid_price) / countIf(bid_price > 0 AND ask_price > bid_price) * 100, 1) AS pct_covering_1000_shares
FROM global_markets.cache_stocks_quotes
WHERE ticker IN ('SPY', 'IWM', 'AAPL', 'KO', 'CATO')
AND sip_timestamp >= '2026-07-08 04:00:00' AND sip_timestamp < '2026-07-09 04:00:00'
AND (toHour(toTimeZone(sip_timestamp, 'America/New_York')) * 60 + toMinute(toTimeZone(sip_timestamp, 'America/New_York'))) BETWEEN 570 AND 959
GROUP BY ticker
HAVING countIf(bid_price > 0 AND ask_price > bid_price) > 0
ORDER BY median_ask_shares DESC, ticker ASCIWM, di deepest name for di panel, show median of 360 shares for di best ask; AAPL show just 80. For none of di five names di displayed ask cover 1,000-share order even one-tenth of di time — 7.8% of quote records at best, 0.6% at worst. Displayed size na floor, not di full inventory — hidden interest dey rest between di best prices and liquid books dey refill for milliseconds — but market order guarantee end for di displayed shares: past dem e go take wetin di book hold next; limit set di line wey e no go cross.
Options: di same trade-off, but e big well-well
Options traders dey feel dis one pass: contract prices dey small, so spread wey wide like cents go chop big part of wetin you pay. Every Apple option wey expire for 2026 wey get live two-sided quote, against Apple stock, for di same session:
The exact SQL behind every number
WITH opt AS (
SELECT round(quantileDeterministic(0.5)((toFloat64(ask_price) - toFloat64(bid_price)) / ((toFloat64(ask_price) + toFloat64(bid_price)) / 2) * 10000, cityHash64(ticker, sip_timestamp)), 0) AS option_median_spread_bps,
round(quantileDeterministic(0.5)(toFloat64(ask_price - bid_price) * 100, cityHash64(ticker, sip_timestamp)), 0) AS option_median_spread_cents,
round(count() / 1e6, 0) AS option_quote_updates_millions
FROM global_markets.cache_options_quotes
WHERE ticker >= 'O:AAPL26' AND ticker < 'O:AAPL27'
AND sip_timestamp >= '2026-07-08 04:00:00' AND sip_timestamp < '2026-07-09 04:00:00'
AND (toHour(toTimeZone(sip_timestamp, 'America/New_York')) * 60 + toMinute(toTimeZone(sip_timestamp, 'America/New_York'))) BETWEEN 570 AND 959
AND bid_price > 0 AND ask_price > bid_price
),
stk AS (
SELECT round(quantileDeterministic(0.5)((toFloat64(ask_price) - toFloat64(bid_price)) / ((toFloat64(ask_price) + toFloat64(bid_price)) / 2) * 10000, cityHash64(ticker, sip_timestamp)), 1) AS stock_median_spread_bps
FROM global_markets.cache_stocks_quotes
WHERE ticker = 'AAPL'
AND sip_timestamp >= '2026-07-08 04:00:00' AND sip_timestamp < '2026-07-09 04:00:00'
AND (toHour(toTimeZone(sip_timestamp, 'America/New_York')) * 60 + toMinute(toTimeZone(sip_timestamp, 'America/New_York'))) BETWEEN 570 AND 959
AND bid_price > 0 AND ask_price > bid_price
)
SELECT opt.option_median_spread_bps,
opt.option_median_spread_cents,
stk.stock_median_spread_bps,
round(opt.option_median_spread_bps / stk.stock_median_spread_bps, 0) AS option_to_stock_ratio,
opt.option_quote_updates_millions
FROM opt CROSS JOIN stkDi median Apple option quote spread na 606 basis points of im own midpoint — e be like 65 cents on di contract — while Apple stock quote 1 basis point: gap wey be roughly 606x. Market order for option dey always lose for one fill wetin stock order go lose for hundreds; experienced options traders dey default to limits and dey work di midpoint. Di full cost picture dey inside how much e cost to trade options.
Outside regular hours, limit order na often di only choice
Plenty brokers no dey accept plain market orders for pre-market and after-hours sessions — dem dey only accept limits for there. Di quote record show di conditions wey cause di policy — same day, three windows:
The exact SQL behind every number
SELECT multiIf(et_min < 570, '1. Pre-market (4:00-9:30)', et_min < 960, '2. Regular (9:30-16:00)', '3. After-hours (16:00-20:00)') AS session_window,
round(quantileDeterministicIf(0.5)(spread_cents, det, ticker = 'SPY'), 1) AS spy_spread_cents,
round(quantileDeterministicIf(0.5)(spread_cents, det, ticker = 'AAPL'), 1) AS aapl_spread_cents,
round(quantileDeterministicIf(0.5)(spread_cents, det, ticker = 'KO'), 1) AS ko_spread_cents
FROM (
SELECT ticker,
toHour(toTimeZone(sip_timestamp, 'America/New_York')) * 60 + toMinute(toTimeZone(sip_timestamp, 'America/New_York')) AS et_min,
toFloat64(ask_price - bid_price) * 100 AS spread_cents,
cityHash64(ticker, sip_timestamp) AS det
FROM global_markets.cache_stocks_quotes
WHERE ticker IN ('SPY', 'AAPL', 'KO')
AND sip_timestamp >= '2026-07-08 04:00:00' AND sip_timestamp < '2026-07-09 04:00:00'
AND bid_price > 0 AND ask_price > bid_price
)
WHERE et_min >= 240 AND et_min < 1200
GROUP BY session_window
HAVING countIf(ticker = 'SPY') > 0 AND countIf(ticker = 'AAPL') > 0 AND countIf(ticker = 'KO') > 0
ORDER BY session_windowCoca-Cola im median spread na 1 cent for regular hours, 28 cents pre-market, and 30 cents after di close; Apple move from 3 cents go 32; even SPY wide from 2 go 7. Fewer participants, thinner books — extended-hours trading na where order wey no get cap get di most room to fill badly, and broker rules dey encode dat one.
Which order type fit which situation
Di panels boil down to checklist — no be advice, just where each type weakness cheap and where e dey expensive:
- Liquid large-cap, calm tape, small order. Di spread toll na pocket change; marketable limit dey buy market-order immediacy with ceiling wey dey attached.
- Thin name. Quotes wide and fit be minutes stale; limit dey do di price discovery wey stale quote no fit do.
- Fast tape — di open, news print, day like April 9, 2025. Movement risk dey dwarf di spread; limit dey cap am at di cost of missing di trade.
- Order wey pass di displayed size. Di quote guarantee dey run out at di displayed shares; limit dey set your worst acceptable level.
- Options, and stocks outside regular hours. Limits na di professional default — and often na di only type your broker dey accept after hours.
Di one-line summary: market order dey guarantee di fill, not di price; limit order dey guarantee di price, not di fill; marketable limit dey buy fill-now behavior with di damage capped.
Market order versus limit order FAQ
Na guarantee say market order go fill?
For ordinary retail size for listed stocks during regular hours, e dey effectively yes — best offer dey always to trade against. Na the fill be the guarantee, no be the price: for thin or fast name, the fill fit land far from the last quote wey you see.
Wetin be stop-limit order and how e different from limit order?
Limit order dey live the moment you place am; stop-limit dey rest inactive until the stock trade at or through your stop price, then e activate as limit order at your limit price. The risk: fast move fit blow through the limit and the order no go ever fill.
Wetin dey happen to my limit order overnight?
Day order go expire unfilled at the close. Good-till-canceled (GTC) order dey rest until e fill, cancel, or expire by your broker time limit — and e no dey trade outside regular hours unless you enable extended-hours execution. Stocks dey routinely gap overnight; if the open gap through resting limit, e go execute at the opening price — your price or better by definition.
Why my market order fill for different price from wetin my screen show?
The national best bid and offer for active stock dey update many times per second — SPY update about 176.8 times per second for the session wey dem measure up there. Your order dey fill against the quote wey stand when e arrive, and display, network, and processing delays dey sit for between.
I fit use limit order to sell at loss?
Yes — but sell limit dey execute at your price or better: if you place am below the current bid, e go fill immediately near the bid. If the intent na "sell only if the stock fall reach $45," that one na sell stop — sell limit at $45 with the stock at $50 go fill right away at about $50.
Every panel up there na stored query over the real quote and trade record — expand the SQL, or run your own ticker through the same questions for Strasmore terminal.