Strasmore Research
Learn am Matt ConnorBy Matt Connor · Updated 2026-07-25 · data as of July 25, 2026 · refreshed weekly

How much e cost to trade stock, measured well well

Commission na zero, but every stock trade dey pay bid-ask spread. See di real cost of trading stocks, measured in basis points across 12 popular names.

Di cost wey dey for trading stocks no drop go zero wen commissions drop. Every marketable order still dey pay di bid-ask spread — na di gap between di highest price wey buyers go pay and di lowest price wey sellers go accept — half of am dey go inside, half dey come out. Dis page dey measure dat toll for basis points across twelve popular stocks and ETFs, from tick-level quote data, with di exact SQL wey dey behind every number attached.

Commission go zero — spread no gree follow

Stock no dey ever get one price; e dey get two. Di bid na di best offer wey dey ground to buy; di ask na di best offer wey dey ground to sell. To trade now-now mean say you go cross dat gap: market buy go fill for di ask, market sell go fill for di bid, and di difference go remain with whoeva post di quote — most times na professional market maker wey dey quote both sides di whole session. Wetin bid-ask spread be cover di mechanics finish; dis page dey price dem.

One example wey we dey use for head go make di arithmetic clear. Stock wey dem quote $20.00 bid / $20.05 ask get midpoint of $20.025 — na di usual reference for im fair value for dat moment. Market buy go pay $20.05, wey sit 2.5 cents above di midpoint: half of di quoted width. Market sell go receive $20.00, wey give up di oda half. Do both — round trip — and di full five cents go remain behind for every share, with no commission line anywia.

Di professional unit for dis cost na di basis point (bp) — one hundredth of one percent. To quote di spread as share of di midpoint put single-digit-dollar ETF and ETF wey cost several hundred dollars for di same scale, and di differences wey e reveal big pass wetin most zero-commission traders fit imagine.

Di cost-to-trade ladder: twelve names, wey dem measure

Below na twelve stocks and ETFs wey plenty people hold, rank by di median quoted spread as percentage of di midpoint. Di data na every update to di NBBO — di consolidated best bid and offer across all US exchanges, di quote wey brokerage app dey show — count inside one fixed clock window (13:30–19:59 UTC), wey match di 9:30 a.m.–4:00 p.m. Eastern regular session during daylight-saving months — di state of every window wey dis page don measure so far. Di window cover di most recent completed sessions for our data and e deliberately stop few days before today, so any day wey dem never fully ingest no go enter di medians. Updates wey miss one side, or wey get ask wey dey at or below di bid, dem exclude am from di medians and count am for di last column instead of dem just drop am silently.

QueryDi cost-to-trade ladder — median quoted spread in bps of di midpoint, regular hours, recent completed sessions
The exact SQL behind every number
SELECT ticker,
       round(quantileExactIf(0.5)(toFloat64(ask_price - bid_price) / (toFloat64(ask_price + bid_price) / 2), bid_price > 0 AND ask_price > bid_price) * 10000, 2) AS typical_spread_bps,
       round(quantileExactIf(0.5)(toFloat64(ask_price - bid_price), bid_price > 0 AND ask_price > bid_price) * 100, 1) AS typical_spread_cents,
       round(count() / 1e6, 1) AS quote_updates_m,
       round(100 * countIf(bid_price <= 0 OR ask_price <= 0 OR ask_price <= bid_price) / count(), 2) AS pct_updates_excluded
FROM global_markets.cache_stocks_quotes
WHERE ticker IN ('SPY', 'QQQ', 'IWM', 'AAPL', 'MSFT', 'NVDA', 'AMD', 'TSLA', 'KO', 'DIS', 'F', 'SOXS')
  AND sip_timestamp >= toDateTime(today() - 10)
  AND sip_timestamp < toDateTime(today() - 3)
  AND (toHour(sip_timestamp) * 60 + toMinute(sip_timestamp)) BETWEEN 810 AND 1199
