Strasmore Research
Learn am Matt ConnorBy Matt Connor · Updated 2026-07-25

When mutual fund dey trade? NAV pricing at 4 pm

Mutual funds dey trade once a day, dem price am at di 4 pm ET NAV. No intraday price, no limit order. Check when order go fill, broker cutoff, and T+1 settlement.

Mutual funds no dey trade during market hours at all. Every buy and sell order for traditional mutual fund — no matter when you place am — dey execute just once per day, at di fund net asset value (NAV) wey dem compute after di 4:00 pm ET close. Place order by 9:31 am or 3:59 pm, you go still get di same price, wey dem go determine hours later. Dis page dey walk you through di machine: di deadline, one worked example, di measured physical event wey dem dey strike every NAV from, plus di exceptions.

How di once-a-day cycle dey work

Mutual fund order na instruction to di fund company, no be exchange order: "buy $500 of dis fund." By 4:00 pm ET, di fund go value every holding for im closing price, comot liabilities, divide by shares wey dey outstanding — dat na NAV — and every order wey dem receive before di cutoff go execute at am. Orders wey come after di cutoff go wait for tomorrow own NAV. Three consequences dey follow: no intraday fund prices (nothing dey exist between NAVs), no limit or stop orders (no price stream dey to trigger against), and no spreads — everybody dey transact at NAV, buyer and seller just dey same.

Di deadline no be broker etiquette; na federal law. SEC Rule 22c-1 — di "forward pricing" rule — dey require make every order execute at di next NAV wey dem compute after e arrive. To give person yesterday order today price wey person already know ("late trading") starkly illegal, and enforcement come real for 2003 (more dey below). One wrinkle: 4:00 pm ET na di fund own deadline. Brokers and retirement-plan recordkeepers need time to relay orders, and dia own cutoffs dey earlier — 1:00–3:00 pm ET same-day cutoffs common for 401(k) platforms. Your real deadline na whichever cutoff your platform publish, no be di bell.

One worked example: $1,000 wey dem place by 11 am

Make we talk say you submit $1,000 buy by 11:04 am. Nothing dey execute by 11:04 — di order just dey queue, and di price wey e go fill at neva exist. By 4:00 pm, di fund administrator go mark every holding for im official closing price. Make we talk say di portfolio mark at $50,762,500 against $500,000 of accrued fees and payables, with 2,000,000 fund shares outstanding:

  • Net assets: $50,762,500 − $500,000 = $50,262,500
  • NAV: $50,262,500 ÷ 2,000,000 shares = $25.13 per share (dem dey round NAV to di cent)
  • Your order: $1,000 ÷ $25.13 = 39.793 shares (fund shares dey carry three decimal places)

Di numbers na hypothetical; di sequence exact. Dollars wey you commit for morning, price wey dem discover for evening, three-decimal share count wey dem post dat night or di next morning. Forward pricing mean say nobody sabi execution price at order time — by design: nobody fit trade against price wey dem neva compute.

Di 4 pm close na real, physical event

NAV only get meaning as di closing prices wey dem build am from — and dose dey come from di closing auction, di biggest liquidity event of every trading day. E dey visible for tape:

QueryHow much of SPY day trades dey happen for di very end — July 10, 2026 regular session
The exact SQL behind every number
SELECT
    round(100.0 * sumIf(toFloat64(volume), formatDateTime(toTimeZone(window_start, 'America/New_York'), '%H:%i') >= '15:30') / sum(toFloat64(volume)), 1) AS final_half_hour_pct,
    round(100.0 * sumIf(toFloat64(volume), formatDateTime(toTimeZone(window_start, 'America/New_York'), '%H:%i') = '15:59') / sum(toFloat64(volume)), 1) AS final_minute_pct,
    round(sum(toFloat64(volume)) / 1e6, 1) AS session_shares_m
FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker = 'SPY'
  AND window_start >= '2026-07-10 13:30:00' AND window_start < '2026-07-10 20:00:00'

For dat session, 22.5% of SPY entire day trade for di final half hour, 2.4% for di last minute alone. One meaningful slice of dat concentration IS di mutual-fund machinery: index funds wey dey execute di day net flows at di very prices wey dem go strike dia NAVs from.

Zoom all di way in and di "closing price" wey one NAV dey hang on na one physical trade — di listing exchange dey batch every end-of-day order into one single cross, flagged for tape with im own condition code:

