Strasmore Research
Learn Matt ConnorBy Matt Connor

Stock Order Types Explained: The Core Four

Stock order types explained: market, limit, stop and stop limit, what each one guarantees, what it gives up, and the modifiers that get miscounted as types.

There is no canonical list of five stock order types. There are four core instructions, market, limit, stop and stop limit, plus a layer of modifiers that tell a broker when an order is live and what counts as an acceptable fill. Count the modifiers as types and you arrive at five, nine or a dozen, which is why no two broker help pages agree on the number.

How many stock order types are there?

Four instructions cover everything a plain stock order can say, and they fall out of two questions. Do you accept whatever price the market is showing, or do you set a boundary? Is the order live right now, or does it sit dormant until the stock trades at a level you name? Market and limit answer the first question. Stop and stop limit bolt the dormant trigger onto each of those answers.

Everything else on an order ticket is a modifier on one of the four. Time in force sets how long the instruction lives, from the end of today out to months ahead, and our order time in force guide walks the full set. An all or none condition refuses partial fills. A trailing offset moves a stop level along as the price advances in your favour. An auction instruction routes the order into the opening or closing cross rather than the continuous market. A bracket or OCO package wires orders together: filling one cancels another, covered in bracket and OCO orders. None of these change what the underlying instruction is. They change when it works and how it is allowed to fill.

One quote, four instructions

Hold a quote still and the differences get concrete. A stock shows a bid of 10.00 and an ask of 10.05, with 100 shares posted on each side, and you want to buy 100 shares.

  • A market buy crosses the spread and pays 10.05. Ask for 500 shares instead and the first 100 print at 10.05, with the rest filling against whatever offers sit above it.
  • A limit buy at 10.00 joins the bid and waits behind every order already resting at that price. It pays no spread. It may also never trade.
  • A limit buy at 10.05 is marketable: it reaches the current offer and behaves like a market order with a ceiling attached. Marketable and non marketable limit orders differ only in where the limit sits relative to the quote.
  • A stop buy at 10.25 does nothing while the stock trades at 10.05. Once a trade prints at or through 10.25 the order converts into a market order, and the fill lands wherever the book is at that instant, which can be well above 10.25.
  • A stop limit buy with a 10.25 stop and a 10.30 limit wakes up the same way, then posts a limit at 10.30. A jump straight from 10.25 to 10.60 leaves it sitting unfilled.

One intent, five tickets, five different outcomes. The rest of this page prices those outcomes with quote and session data.

Market orders: you control the timing, not the price

A market order guarantees participation while the market is open and a quote exists. It guarantees nothing about price. The cost shows up in the spread, the distance between the best bid and the best offer, which you cross on the way in and cross again on the way out. How large that toll is varies by name.

QueryAverage quoted spread across six household names, one mid-morning hour
symbolspread_centsspread_bps
SPY1.710.22
NVDA1.570.73
AAPL4.541.36
KO1.221.38
PG2.921.98
MSFT12.822.6
The exact SQL behind every number
SELECT
    ticker                                                AS symbol,
    round(avg(toFloat64(ask_price - bid_price)) * 100, 2) AS spread_cents,
    round(avg(toFloat64(ask_price - bid_price)
              / toFloat64((ask_price + bid_price) / 2)) * 10000, 2) AS spread_bps
FROM global_markets.cache_stocks_quotes
WHERE ticker IN ('SPY', 'AAPL', 'MSFT', 'NVDA', 'KO', 'PG')
  AND sip_timestamp >= toDateTime('2026-09-16 14:00:00')
  AND sip_timestamp <  toDateTime('2026-09-16 15:00:00')
  AND bid_price > 0
  AND ask_price > bid_price
GROUP BY ticker
ORDER BY spread_bps
Run this yourself

Over one mid-morning hour on September 16, 2026, the quoted spread ran from 0.22 basis points on SPY, the tightest of the six, to 2.6 basis points on MSFT, which works out to 12.82 cents a share. A basis point is one hundredth of one percent. That range is the whole argument between the two most common tickets, and market order vs limit order takes the comparison further.

When is immediacy most expensive?

The spread is not a fixed property of a stock. It moves through the day as the number of resting orders changes. The panel below tracks one name in fifteen minute buckets across the whole extended day, from the early premarket through the close of the after hours window.