GROUP BY ticker
ORDER BY typical_spread_bps

For di top, SPY dey at 0.27 bps — na fraction of just one basis point — one median wey rest on 14.9 million quote updates. For di fourth rung, NVDA quote 0.99 bps. Di bottom rung, SOXS, measure 23.17 bps — and im cents column na di quiet lesson of di whole table: di quoted gap na 1¢, one penny-scale gap wey dey attached to di board im largest percentage cost. Cents dey flatter cheap stocks; basis points dey price dem honestly.

One basis point na one dollar for every $10,000

Di bps column dey convert to money with fixed arithmetic: for $10,000 order, one basis point be one dollar (10,000 × 0.0001 = 1). Read di ladder as round-trip price list per $10,000 wey dem trade: di top rung 0.27 bps na around $0.27; di bottom rung 23.17 bps na around $23.17. To cross once — only buy, or only sell — na half of each figure.

Frequency dey scale di toll. One hypothetical 20 bp spread wey dem cross round-trip once a week on di same $10,000 dey add up to roughly $1,040 over 52 weeks (20 × $1 × 52) — na about one percent of di account, at zero commission. Di same habit on one hypothetical 1 bp spread total about $52 a year. Which rung one name siddon for matter pass any commission line wey ever exist.

Mega-cap stock versus leveraged inverse ETF

Di bottom step of di ladder suppose get name, and di same tin go for mega-cap wey dey inside di tight top third. NVIDIA (NVDA) na mega-cap semiconductor stock. SOXS na di Direxion Daily Semiconductor Bear 3X shares — na leveraged inverse ETF wey dem build to move three times opposite to one semiconductor index every day, dem dey reset am daily. Dem measure both of dem over di same window, di same way:

QueryNVDA vs SOXS — median quoted spread over di window, plus di smallest single-session gap
The exact SQL behind every number
WITH per_day AS (
    SELECT toDate(toTimeZone(sip_timestamp, 'America/New_York')) AS et_date,
           quantileExactIf(0.5)(toFloat64(ask_price - bid_price) / (toFloat64(ask_price + bid_price) / 2), ticker = 'NVDA' AND bid_price > 0 AND ask_price > bid_price) * 10000 AS nvda_bps,
           quantileExactIf(0.5)(toFloat64(ask_price - bid_price) / (toFloat64(ask_price + bid_price) / 2), ticker = 'SOXS' AND bid_price > 0 AND ask_price > bid_price) * 10000 AS soxs_bps
    FROM global_markets.cache_stocks_quotes
    WHERE ticker IN ('NVDA', 'SOXS')
      AND sip_timestamp >= toDateTime(today() - 10)
      AND sip_timestamp < toDateTime(today() - 3)
      AND (toHour(sip_timestamp) * 60 + toMinute(sip_timestamp)) BETWEEN 810 AND 1199
    GROUP BY et_date
),
whole AS (
    SELECT quantileExactIf(0.5)(toFloat64(ask_price - bid_price) / (toFloat64(ask_price + bid_price) / 2), ticker = 'NVDA' AND bid_price > 0 AND ask_price > bid_price) * 10000 AS nvda_bps,
           quantileExactIf(0.5)(toFloat64(ask_price - bid_price) / (toFloat64(ask_price + bid_price) / 2), ticker = 'SOXS' AND bid_price > 0 AND ask_price > bid_price) * 10000 AS soxs_bps
    FROM global_markets.cache_stocks_quotes
    WHERE ticker IN ('NVDA', 'SOXS')
      AND sip_timestamp >= toDateTime(today() - 10)
      AND sip_timestamp < toDateTime(today() - 3)
      AND (toHour(sip_timestamp) * 60 + toMinute(sip_timestamp)) BETWEEN 810 AND 1199
)
SELECT round((SELECT nvda_bps FROM whole), 2) AS nvda_spread_bps,
       round((SELECT soxs_bps FROM whole), 2) AS soxs_spread_bps,
       round((SELECT soxs_bps FROM whole) / (SELECT nvda_bps FROM whole), 1) AS times_wider,
       (SELECT count() FROM per_day) AS sessions_measured,
       round((SELECT min(soxs_bps / nvda_bps) FROM per_day), 1) AS smallest_daily_gap_x