QueryDi print NAV wey dem strike from — AAPL closing auction cross, July 10, 2026
The exact SQL behind every number
SELECT
    round(toFloat64(maxIf(size, has(conditions, 8))) / 1e6, 2) AS auction_shares_m,
    formatDateTime(toTimeZone(argMaxIf(sip_timestamp, (size, sip_timestamp), has(conditions, 8)), 'America/New_York'), '%H:%i:%S') AS auction_time_et,
    toUInt8(formatDateTime(toTimeZone(argMaxIf(sip_timestamp, (size, sip_timestamp), has(conditions, 8)), 'America/New_York'), '%H:%i:%S') = '16:00:00') AS printed_at_1600,
    round(argMaxIf(price, (size, sip_timestamp), has(conditions, 8)), 2) AS auction_price,
    round(quantileDeterministicIf(0.5)(toFloat64(size), toUInt64(sip_timestamp), NOT has(conditions, 8) AND NOT hasAny(conditions, [15, 16, 38]))) AS median_trade_shares,
    round(100 * toFloat64(maxIf(size, has(conditions, 8))) / toFloat64(sumIf(size, NOT hasAny(conditions, [15, 16, 38]))), 1) AS auction_pct_of_volume
FROM global_markets.stocks_trades
WHERE ticker = 'AAPL'
  AND sip_timestamp >= toDateTime('2026-07-10 04:00:00', 'America/New_York')
  AND sip_timestamp < toDateTime('2026-07-10 20:00:00', 'America/New_York')

Apple entire closing auction print as one trade of 5.47 million shares by 16:00:00 ET on di dot — $315.32, di official close — against one median continuous trade of 5 shares, and e carry 16% of Apple consolidated volume. When one fund dey mark AAPL position by 4 pm, dis na di number wey dem go mark am at.

No be one lucky day — every session, and heaviest at month-end

One snapshot dey prove small thing. Di same yardstick, across di fifteen most recent complete sessions:

QuerySPY volume share of di final 30 minutes and final minute — last 15 sessions through July 10, 2026
The exact SQL behind every number
SELECT
    formatDateTime(session_date, '%Y-%m-%d') AS date,
    final_half_hour_pct,
    final_minute_pct
FROM (
    SELECT
        toDate(toTimeZone(window_start, 'America/New_York')) AS session_date,
        round(100.0 * sumIf(toFloat64(volume), formatDateTime(toTimeZone(window_start, 'America/New_York'), '%H:%i') >= '15:30') / sum(toFloat64(volume)), 1) AS final_half_hour_pct,
        round(100.0 * sumIf(toFloat64(volume), formatDateTime(toTimeZone(window_start, 'America/New_York'), '%H:%i') = '15:59') / sum(toFloat64(volume)), 1) AS final_minute_pct
    FROM global_markets.delayed_stocks_minute_aggs
    WHERE ticker = 'SPY'
      AND window_start >= toDateTime('2026-06-18 09:30:00', 'America/New_York')
      AND window_start < toDateTime('2026-07-10 16:00:00', 'America/New_York')
      AND formatDateTime(toTimeZone(window_start, 'America/New_York'), '%H:%i') BETWEEN '09:30' AND '15:59'
    GROUP BY session_date
)
ORDER BY session_date
QueryDi same 15 sessions, summarized — di close floor, average, and peak
The exact SQL behind every number
SELECT
    round(min(final_half_hour_pct), 1) AS min_half_hour_pct,
    round(avg(final_half_hour_pct), 1) AS avg_half_hour_pct,
    round(max(final_half_hour_pct), 1) AS max_half_hour_pct,
    formatDateTime(argMax(session_date, (final_half_hour_pct, session_date)), '%Y-%m-%d') AS heaviest_session
FROM (
    SELECT
        toDate(toTimeZone(window_start, 'America/New_York')) AS session_date,
        100.0 * sumIf(toFloat64(volume), formatDateTime(toTimeZone(window_start, 'America/New_York'), '%H:%i') >= '15:30') / sum(toFloat64(volume)) AS final_half_hour_pct
    FROM global_markets.delayed_stocks_minute_aggs
    WHERE ticker = 'SPY'
      AND window_start >= toDateTime('2026-06-18 09:30:00', 'America/New_York')
      AND window_start < toDateTime('2026-07-10 16:00:00', 'America/New_York')
      AND formatDateTime(toTimeZone(window_start, 'America/New_York'), '%H:%i') BETWEEN '09:30' AND '15:59'
    GROUP BY session_date
)

Across all 15 sessions from 2026-06-18 through 2026-07-10, di final half hour neva carry less dan 16.3% of SPY daily volume and e average 22.2% — for one stretch wey occupy under 8% of di 390-minute session clock. Di heaviest reading, 30.2%, print on 2026-06-30: di last trading day of June, and of di quarter.

