Strasmore Research
Learn am Matt ConnorBy Matt Connor · data as of September 19, 2026 · refreshed weekly

Wetin Be Liquidity for Stock Market? Spread and Volume

Liquidity for stock market na how fast you fit buy or sell without price shift. We measure am with the spread and daily volume, from SPY down to thin stocks.

Liquidity na how fast and how cheap you fit turn something to cash without spoil the price. Cash na the most liquid thing wey you get, e don already be money. Land or motor na the other extreme: you fit wait months before serious buyer show, and you go still shave the price before e gree pay. For stock market, liquidity na that same idea for shares: how quick you fit buy or sell, and how much the price go shift before your order finish. The sweet part be say for US stocks, nobody need to guess am. Two numbers dey measure am, the bid-ask spread and daily volume, and every figure for this page come straight from the tape.

Wetin be liquidity for stock market?

Any minute wey market open, two prices dey stand for every stock. The bid na the highest price wey somebody don ready to pay right now. The ask na the lowest price wey somebody don ready to sell right now. The gap between the two na the bid-ask spread, and the best bid and best ask across all the US exchanges together na wetin dem dey call the NBBO.

Liquid stock mean say that gap tight, plenty shares dey wait for both sides, and your order go fill sharp sharp without move the price. Thin stock mean the gap wide, only small shares dey behind am, and one normal-size order fit push the price by itself. E be spectrum, no be yes-or-no matter, and e dey change from hour to hour.

If you don trade for Nigerian Exchange before, you sabi this feeling already. You drop sell order for one small-cap and e just sit down there. One day. Two days. Sometimes one full week before any buyer show for your price. That na low liquidity, plain and simple. E no mean say the company bad; e mean say few people dey stand for that queue. For the big US names, the same waiting dey measured in fractions of one second. The tables below put the two ends of that ladder side by side.

How dem dey measure liquidity? Start with the bid-ask spread

The first measure na the spread itself, written as a percentage of the mid price (the point halfway between bid and ask). Percentage matter pass cents, since one cent on a $600 stock na different story from one cent on a $9 stock. To make am concrete, we take six US names, from the SPY ETF and Apple down to two small companies wey hardly trade, and we check every quote update for one full regular session, Sep 10, 2026. The last numeric column convert the spread to wetin one round trip (buy, then sell back straight away) go cost you on $1,000.

QueryBid-ask spread as % of mid: six US names on one session
tickermedian_spread_centsmedian_spread_pctround_trip_cost_per_1000_usdquotes_seenpinned_label
SPY20.00260.032.74 millionSep 10, 2026
KO10.01130.11291.13 thousandSep 10, 2026
AAPL40.01230.12849.29 thousandSep 10, 2026
HOG30.11191.1245.17 thousandSep 10, 2026
NATH460.47024.7361.00Sep 10, 2026
DJCO5650.87168.729.90 thousandSep 10, 2026
The exact SQL behind every number
SELECT
    ticker,
    round(quantileDeterministic(0.5)(spread_usd, det) * 100, 1)             AS median_spread_cents,
    round(quantileDeterministic(0.5)(spread_pct, det), 4)                    AS median_spread_pct,
    round(quantileDeterministic(0.5)(spread_pct, det) * 10, 2)               AS round_trip_cost_per_1000_usd,
    formatReadableQuantity(count())                                          AS quotes_seen,
    formatDateTime(min(sip_timestamp), '%b %e, %Y', 'America/New_York')      AS pinned_label
FROM
(
    SELECT
        ticker,
        sip_timestamp,
        toFloat64(ask_price) - toFloat64(bid_price)                                   AS spread_usd,
        (toFloat64(ask_price) - toFloat64(bid_price))
            / ((toFloat64(ask_price) + toFloat64(bid_price)) / 2) * 100               AS spread_pct,
        cityHash64(toString(sip_timestamp), ifNull(toString(sequence_number), ''))    AS det
    FROM global_markets.cache_stocks_quotes
    WHERE ticker IN ('SPY', 'AAPL', 'KO', 'HOG', 'NATH', 'DJCO')
      AND sip_timestamp >= toDateTime('2026-09-10 08:00:00', 'UTC')
      AND sip_timestamp <  toDateTime('2026-09-11 01:00:00', 'UTC')
      AND (toHour(toTimeZone(sip_timestamp, 'America/New_York')) * 60
           + toMinute(toTimeZone(sip_timestamp, 'America/New_York'))) >= 570
      AND (toHour(toTimeZone(sip_timestamp, 'America/New_York')) * 60
           + toMinute(toTimeZone(sip_timestamp, 'America/New_York'))) < 960
      AND bid_price > 0
      AND ask_price > bid_price
)
GROUP BY ticker
ORDER BY median_spread_pct ASC
Run am yourself