NVDA im median quoted spread measure 0.99 bps. SOXS own measure 23.17 bps — e wide pass am 23.3 times. Across all di 5 sessions inside di window, di single-session gap never squeeze below 14.1 times. Di same pair siddon for di extremes of July 7 semiconductor break — na session wey measure dis exact contrast tick by tick for im morning lows.

QueryNVDA vs SOXS — median quoted spread by session (bps of di midpoint)
The exact SQL behind every number
SELECT et_date,
       nvda_spread_bps,
       soxs_spread_bps,
       round(soxs_spread_bps / nvda_spread_bps, 1) AS times_wider
FROM (
    SELECT toDate(toTimeZone(sip_timestamp, 'America/New_York')) AS et_date,
           round(quantileExactIf(0.5)(toFloat64(ask_price - bid_price) / (toFloat64(ask_price + bid_price) / 2), ticker = 'NVDA' AND bid_price > 0 AND ask_price > bid_price) * 10000, 2) AS nvda_spread_bps,
           round(quantileExactIf(0.5)(toFloat64(ask_price - bid_price) / (toFloat64(ask_price + bid_price) / 2), ticker = 'SOXS' AND bid_price > 0 AND ask_price > bid_price) * 10000, 2) AS soxs_spread_bps
    FROM global_markets.cache_stocks_quotes
    WHERE ticker IN ('NVDA', 'SOXS')
      AND sip_timestamp >= toDateTime(today() - 10)
      AND sip_timestamp < toDateTime(today() - 3)
      AND (toHour(sip_timestamp) * 60 + toMinute(sip_timestamp)) BETWEEN 810 AND 1199
    GROUP BY et_date
)
ORDER BY et_date

For 2026-07-08, wey be di first session of di window, NVDA im median quote siddon 1.52 bps wide against 21.48 bps for SOXS — na 14.1 times di cost. Di order no dey ever shake session to session: di cheap name remain cheap, di expensive one remain expensive. Di step wey one name dey for di cost ladder na standing property, no be mood of di day.

Why cheap share cost more to trade pass expensive one

Part of the gap na market plumbing. US stocks and ETFs wey price pass $1 dey quote for one-cent steps, and one cent na the smallest gap wey quote fit show. Fixed penny na different fraction for different share prices: e no dey show face against $700 ETF, but e big well-well for $4 one. The table wey dey below measure how that floor dey tie — the share of each name own quote updates wey dey exactly one cent wide, wetin one penny equal for bps for that share price, and how far the median spread dey from the floor.

QueryDi one-cent floor — share price, percent of quotes wey exactly one cent wide, and wetin one penny cost in bps
The exact SQL behind every number
SELECT ticker,
       typical_share_price,
       pct_quotes_at_one_cent,
       round(100 / typical_share_price, 2) AS one_cent_in_bps,
       typical_spread_bps,
       round(abs(typical_spread_bps - 100 / typical_share_price), 2) AS dist_from_floor_bps