Di calendar dey show for tape. Month-end na when fund flows dey batch together — payroll contributions dey invest, index funds dey rebalance, managers dey true up tracking — and di close na where dose orders dey execute. Split every H1 2026 session into two buckets:

QueryMonth-end sessions vs all oda sessions — SPY close concentration, January–June 2026
The exact SQL behind every number
SELECT
    countIf(is_month_end) AS month_end_sessions,
    countIf(NOT is_month_end) AS other_sessions,
    round(avgIf(final_half_hour_pct, is_month_end), 1) AS month_end_final_half_pct,
    round(avgIf(final_half_hour_pct, NOT is_month_end), 1) AS other_final_half_pct,
    round(avgIf(final_half_hour_pct, is_month_end) - avgIf(final_half_hour_pct, NOT is_month_end), 1) AS gap_pp,
    round(avgIf(final_minute_pct, is_month_end), 1) AS month_end_final_min_pct,
    round(avgIf(final_minute_pct, NOT is_month_end), 1) AS other_final_min_pct
FROM (
    SELECT
        session_date,
        final_half_hour_pct,
        final_minute_pct,
        session_date = max(session_date) OVER (PARTITION BY toStartOfMonth(session_date)) AS is_month_end
    FROM (
        SELECT
            toDate(toTimeZone(window_start, 'America/New_York')) AS session_date,
            100.0 * sumIf(toFloat64(volume), formatDateTime(toTimeZone(window_start, 'America/New_York'), '%H:%i') >= '15:30') / sum(toFloat64(volume)) AS final_half_hour_pct,
            100.0 * sumIf(toFloat64(volume), formatDateTime(toTimeZone(window_start, 'America/New_York'), '%H:%i') = '15:59') / sum(toFloat64(volume)) AS final_minute_pct
        FROM global_markets.delayed_stocks_minute_aggs
        WHERE ticker = 'SPY'
          AND toDate(toTimeZone(window_start, 'America/New_York')) >= '2026-01-01'
          AND toDate(toTimeZone(window_start, 'America/New_York')) < '2026-07-01'
          AND formatDateTime(toTimeZone(window_start, 'America/New_York'), '%H:%i') BETWEEN '09:30' AND '15:59'
        GROUP BY session_date
    )
)

Across H1 2026 6 month-end sessions, SPY final half hour average 25.1% of di day volume, versus 18.3% across di oda 117 sessions — na 6.9-point gap, with di final minute alone at 5.2% versus 3.2%. Di fund machinery wey dis page dey describe dey visible from orbit.

Mutual funds vs ETFs: di same portfolio, opposite clocks

Di comparison wey everybody really need: one S&P 500 mutual fund and one S&P 500 ETF dey hold di same stocks, but di ETF dey trade all session for exchange — live prices, limit orders, spreads, intraday mistakes and all — while di fund dey execute once at NAV with none of dose. None strictly better: di ETF dey give control of timing and price at di cost to pay spread and fit panic by 9:31 am; di fund dey give di day fair closing value at di cost of zero intraday agency. One subtle fund edge: one 2010-style air pocket no fit fill your order, since your order only ever meet di 4 pm NAV.

Di "no spreads" property dey measurable — by im absence. One ETF or stock buyer dey pay di bid-ask spread: buy at di ask, sell at di bid, di gap na di toll. One fund buyer neva touch am. Dat toll for di July 10 session, from di consolidated quote feed:

QueryDi spread wey fund buyer no dey ever pay — median quoted spread, July 10, 2026 regular session
The exact SQL behind every number
SELECT
    ticker,
    round(quantileDeterministic(0.5)(toFloat64(ask_price - bid_price), toUInt64(sip_timestamp)) * 100, 1) AS median_spread_cents,
    round(quantileDeterministic(0.5)(toFloat64(ask_price - bid_price) / (toFloat64(ask_price + bid_price) / 2), toUInt64(sip_timestamp)) * 10000, 2) AS round_trip_cost_per_10k_usd
FROM global_markets.cache_stocks_quotes
WHERE ticker IN ('SPY', 'KO', 'NATH')
  AND sip_timestamp >= toDateTime('2026-07-10 09:30:00', 'America/New_York')
  AND sip_timestamp < toDateTime('2026-07-10 16:00:00', 'America/New_York')
  AND bid_price > 0
  AND ask_price > bid_price
GROUP BY ticker
ORDER BY indexOf(['SPY', 'KO', 'NATH'], ticker)