See how wide the range be. SPY sit for the tight end: median spread of 2 cents, wey be 0.0026% of the price. Buy $1,000 worth and sell am back the same minute, and the spread chop about $0.03. For the other end, DJCO show median spread of 565 cents, or 0.8716%, and that same $1,000 round trip chop about $8.72. Same country, same trading day; the only difference na how many people dey queue for each name. The quotes_seen column count how many times the best price change during that one session, and the distance between the top and bottom of that column na liquidity too.

Volume: how many shares dey change hand every day

Spread na the cost side of liquidity. Volume na the activity side: how many shares, and how many dollars, dey trade on a normal day. Average daily volume just mean you add the shares for a stretch of sessions and divide by the number of sessions. Here we use the 20 sessions from Aug 13 to Sep 10, 2026, for the same six names, and we add the dollar version, since 10,000 shares of a $500 stock na far more money than 10,000 shares of a $10 stock.

QueryAverage daily share and dollar volume over 20 sessions
tickeravg_shares_kshares_labelavg_dollar_volume_mobs_countcovers_fromcovers_to
SPY36879.536.88 million28313.220Aug 13Sep 10
AAPL42014.942.01 million13253.620Aug 13Sep 10
KO14478.614.48 million129120Aug 13Sep 10
HOG1780.61.78 million49.220Aug 13Sep 10
DJCO67.967.92 thousand41.620Aug 13Sep 10
NATH2626.00 thousand2.520Aug 13Sep 10
The exact SQL behind every number
SELECT
    ticker,
    round(avg(day_volume) / 1e3, 1)                     AS avg_shares_k,
    formatReadableQuantity(avg(day_volume))             AS shares_label,
    round(avg(day_volume * day_price) / 1e6, 1)         AS avg_dollar_volume_m,
    toString(count())                                   AS obs_count,
    formatDateTime(min(date), '%b %e')                  AS covers_from,
    formatDateTime(max(date), '%b %e')                  AS covers_to
FROM
(
    SELECT
        ticker,
        date,
        max(toFloat64(volume))                                      AS day_volume,
        any(ifNull(toFloat64(vwap), toFloat64(close)))              AS day_price
    FROM global_markets.stocks_daily_aggs
    WHERE ticker IN ('SPY', 'AAPL', 'KO', 'HOG', 'NATH', 'DJCO')
      AND date >= toDate('2026-08-13')
      AND date <= toDate('2026-09-10')
    GROUP BY ticker, date
)
GROUP BY ticker
ORDER BY avg_dollar_volume_m DESC
Run am yourself

SPY move about 36.88 million shares every day, worth around $28313.2 million per session. Scroll to the bottom and NATH do about 26.00 thousand shares a day, roughly $2.5 million. Put the two dollar figures side by side and the gap go tell you the story by itself.

Notice too say volume and spread move together: the names wey trade the most dollars dey carry the tightest spreads. Market makers, the firms wey dey quote both bid and ask all day, fit quote tight where dem sure say dem go offload position quick; where trades scarce, dem quote wide to cover the risk of holding the shares for long. How market makers make money explain that business in full.

E dey trade every minute? The NGX-style wait, on the US tape

Remember that NGX sell order wey sit down for days? The US tape get its own version of that wait, and we fit count am. One regular session get 390 one-minute slots (6.5 hours times 60). For each of the six names, we count how many of those slots see at least one trade on Sep 10, 2026.

QueryOf 390 one-minute slots in the session, how many saw a trade?
tickerslots_with_a_tradeactive_share_pctshares_traded_label
KO3901008.27 million
SPY39010037.26 million
AAPL39010058.95 million
HOG34387.91.08 million
DJCO10226.242.45 thousand
NATH266.718.56 thousand
The exact SQL behind every number
SELECT
    ticker,
    count()                                        AS slots_with_a_trade,
    round(count() / 390 * 100, 1)                  AS active_share_pct,
    formatReadableQuantity(sum(minute_volume))     AS shares_traded_label
FROM
(
    SELECT
        ticker,
        window_start,
        max(toFloat64(volume)) AS minute_volume
    FROM global_markets.delayed_stocks_minute_aggs
    WHERE ticker IN ('SPY', 'AAPL', 'KO', 'HOG', 'NATH', 'DJCO')
      AND window_start >= toDateTime('2026-09-10 08:00:00', 'UTC')
      AND window_start <  toDateTime('2026-09-11 01:00:00', 'UTC')
      AND (toHour(toTimeZone(window_start, 'America/New_York')) * 60
           + toMinute(toTimeZone(window_start, 'America/New_York'))) >= 570
      AND (toHour(toTimeZone(window_start, 'America/New_York')) * 60
           + toMinute(toTimeZone(window_start, 'America/New_York'))) < 960
    GROUP BY ticker, window_start
    HAVING minute_volume > 0
)
GROUP BY ticker
ORDER BY slots_with_a_trade DESC
Run am yourself