FROM (
    SELECT ticker,
           round(quantileExactIf(0.5)((toFloat64(ask_price) + toFloat64(bid_price)) / 2, bid_price > 0 AND ask_price > bid_price), 2) AS typical_share_price,
           round(100 * countIf(bid_price > 0 AND ask_price > bid_price AND abs(toFloat64(ask_price - bid_price) - 0.01) < 0.001) / countIf(bid_price > 0 AND ask_price > bid_price), 1) AS pct_quotes_at_one_cent,
           round(quantileExactIf(0.5)(toFloat64(ask_price - bid_price) / (toFloat64(ask_price + bid_price) / 2), bid_price > 0 AND ask_price > bid_price) * 10000, 2) AS typical_spread_bps
    FROM global_markets.cache_stocks_quotes
    WHERE ticker IN ('SPY', 'AAPL', 'KO', 'F', 'SOXS')
      AND sip_timestamp >= toDateTime(today() - 10)
      AND sip_timestamp < toDateTime(today() - 3)
      AND (toHour(sip_timestamp) * 60 + toMinute(sip_timestamp)) BETWEEN 810 AND 1199
    GROUP BY ticker
)
ORDER BY typical_share_price DESC

SPY, wey dey trade around $750.32 a share, dey spend 23.4% of im updates exactly one cent wide — and for the highest price share for board, one penny na just 0.13 bps. For mid-board, KO wey dey around $83.82 dey sit for the floor for 65.4% of updates. Then the floor take over completely: F wey dey around $13.86 dey one cent wide for 99% of updates, and SOXS wey dey around $4.31 for 100% — with median spreads dey inside 0 and 0.03 bps of their one-cent floors. For the cheapest shares, the percentage cost of trading na the share price wey wear different unit: the quote no fit get gap wey pass one penny.

How to keep di toll small

  • Limit orders dey name di price. Market order just collect any price wey di quote show; limit order go fill only for di price wey you set or better one. Buy order wey dey rest for bid dey collect di spread instead of paying am when seller come meet am — di trade-off be say e fit no ever fill.
  • Di time matter well well. Quoted spreads dey wide pass before market open, around close, and for extended hours, and e dey tight pass for di liquid middle of regular session — di intraday chart inside our bid-ask spread guide show di U-shape with real data.
  • Read basis points, no be cents. Di same penny na 0.13 bps for SPY and 23.2 bps for SOXS. "Tight" one-cent quote fit be di most expensive line for di board.
  • Count di round trips. Each one dey pay di full quoted width once, and di toll dey scale with turnover, no be with account size or wetin you plan. Activity gauges like relative volume dey measure when name dey trade far above im own normal — heavy-turnover habits na where spread costs dey quietly pile up.

FAQ

E cost how much to trade stock wey get zero commissions?

Na half of di bid-ask spread wey dem quote for di way in, and half for di way out. Wen we measure am across our twelve-name ladder, dat round trip dey range from 0.27 bps of di trade value (SPY) go reach 23.17 bps (SOXS) — e be like $0.27 to $23.17 for every $10,000 wey you trade.

Wetin be basis point for dollar terms?

One basis point na one hundredth of one percent: e be $1 for every $10,000, $10 for every $100,000. Spread wey dem quote for bps dey also work as round-trip price for every $10,000 — if we talk say spread na 20 bp, e go cost about $20.

Why leveraged ETFs get spread wey wide like dat for percentage terms?

Na because low share prices dey meet di one-cent minimum quote increment. Di cheapest name for our board, SOXS, dey trade near $4.31 and 100% of im quotes dey exactly one penny wide — and one penny for dat share price na 23.2 bps of every trade.

Bid-ask spread dey matter for long-term investors?

E no dey matter reach like for active traders. One single round trip for di ladder top rung measure 0.27 bps — e be like $0.27 for every $10,000 — and to pay dat one once for ten years na small thing. Di cost dey follow turnover, no be holding period.

Na only di spread remain as trading cost?

Na im be di per-trade toll wey every marketable order dey pay, and na im dis page dey measure. Oda meters dey: big orders fit move di price before dem finish fill, funds dey charge expense ratios as time dey go, and margin dey carry interest. None of dem dey replace di spread; dem just dey add join am for top.


Every panel wey dey up so get di exact SQL wey produce am — open one, swap in di tickers wey you dey trade for real, and price your own cost-to-trade ladder for Strasmore terminal.