QueryAAPL average quoted spread by ET clock time, Sep 16 2026
64 rows (showing 20)
et_timespread_centsspread_bps
04:0023.377.06
04:15329.65
04:3029.018.75
04:4531.339.46
05:0029.698.96
05:1534.6610.46
05:3026.888.12
05:4519.755.97
06:0024.177.3
06:1525.317.64
06:3028.18.48
06:4524.057.25
07:0025.017.54
07:1513.334.02
07:3022.876.9
07:4519.845.98
08:0016.44.95
08:1517.785.36
08:3012.253.7
08:458.992.71
The exact SQL behind every number
SELECT
    formatDateTime(
        toStartOfFifteenMinutes(toTimeZone(sip_timestamp, 'America/New_York')),
        '%H:%i')                                          AS et_time,
    round(avg(toFloat64(ask_price - bid_price)) * 100, 2)  AS spread_cents,
    round(avg(toFloat64(ask_price - bid_price)
              / toFloat64((ask_price + bid_price) / 2)) * 10000, 2) AS spread_bps
FROM global_markets.cache_stocks_quotes
WHERE ticker = 'AAPL'
  AND sip_timestamp >= toDateTime('2026-09-16 08:00:00')
  AND sip_timestamp <  toDateTime('2026-09-17 00:00:00')
  AND bid_price > 0
  AND ask_price > bid_price
GROUP BY et_time
ORDER BY et_time
Run this yourself

The earliest bucket on the chart, 04:00 ET, averaged 23.37 cents wide. The final bucket, 19:45 ET, averaged 26.93 cents. Follow the shape between the two ends and you can read off where a market order is cheap to use and where it is not. A ticket working at 04:15 and the same ticket working at 11:00 meet very different books, which is the mechanism behind most of the surprises in premarket and after hours trading.

Limit orders: you control the price, not the fill

A limit order names the worst price you will accept and never trades through it. What it cannot promise is a trade at all, and the further you place it from the market, the thinner that promise gets. The panel below measures the trade-off directly. For every session over the year to September 2026, it asks whether a buy limit placed a given distance under the prior close would have been reached by that day's low.

QueryHow often a buy limit under the prior close was reached (AAPL, one year of sessions)
limit_below_prior_closesessions_filled_pct
0%87.2
0.25%74.4
0.5%62.8
1%41.2
2%12.8
3%4
The exact SQL behind every number
WITH sessions AS
(
    SELECT
        date,
        toFloat64(any(low))   AS low_px,
        toFloat64(any(close)) AS close_px
    FROM global_markets.stocks_daily_aggs
    WHERE ticker = 'AAPL'
      AND date >= '2025-10-01'
      AND date <  '2026-10-01'
    GROUP BY date
),
framed AS
(
    SELECT
        low_px,
        lagInFrame(close_px) OVER (
            ORDER BY date ASC
            ROWS BETWEEN 1 PRECEDING AND 1 PRECEDING) AS prev_close
    FROM sessions
)
SELECT
    concat(toString(offset_pct), '%')                AS limit_below_prior_close,
    round(100 * countIf(low_px <= prev_close * (1 - offset_pct / 100))
              / count(), 1)                          AS sessions_filled_pct
FROM framed
ARRAY JOIN [0., 0.25, 0.5, 1., 2., 3.] AS offset_pct
WHERE prev_close > 0
GROUP BY offset_pct
ORDER BY offset_pct
Run this yourself

A limit sitting right at the prior close was reached in 87.2 percent of sessions, the large majority of the sample: most sessions dip at some point below where the previous one finished. Move it to 3% under the prior close and that falls to 4 percent. Being reached is also not the same as being filled: resting limits queue by price and then by time at each price, so a touch that trades a few hundred shares at your level may clear only the orders ahead of yours.

Stop orders: a dormant market order

A stop order instructs the broker to send a market order once the stock trades at or through a level you set. It holds a trigger, never a price. Its characteristic failure is the overnight gap: a sell stop resting under the market activates at the opening print, and when that print is far below the stop, the fill is far below too. The panel below sizes that distance.

