Strasmore Research
Learn am Matt ConnorBy Matt Connor · Updated 2026-10-18 · data as of October 18, 2026 · refreshed weekly

Bid-Ask Spread na Wetin? Real Trading Cost

Learn wetin bid-ask spread mean, how to calculate am, and wetin each trade dey cost, using real US stock spreads from tick-level quote data.

Bid-ask spread na di gap between di highest price wey any buyer dey ready to pay now for stock (di bid) and di lowest price wey any seller dey ready to accept (di ask). Na di built-in cost of trading: buy for ask, sell for bid, and di difference remain with whoever supply di quote. Every spread figure for dis page dey measured from tick-level quote data, and di exact query wey dey behind each number attach to am.

Bid-ask spread na wetin? Plain-English explanation

For any moment during trading day, stock get two prices, no be one. Bid na the best standing offer to buy. Ask, wey dem sometimes dey call offer, na the best standing offer to sell. Bid-ask spread na the gap between both prices.

Make we use hypothetical example: stock wey quote $20.00 bid / $20.05 ask get five-cent spread. Anybody wey wan buy immediately go pay $20.05. Anybody wey wan sell immediately go receive $20.00. That nickel no be brokerage fee. Na the price of immediacy, and e dey go to the trader for the other side of the quote. Most times, na professional market maker wey dey ready to buy at the bid and sell at the ask throughout the session.

For US stocks, dem dey combine the best bid and best ask across every exchange into one national best bid and offer, the NBBO. Na that quote your brokerage app dey show, and na this data the post dey measure. Finance still dey use “spread” for other gaps: the 2s10s spread na difference between Treasury yields, no be stock prices.

Bid vs. ask: how to read a stock quote

Below na real NBBO record for Apple, the last quote for our data window, wey come from the consolidated feed.

QueryAAPL: di last recorded NBBO quote for our data window
stockbid priceask pricespreadmidpoint pricespread pctquote time ET
AAPL340.71340.810.10340.760.0292026-10-15 19:59
The exact SQL behind every number
SELECT stock,
       toDecimalString(bid, 2) AS bid_price,
       toDecimalString(ask, 2) AS ask_price,
       toDecimalString(ask - bid, 2) AS spread,
       toDecimalString((ask + bid) / 2, 2) AS midpoint_price,
       round((ask - bid) / ((ask + bid) / 2) * 100, 3) AS spread_pct,
       quote_time_et
FROM (
    SELECT ticker AS stock,
           argMax(toFloat64(bid_price), sip_timestamp) AS bid,
           argMax(toFloat64(ask_price), sip_timestamp) AS ask,
           formatDateTime(toTimeZone(max(sip_timestamp), 'America/New_York'), '%Y-%m-%d %H:%i') AS quote_time_et
    FROM global_markets.cache_stocks_quotes
    WHERE ticker = 'AAPL'
      AND sip_timestamp >= now() - INTERVAL 7 DAY
      AND bid_price > 0
      AND ask_price > bid_price
    GROUP BY ticker
)
Run am yourself

Read am from left go right: the best bid na $340.71, the best ask na $340.81, and the spread, wey be ask minus bid, na $0.10, stamped 2026-10-15 19:59 ET. The midpoint, $340.76, dey halfway between the two, and na the usual reference for the stock fair value for that moment.

One detail wey worth notice: this quote enter near the end of the extended session, hours after the closing bell. The time matter for spreads. The intraday chart down show how much.

How to calculate spread: cents, percent, and basis points

You fit express the same gap in three ways:

  1. Dollars and cents. Spread = ask minus bid. E simple, but e hard to compare am across stocks wey dey trade for different prices.
  2. Percent. Spread ÷ midpoint × 100. Five-cent spread for $20 stock na 0.25% of the price; the same five cents for $200 stock na 0.025%.
  3. Basis points (bps). Hundredths of a percent, na the professional convention. Multiply the percentage by 100: 0.25% equal 25 bps.

For the real Apple quote above: $0.10 ÷ $340.76 come to 0.029% of the share price, na after-hours reading, and e still far below 1% of the price.

Tight vs. wide spreads: real numbers from liquid and thin stocks

Many explainers dey stop for “liquid stocks get narrow spreads.” Here na the real size of the difference, measured across every NBBO update inside one recent multi-day window. The table match six heavily traded names with two genuinely thin small caps, Pro-Dex (PDEX) and Seneca Foods (SENEA). “Typical” mean the median quote for the window. The last column convert the spread to dollars for 100-share round trip. Cents per share and dollars per 100 shares na the same number.

