When Do Index Funds Trade? ETFs vs Mutual Funds
When do index funds trade? An index ETF prices all day like a stock. An index mutual fund does not trade intraday: it fills at the NAV after 4 p.m.
When do index funds trade? Two answers hide inside that one question, and the one that applies to you depends on the wrapper you hold. An index ETF trades continuously while the market is open, at whatever price a buyer and a seller agree on right then. An index mutual fund does not trade during the day at all: every order placed before the cutoff, whether at 9:31 a.m. or 3:55 p.m., fills at the same net asset value (NAV), struck once after the 4:00 p.m. close.
The fork that answers the question
An index fund is a rule for holding a basket of securities. The rule says nothing about how you buy it, and the two containers that carry it behave nothing alike at the point of execution. Both wrappers can track the identical index and charge nearly the identical fee.
An exchange-traded fund (ETF) has a ticker and a live two-sided quote on an exchange. You send an order, it meets someone else's order, and your fill price is known in about a second.
A mutual fund has no listing and no quote. Your order goes through your broker to the fund company, the fund values its basket after the close, and that single number becomes the price for everyone who made the cutoff that day. Two shareholders who ordered seven hours apart pay the identical price. The full order-to-confirm walkthrough sits in when do mutual funds trade, and the arithmetic behind the price is in how mutual fund NAV is calculated.
When do index ETFs trade?
From the first print of the morning to the last print of the evening. The panel below follows two index ETFs through a single session, Tuesday, September 15, 2026: VOO, which tracks the S&P 500, and QQQ, which tracks the Nasdaq-100. Each row is a 30-minute bucket of New York clock time, and each value is the percent change from that fund's first print of the day.
| et_time | voo_change_pct | qqq_change_pct |
|---|---|---|
| 04:00 | -0.02 | -0.02 |
| 04:30 | -0.05 | -0.04 |
| 05:00 | -0.09 | -0.07 |
| 05:30 | 0.15 | 0.17 |
| 06:00 | 0.17 | 0.24 |
| 06:30 | 0.28 | 0.37 |
| 07:00 | 0.31 | 0.41 |
| 07:30 | 0.35 | 0.45 |
| 08:00 | 0.37 | 0.45 |
| 08:30 | 0.44 | 0.5 |
| 09:00 | 0.4 | 0.45 |
| 09:30 | 0.32 | 0.49 |
| 10:00 | 0.05 | 0.15 |
| 10:30 | -0.1 | -0.15 |
| 11:00 | 0.04 | 0.02 |
| 11:30 | 0 | -0.03 |
| 12:00 | 0.06 | 0 |
| 12:30 | 0.07 | -0.01 |
| 13:00 | -0.04 | -0.1 |
| 13:30 | 0.02 | -0.07 |
The exact SQL behind every number
WITH
bars AS
(
SELECT
ticker,
toTimeZone(window_start, 'America/New_York') AS et,
toFloat64(close) AS px
FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker IN ('VOO', 'QQQ')
AND window_start >= toDateTime('2026-09-15 04:00:00')
AND window_start < toDateTime('2026-09-16 04:00:00')
),
firsts AS
(
SELECT
ticker,
argMin(px, et) AS open_px
FROM bars
GROUP BY ticker
)
SELECT
formatDateTime(toStartOfInterval(b.et, INTERVAL 30 MINUTE), '%H:%i') AS et_time,
round(100 * (argMaxIf(b.px, b.et, b.ticker = 'VOO') / anyIf(f.open_px, f.ticker = 'VOO') - 1), 2) AS voo_change_pct,
round(100 * (argMaxIf(b.px, b.et, b.ticker = 'QQQ') / anyIf(f.open_px, f.ticker = 'QQQ') - 1), 2) AS qqq_change_pct
FROM bars AS b
INNER JOIN firsts AS f ON f.ticker = b.ticker
GROUP BY et_time
HAVING countIf(b.ticker = 'VOO') > 0
AND countIf(b.ticker = 'QQQ') > 0
ORDER BY et_time32 half-hour buckets carried prints in both funds, the first labeled 04:00 and the last 19:30, New York time. Regular trading runs from 9:30 a.m. to 4:00 p.m. Buckets outside those hours are the pre-market and post-market windows, where both funds trade at much thinner volume. By the final bucket, VOO stood 0.14% from where its day started, and QQQ -0.04%.
Every level on those two lines was a price someone could hit. That is what continuous trading means: the fund's price is whatever the order book says at the moment you ask.
How many prices does an index ETF have in one day?
Not one. The count runs into the hundreds of thousands. This panel counts VOO's trade prints per session over the last few weeks, alongside how many separate minutes of each day carried at least one trade.
| session_date | trade_prints_thousands | minutes_with_prints |
|---|---|---|
| 2026-09-02 | 264.1 | 636 |
| 2026-09-03 | 246.6 | 619 |
| 2026-09-04 | 302.1 | 631 |
| 2026-09-08 | 423.5 | 684 |
| 2026-09-09 | 322.6 | 650 |
| 2026-09-10 | 360.3 | 682 |
| 2026-09-11 | 270.1 | 635 |
| 2026-09-14 | 367.9 | 680 |
| 2026-09-15 | 356 | 659 |
| 2026-09-16 | 324.5 | 720 |
| 2026-09-17 | 231.4 | 699 |
| 2026-09-18 | 276.1 | 622 |
| 2026-09-21 | 330.6 | 735 |
| 2026-09-22 | 250.6 | 692 |
| 2026-09-23 | 272.2 | 663 |
| 2026-09-24 | 243.7 | 679 |
The exact SQL behind every number
SELECT
toString(toDate(toTimeZone(window_start, 'America/New_York'))) AS session_date,
round(sum(transactions) / 1000, 1) AS trade_prints_thousands,
count() AS minutes_with_prints
FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker = 'VOO'
AND window_start >= today() - 24
AND window_start < today() - 1
GROUP BY session_date
ORDER BY session_dateOn 2026-09-24, VOO printed about 243.7 thousand individual trades, across 679 distinct minutes of the day. The panel spans 16 sessions and the pattern holds across all of them. An index mutual fund tracking the same index over those 16 sessions offered its shareholders 16 prices in total: one per day, each struck after the tape went quiet.
When do index mutual funds trade?
Once per day, after the close, at a price that does not exist yet at the moment you place the order. The rule has a name, forward pricing, and it comes from SEC Rule 22c-1 rather than from broker policy. It has four practical consequences.
- Your price is unknown when you commit. You order in dollars or in shares, never at a price. The mechanics are in the mutual fund forward pricing rule.
- The cutoff is usually earlier than 4:00 p.m. ET. The fund's own deadline is the close. Your broker needs time to batch and transmit orders, and many brokers set an in-house deadline 15 to 90 minutes ahead of it. Check yours against broker order cutoff times.
- Limit orders do not apply. There is no order book for an instruction to rest in, and brokers reject limit and stop orders on mutual funds. See limit orders on mutual funds.
- The confirm arrives the next morning. The fund strikes NAV in the evening, your broker posts the executed trade overnight, and cash settles a business day or two later. See mutual fund settlement time.
Miss the cutoff by a minute and the order does not fail. It queues for the next session's NAV, which is a different unknown price one day further out.
Does the time of day change your price?
On the ETF side, yes, by however much the fund moved that day. On the mutual fund side, no: the minute you submitted is irrelevant as long as you beat the cutoff. The panel measures the size of that difference by taking each session's high and low and expressing the gap as a percent of the closing price.
| session_date | voo_range_pct | qqq_range_pct |
|---|---|---|
| 2026-08-12 | 0.47 | 0.6 |
| 2026-08-13 | 0.67 | 1.36 |
| 2026-08-14 | 0.43 | 0.83 |
| 2026-08-17 | 0.56 | 0.73 |
| 2026-08-18 | 0.34 | 0.87 |
| 2026-08-19 | 0.57 | 1.24 |
| 2026-08-20 | 0.8 | 0.9 |
| 2026-08-21 | 0.48 | 0.91 |
| 2026-08-24 | 0.41 | 1 |
| 2026-08-25 | 0.48 | 0.93 |
| 2026-08-26 | 0.44 | 0.71 |
| 2026-08-27 | 0.67 | 0.95 |
| 2026-08-28 | 0.91 | 1.26 |
| 2026-08-31 | 0.42 | 0.62 |
| 2026-09-01 | 0.68 | 1.08 |
| 2026-09-02 | 0.62 | 0.66 |
| 2026-09-03 | 0.84 | 1.29 |
| 2026-09-04 | 0.5 | 0.74 |
| 2026-09-08 | 0.59 | 0.88 |
| 2026-09-09 | 0.46 | 0.79 |
The exact SQL behind every number
SELECT
toString(date) AS session_date,
round(100 * toFloat64(maxIf(high, ticker = 'VOO') - minIf(low, ticker = 'VOO')) / toFloat64(anyIf(close, ticker = 'VOO')), 2) AS voo_range_pct,
round(100 * toFloat64(maxIf(high, ticker = 'QQQ') - minIf(low, ticker = 'QQQ')) / toFloat64(anyIf(close, ticker = 'QQQ')), 2) AS qqq_range_pct
FROM global_markets.stocks_daily_aggs
WHERE ticker IN ('VOO', 'QQQ')
AND date >= today() - 45
AND date < today() - 1
GROUP BY date
HAVING countIf(ticker = 'VOO') > 0
AND countIf(ticker = 'QQQ') > 0
ORDER BY dateOn 2026-09-24, VOO's high sat 0.74% above its low, and QQQ's 1.08%, each measured against that fund's own close. The band is the spread of prices an ETF buyer could have paid that day, depending purely on the minute of entry. Across the 31 sessions in the panel the band is usually narrow, and it is never zero. A mutual fund buyer received the one close-based number regardless of when the order went in.
What the ETF clock costs you
Instant execution carries a price tag, and it is not the expense ratio. An ETF quote has a bid (the best standing offer to buy) and an ask (the best standing offer to sell). The gap between them is the spread, paid on the way in and again on the way out. The panel below measures that gap for several large index ETFs over a five-minute slice of the morning of September 15, 2026, in basis points of the quote midpoint. One basis point is one hundredth of one percent.
| symbol | avg_spread_bps | p90_spread_bps |
|---|---|---|
| SPY | 0.273 | 0.395 |
| QQQ | 0.332 | 0.423 |
| VOO | 0.428 | 0.573 |
| IWM | 0.471 | 0.7 |
| IVV | 0.739 | 0.92 |
| DIA | 0.798 | 0.96 |
The exact SQL behind every number
SELECT
ticker AS symbol,
round(avg(20000 * toFloat64(ask_price - bid_price) / toFloat64(ask_price + bid_price)), 3) AS avg_spread_bps,
round(quantileDeterministic(0.9)(20000 * toFloat64(ask_price - bid_price) / toFloat64(ask_price + bid_price), toUInt64(sequence_number)), 3) AS p90_spread_bps
FROM global_markets.cache_stocks_quotes
WHERE ticker IN ('SPY', 'VOO', 'IVV', 'QQQ', 'DIA', 'IWM')
AND sip_timestamp >= toDateTime('2026-09-15 14:00:00')
AND sip_timestamp < toDateTime('2026-09-15 14:05:00')
AND ask_price > bid_price
AND bid_price > 0
GROUP BY ticker
ORDER BY avg_spread_bpsSPY showed the tightest average spread of the 6 funds at 0.273 basis points, and DIA the widest at 0.798. The 90th percentile column is the one worth studying. At 0.96 basis points for that same fund, it marks the wider moments a market order can land in. A mutual fund has no spread at all, which is the single genuine pricing advantage of the NAV clock.
An ETF's price can also sit a little above or below what its basket is worth, a premium or a discount. That gap is held in check by the machinery described in ETF creation and redemption and measured in ETF premium and discount to NAV.
Can you day trade an index fund?
An index ETF can mechanically be traded as often as your account rules allow, subject to the pattern day trader rule on a margin account. An index mutual fund cannot be day traded at all. One price per day leaves nothing to trade against intraday, and fund companies police round trips with frequent-trading blocks on top of that. The wrapper-by-wrapper detail is in can you day trade an index fund, and the broader comparison of the two containers is in mutual funds vs ETFs.
FAQ
What time do index mutual fund orders execute?
After the market closes. An order that reaches the fund before the 4:00 p.m. ET cutoff receives that day's NAV, normally calculated and published in the evening. An order arriving later receives the next business day's NAV. Your broker's own deadline is often earlier than the fund's.
Can I buy an index fund after hours?
An index ETF trades in the pre-market and post-market sessions when your broker routes there, at thinner volume and wider spreads. An index mutual fund order can be entered at any hour, it simply queues for the next NAV instead of filling when you send it.
Why does my index mutual fund price only update once a day?
A mutual fund has no intraday market in its shares and no quote to move. The number on your screen is the last NAV struck, and it stays there until the next close has been processed.
Do index ETFs trade at NAV?
Close to it, though not exactly. An ETF trades at whatever the order book prints, which can sit slightly above NAV (a premium) or slightly below it (a discount). Authorized participants arbitrage large gaps through creation and redemption, which keeps liquid index ETFs within a few basis points of fair value most of the time.
Data notes
The intraday and spread panels are pinned to September 15, 2026, so their numbers stay fixed on every regeneration. The minute-bar panels cover the whole New York calendar day, midnight to midnight, rather than a hardcoded session window. Pre-market and post-market buckets appear for that reason. Spreads come from the national best bid and offer, filtered to quotes where the ask exceeds the bid. The rolling panels stop a day short of today, since the most recent session can still be filling in.
Every panel here ships with the SQL that produced it, in an expander under each chart. To run the same counts on a fund you hold, ask the question in plain English on the Strasmore terminal.