QueryOvernight gap between one close and the next open, year to Sep 2026
symbolavg_gap_pctworst_gap_pctgap_over_1pct_count
NVDA1.096.3113
MSFT0.8312.1369
AAPL0.518.5829
PG0.485.0425
KO0.465.4126
SPY0.42.617
The exact SQL behind every number
WITH sessions AS
(
    SELECT
        ticker,
        date,
        toFloat64(any(open))  AS open_px,
        toFloat64(any(close)) AS close_px
    FROM global_markets.stocks_daily_aggs
    WHERE ticker IN ('SPY', 'AAPL', 'MSFT', 'NVDA', 'KO', 'PG')
      AND date >= '2025-10-01'
      AND date <  '2026-10-01'
    GROUP BY ticker, date
),
gaps AS
(
    SELECT
        ticker,
        abs(open_px / prev_close - 1) * 100 AS gap_pct
    FROM
    (
        SELECT
            ticker,
            open_px,
            lagInFrame(close_px) OVER (
                PARTITION BY ticker
                ORDER BY date ASC
                ROWS BETWEEN 1 PRECEDING AND 1 PRECEDING) AS prev_close
        FROM sessions
    )
    WHERE prev_close > 0
)
SELECT
    ticker                 AS symbol,
    round(avg(gap_pct), 2) AS avg_gap_pct,
    round(max(gap_pct), 2) AS worst_gap_pct,
    countIf(gap_pct >= 1)  AS gap_over_1pct_count
FROM gaps
GROUP BY ticker
ORDER BY avg_gap_pct DESC
Run this yourself

Over that year, NVDA carried the largest average overnight move of the six at 1.09 percent, with a widest single gap of 6.3 percent and 113 sessions that opened at least 1 percent away from the prior close. The quietest of the six, SPY, averaged 0.4 percent. Every one of those openings is a session in which a resting stop would have converted at a price the trader never saw on screen. The mechanics beside a plain limit are laid out in stop order vs limit order.

Stop limit orders: a trigger with a floor under the fill

A stop limit order uses the same trigger, then posts a limit instead of a market order. It caps how bad the fill can be and accepts that there may be no fill, which is the exact opposite choice from a plain stop on a gap morning. The two sit side by side in stop order vs stop limit order.

What each type controls, and what it gives up

  • Market order. You control the timing. You give up the price, and in a thin book or an extended hours session the fill can land well away from the quote you looked at.
  • Limit order. You control the price. You give up certainty of execution, and position in the queue is decided by price and then by time.
  • Stop order. You control the level that wakes the order. You give up the fill price entirely once it wakes, with the overnight gap as the worst case.
  • Stop limit order. You control both the level and the worst acceptable price. You give up the guarantee that anything trades, which bites hardest in the fast move you set it for.
  • Modifiers. Time in force, all or none, trailing offsets, auction routing and OCO packages change when an instruction is live and what fill it accepts. They never change which of the four it is.
Data notes

The quote panels read one hour and one full extended day of national best bid and offer data for a pinned past date, September 16, 2026, so the figures do not move as the page is regenerated. Spreads are averaged across quote updates, not weighted by time or size, and quotes with a crossed or zero side are dropped. The session panels read daily bars, de-duplicated to one row per ticker and date, with the prior close taken from the immediately preceding session rather than a calendar day. Gap figures are absolute moves, so an up gap and a down gap of the same size count equally.

FAQ

How many types of stock orders are there?

Four core instructions: market, limit, stop and stop limit. Longer lists are produced by counting modifiers such as day versus good till cancelled, all or none, trailing stops, market on open and market on close, or bracket and OCO packages, which attach to those four rather than standing beside them.

What is the difference between a stop order and a stop limit order?

Both stay dormant until the stock trades at the level you name. A stop then sends a market order, which fills but at an unknown price. A stop limit then posts a limit, which protects the price and may leave you unfilled.

Can a market order fill at a worse price than the quote I saw?

Yes, in two ordinary ways. Your size can exceed what is posted at the best price, so the remainder fills against worse prices behind it, and the quote can move between the moment you look and the moment the order arrives.

Do limit orders always fill when the price is reached?

No. A limit at your price joins a queue ordered by price and then by arrival time, and a trade at that level may be smaller than the orders ahead of yours. The panel above measures how often a price was reached, which is the ceiling on how often an order there would have traded.

Which order type is right for a beginner?

No single ticket is safest in every situation, so the practical question is which risk you prefer to carry: an uncertain price with a market order, or an uncertain fill with a limit. The spread and gap panels on this page put numbers on both sides of that choice.


Every panel here ships with the SQL that produced it, so you can see exactly how each figure was counted. To test a different offset, name or window, ask the question in plain English on the Strasmore terminal.