QueryTypical quoted spread: six liquid names vs. two thin small caps, with di 100-share cost
tickertypical spread centstypical spread bpsspread cost for 100 shares
SPY20.32.00
AAPL41.24.00
NVDA20.92.00
MSFT71.37.00
KO11.11.00
TSLA61.66.00
PDEX101162.5101.00
SENEA13272.7132.00
The exact SQL behind every number
WITH early AS (
    SELECT date AS d,
           any(toHour(toTimeZone(close, 'America/New_York')) * 60
               + toMinute(toTimeZone(close, 'America/New_York'))) AS close_min
    FROM global_markets.stocks_market_holidays
    WHERE status = 'early-close'
    GROUP BY date
),
closed AS (
    SELECT DISTINCT date AS d
    FROM global_markets.stocks_market_holidays
    WHERE status = 'closed'
)
SELECT ticker,
       round(median_spread_usd * 100, 1) AS typical_spread_cents,
       round(median_spread_bps, 1) AS typical_spread_bps,
       toDecimalString(median_spread_usd * 100, 2) AS spread_cost_100_shares
FROM (
    SELECT ticker,
           quantileDeterministic(0.5)(toFloat64(ask_price - bid_price), toUInt64(sip_timestamp)) AS median_spread_usd,
           quantileDeterministic(0.5)(toFloat64(ask_price - bid_price) / (toFloat64(ask_price + bid_price) / 2), toUInt64(sip_timestamp)) * 10000 AS median_spread_bps
    FROM (
        SELECT ticker, bid_price, ask_price, sip_timestamp,
               toDate(toTimeZone(sip_timestamp, 'America/New_York')) AS d,
               toHour(toTimeZone(sip_timestamp, 'America/New_York')) * 60
                 + toMinute(toTimeZone(sip_timestamp, 'America/New_York')) AS et_min
        FROM global_markets.cache_stocks_quotes
        WHERE ticker IN ('SPY', 'AAPL', 'NVDA', 'MSFT', 'KO', 'TSLA', 'PDEX', 'SENEA')
          AND sip_timestamp >= now() - INTERVAL 7 DAY
          AND bid_price > 0
          AND ask_price > bid_price
    ) AS q
    LEFT JOIN early AS e ON q.d = e.d
    WHERE q.d NOT IN (SELECT d FROM closed)
      AND q.et_min >= 570
      AND q.et_min < if(e.close_min > 0, e.close_min, 960)
    GROUP BY ticker
)
ORDER BY indexOf(['SPY', 'AAPL', 'NVDA', 'MSFT', 'KO', 'TSLA', 'PDEX', 'SENEA'], ticker)
Run am yourself

Among the liquid names, SPY typical quoted spread measure 2¢, or 0.3 bps of the share price. Coca-Cola come at 1¢ (1.1 bps), while Tesla come at 6¢ (1.6 bps). Then the gap become very wide: Pro-Dex measure 101¢ (162.5 bps), and Seneca Foods 132¢ (72.7 bps). Na the same market and the same rulebook. The difference na liquidity: how many buyers, sellers and market makers dey compete for each name at the same time.

The spread cost for real trade

One clear way to understand spread na to price a round trip: buy at the ask, then sell at the bid immediately after. You go lose the full spread for every share. For 100 shares, the conversion dey already show for the table above. The usual spread in cents per share na the same figure in dollars. For the popular names, the cost na small change: $4.00 for 100 Apple shares, and $1.00 for Coca-Cola. The thinly traded names get different bill: $101.00 for Pro-Dex and $132.00 for Seneca Foods. This one dey before any commission and before your order move the price. These figures assume say the order fill at the displayed quote. If the order bigger pass the displayed size, you fit pay more.

When spread dey wide: market open, market close, and after-hours

Spread no dey remain the same throughout the day. The chart below dey track Apple median quoted spread for every 30-minute clock bucket (Eastern Time) across the same period, including extended hours. Na the pattern wey most explainers dey claim but dem never show.

QueryAAPL median quoted spread by 30-minute bucket (ET, extended hours included)
32 rows (showing 20)
ET timemedian spread cents
04:0032
04:3025
05:0021
05:3015
06:0016
06:3017
07:0017
07:3013
08:0014
08:3020
09:0016
09:306
10:005
10:304
11:003
11:304
12:003
12:303
13:003
13:303
The exact SQL behind every number
SELECT formatDateTime(toStartOfInterval(toTimeZone(sip_timestamp, 'America/New_York'), INTERVAL 30 MINUTE), '%H:%i') AS et_time,
       round(quantileDeterministic(0.5)(toFloat64(ask_price - bid_price), toUInt64(sip_timestamp)) * 100, 1) AS median_spread_cents
FROM global_markets.cache_stocks_quotes
WHERE ticker = 'AAPL'
  AND sip_timestamp >= now() - INTERVAL 7 DAY
  AND bid_price > 0
  AND ask_price > bid_price