For SPY di toll almost theoretical: na 2-cent median spread, about $0.27 per $10,000 round trip. Coca-Cola run about $1.2. Walk down di liquidity curve and e dey grow: Nathan's Famous, one thin small cap, quote 19-cent median spread — roughly $18.83 per $10,000 round trip. Di fund structure dey charge im own tolls (expense ratios, sometimes loads and redemption fees), but di spread genuinely no be one of dem.

Settlement: when you actually see shares and cash

Execution and settlement dey run on different clocks. Dem dey strike and publish NAV for early evening — funds dey report am to di wires around 6:00 pm ET — your share count dey post dat night or di next morning, and di trade settle (cash actually move) one business day later, T+1, di same cycle wey US stocks and ETFs move to for May 2024. Buy Tuesday morning: price known Tuesday evening, cash gone Wednesday. Sell before Tuesday cutoff: settled cash Wednesday. Di real difference from one ETF no be di settlement date — one ETF seller sabi di sale price by 10:15 am; di fund seller dey learn am after di close. Fund returns na NAV-to-NAV by construction — di cleanest real-world example of di close-to-close convention for how returns dey measured.

Di exceptions wey worth knowing

Money market funds. Di once-a-day rule dey bend here. Government money market funds dey transact at one stable $1.00 NAV and commonly dey offer same-day cash access; some institutional funds dey strike NAV several times one day at set intraday windows. If your "mutual fund" na money market sweep, di 4 pm mechanics mostly no dey bind.

Bond funds dey mark off one earlier close. Di US Treasury cash market recommended close na 3:00 pm ET, one hour before equities stop trading. One bond fund still dey strike im NAV once, after 4:00 pm — but di bond prices inside am dem set for dat earlier close.

International funds and fair value. International-stock funds dey compute NAV from markets wey close hours earlier — Tokyo session dey end by 2:00 am ET. Many dey apply fair-value adjustments, wey dey nudge stale foreign closes toward where dose stocks likely go trade given everything since dia home close. One direct descendant of di 2003 reforms: stale prices na exactly wetin rapid traders exploit.

Retirement plans. One 401(k) or IRA fund trade dey follow di same forward-pricing rule — same 4 pm NAV, no intraday execution. Di difference na di extra intermediary: recordkeepers dey batch and relay orders, dia cutoffs dey come earlier, and one late trade dey roll to di next NAV.

Short-term redemption fees. Some funds dey charge redemption fee — commonly 0.25% to 2% — on shares wey dem sell within one stated window like 30, 60, or 90 days; brokers fit add dia own fees for no-transaction-fee funds. Once-a-day pricing dey make rapid NAV-to-NAV flipping mechanically possible; dese fees dey exist to make am unattractive.

Di 2003 scandal, specifically

Di legal rigidity around 4:00 pm no be abstract. For September 2003, New York attorney general announce $40 million settlement with hedge fund Canary Capital Partners over two practices: late trading — placing or confirming fund orders after 4:00 pm at dat day already-computed NAV, illegal under Rule 22c-1 — and market timing, rapid in-and-out trading wey several fund companies don quietly permit for favored clients while dia own prospectuses discourage am. Di investigations wey follow reach di industry largest fund complexes; settlements run into di billions. Di durable fixes na di ones for dis page: hard intermediary-level cutoffs, fair-value pricing, short-term redemption fees.

Mutual fund trading FAQ

Wetin time mutual fund trades dey execute?

Orders wey dem receive before di fund 4:00 pm ET cutoff dey execute at dat day NAV, computed after di close. Orders after di cutoff go get di next trading day NAV. No intraday execution dey at any price.

Why my mutual fund order take until di next day?

E likely miss di cutoff — di fund 4 pm ET deadline or your broker or recordkeeper earlier internal one. E den execute at di following session NAV, as dem design am.

I fit set limit price for mutual fund order?

No. With no intraday price stream, nothing dey for limit to reference; all orders dey execute at NAV. If you want limit orders for fund-like exposure, dat na wetin ETFs dey for.

How long e dey take for mutual fund trade to settle?

Most stock and bond funds dey settle T+1: cash dey move one business day after di trade date, di same cycle as ETFs and stocks. Di execution price dey known di evening of di trade date, when dem publish NAV. Many money market funds dey settle same day.

Mutual funds dey trade for weekends or holidays?

No — dem only dey strike NAV for days wey di underlying markets trade (di market calendar). Weekend orders dey queue for Monday NAV.


Every panel above na stored, versioned query — expand di SQL behind any number, or measure di close gravity yourself for di Strasmore terminal.