KO print at least one trade in 390 of the 390 slots, 100% of the session. At the bottom, NATH print a trade in only 26 slots; for every other minute of that day, nobody trade am at all. That na the same "sit down and wait" wey you know from Lagos, compressed into one afternoon instead of one week. If you hold a stock like that and you wan comot quick, the tape no promise you a buyer for the exact minute you want am.

Liquidity no dey constant, even inside one day

The spread you pay depend on the time you trade, not only on the name. Take NATH, one of the thin names from the ladder, and cut the same session into half-hour blocks.

QueryNATH: median bid-ask spread by half hour on one session
et_timemedian_spread_pctquote_update_count
09:301.920
10:001.8254
10:300.33662
11:000.18450
12:000.42826
12:300.91423
13:000.90427
13:300.6919
14:000.4586
14:300.4287
15:000.42837
15:300.57440
The exact SQL behind every number
SELECT
    formatDateTime(toStartOfInterval(sip_timestamp, INTERVAL 30 MINUTE), '%H:%i', 'America/New_York') AS et_time,
    round(quantileDeterministic(0.5)(spread_pct, det), 3)                                             AS median_spread_pct,
    count()                                                                                            AS quote_update_count
FROM
(
    SELECT
        sip_timestamp,
        (toFloat64(ask_price) - toFloat64(bid_price))
            / ((toFloat64(ask_price) + toFloat64(bid_price)) / 2) * 100               AS spread_pct,
        cityHash64(toString(sip_timestamp), ifNull(toString(sequence_number), ''))    AS det
    FROM global_markets.cache_stocks_quotes
    WHERE ticker = 'NATH'
      AND sip_timestamp >= toDateTime('2026-09-10 08:00:00', 'UTC')
      AND sip_timestamp <  toDateTime('2026-09-11 01:00:00', 'UTC')
      AND (toHour(toTimeZone(sip_timestamp, 'America/New_York')) * 60
           + toMinute(toTimeZone(sip_timestamp, 'America/New_York'))) >= 570
      AND (toHour(toTimeZone(sip_timestamp, 'America/New_York')) * 60
           + toMinute(toTimeZone(sip_timestamp, 'America/New_York'))) < 960
      AND bid_price > 0
      AND ask_price > bid_price
)
GROUP BY et_time
ORDER BY et_time
Run am yourself

For the first half hour (the 09:30 block, Eastern time), the median spread stand at 1.9%. By the 13:00 block e dey 0.904%, and for the last block (15:30) e read 0.574%. The bars show how many times the best price change inside each block. The first minutes after the open carry their own wahala for most names, and why spreads widen at the open go through the mechanics. Point be say "how liquid" na question wey get a time attached to am.

Why liquidity matter for small account

Plenty beginners think say liquidity na big-fund matter. E dey bite small accounts pass, in two ways.

  • You pay the spread every single time. A market order na "fill me now at whatever price dey there". For a liquid name, that "whatever" na about one cent from the mid. For a thin name, e fit be a full percent on the round trip before any commission, and the ladder above show am in dollars.
  • Your own order fit move the price. For a thin name, the best ask fit carry only 100 shares. Send 500 shares at market and the first 100 fill at the best ask, the next batch fill at the next price up, and so on till you walk the price up against yourself.

Limit order na the tool for that: you name your price and you wait, the same way you already dey do on NGX. Market order vs limit order walk through the trade-off in detail, and what it costs to trade a stock add the spread to the other costs wey no show on your statement. For options the same logic apply with more force, since option spreads dey wider than the stock under them; see liquid vs volatile options before you touch a contract wey nobody dey quote.

One last thing, make nobody confuse you: accountants use the same word for company balance sheet. Current ratio and quick ratio measure whether a company fit pay its short-term bills from its short-term assets. That na accounting liquidity, a different question entirely, and e no be wetin the tables on this page dey measure.

FAQ

Wetin be liquidity in simple terms?

Liquidity na how fast you fit turn something to cash without drop the price. Cash na the most liquid asset. For a stock, e mean how quick you fit buy or sell without the price shift against you.

How I go know if a stock liquid?

Check two numbers: the bid-ask spread as a percentage of the price, and the average daily dollar volume. Tight spread (a small fraction of one percent) plus millions of dollars a day na liquid stock. Wide spread plus a few thousand shares a day na thin stock.

Wetin be the difference between liquidity and volatility?

Liquidity na how easy you fit trade without move the price. Volatility na how much the price dey move on its own. A stock fit be liquid and volatile at the same time (many big tech names), or thin and quiet.

Why liquidity matter for small trader?

The spread na a cost you pay on every round trip, and for a thin name that cost fit reach a full percent or more. A market order for a thin name fit also fill at worse and worse prices as e chop through the small quantity available at each level.


Every table for this page carry the exact SQL under am; open any one and see how the number come out. To run the same check on a ticker wey you dey eye, ask am in plain English on the Strasmore terminal.