GROUP BY et_time
ORDER BY et_time
Run am yourself

The shape be U with high edges: spread wide before market open, e come down to pennies for middle of day, then e wide again after market close. Four checkpoints from that curve, based on clock time:

QueryDi same curve for four checkpoints: premarket, di open, midday, di close
ET timemedian spread cents
04:0032
09:306
13:003
16:0016
The exact SQL behind every number
SELECT formatDateTime(toStartOfInterval(toTimeZone(sip_timestamp, 'America/New_York'), INTERVAL 30 MINUTE), '%H:%i') AS et_time,
       round(quantileDeterministic(0.5)(toFloat64(ask_price - bid_price), toUInt64(sip_timestamp)) * 100, 1) AS median_spread_cents
FROM global_markets.cache_stocks_quotes
WHERE ticker = 'AAPL'
  AND sip_timestamp >= now() - INTERVAL 7 DAY
  AND bid_price > 0
  AND ask_price > bid_price
GROUP BY et_time
HAVING et_time IN ('04:00', '09:30', '13:00', '16:00')
ORDER BY et_time
Run am yourself

For the 04:00 premarket bucket, wey be the first one for the day, Apple median spread measure 32¢. For the 09:30 bucket, wey cover the first 30 minutes of regular trading, e drop to 6¢, while the 13:00 early-afternoon bucket dey at 3¢. The 16:00 bucket, wey start with closing bell together with the closing auction, jump to 16¢, and the gap remain high through evening, reaching 22¢ for the last bucket of the session. During regular hours (9:30 a.m.–4 p.m. ET), dozens of market makers dey quote the stock at the same time. Outside those hours, during after-hours and premarket trading, far fewer quotes dey compete, so the gap dey wider.

Wetin dey make spread tight or wide

Four things dey move together with tight spreads:

  • Competition. When market makers plenty and resting orders plenty for one name, quotes for both sides dey tighter. Thinly traded stock fit get only one active quoter wey dey set the whole market.
  • Trading volume. Heavy volume and tight spreads dey show together across the table above. Names wey people trade well dey get gap wey be small fraction of the gap for thinly traded names.
  • Volatility. For fast market, quotes dey get re-priced nonstop, and gap dey tend to stay wider until trading calm down.
  • Share price and tick size. US stocks above $1 dey quote in one-cent increments, and one cent na the floor. The most liquid low-priced names dey spend plenty time pinned for that level. For low-priced stock, that same minimum cent dey represent bigger percentage of every share.

How to keep your spread costs low

  • Limit orders name the price. Market order go take any quote wey market offer; limit order go fill only for the price wey you state or anything better. If buy order dey rest for bid, e fit earn the spread instead of paying am when seller come meet am. The trade-off be say e fit never fill.
  • Liquid names during regular hours are the cheap combination. Intraday chart above show the size of the difference: spreads for liquid stocks dey tightest around midday.
  • Basis points reveal what cents hide. Difference wey sound like small change fit still be meaningful fraction of one percent for thinly traded or low-priced stock, as the small-cap rows above show.
  • Fewer round trips mean a smaller toll. Every round trip dey pay the spread once. Total cost dey increase based on how often position turn over.

Bid-ask spread FAQ

Good bid-ask spread na which one?

No official threshold dey, but the table above show the scale: for the period we measure, SPY typical spread na 0.3 bps of the share price, while Tesla own na 1.6 bps. The thin small caps reach 162.5 and 72.7 bps. Single-digit basis points mean say the spread tight. Spread wey pass roughly 1% of the share price na where limit order fit really help.

Who dey keep the bid-ask spread?

Whoever supply the quote, normally a market maker, dey earn the spread when both sides of the quote fill. Na compensation for being ready to trade at any time. E no be fee wey your broker or the exchange collect.

Wide bid-ask spread good or bad?

Wide spreads increase your cost for each round trip, as the 100-share cost column for the table above show. Wide spread still carry information: fewer participants dey quote, and the last trade price no be as reliable an estimate of wetin your order go actually get.

Why ask price higher than bid?

Na how the market structure be. Bid na the best price wey buyers go pay, while ask na the best price wey sellers go accept. Anytime the two meet, the exchange match dem into trade immediately and the quote move forward. Any standing quote always show ask at or above bid.

Bid-ask spreads matter for long-term investors?

E matter less for active traders, and the data show the scale: 100-share round trip for SPY cost $2.00 in typical spread. To pay am once every ten years na small noise. But if you dey pay thin-stock spread every week, e go build into serious money.


Every number above dey come from stored, inspectable query. You fit expand the SQL under any panel to audit am. If you wan measure spread for ticker wey you own, ask the same questions for plain English on the Strasmore terminal.

#spreads#liquidity#market structure#trading costs#quotes