Strasmore Research
Learn Matt ConnorBy Matt Connor

ETF Premium and Discount to NAV, Explained

An ETF premium or discount to NAV measures the pricing mechanism more than the portfolio. Here is how the gap forms, and the checks that catch a false alarm.

An ETF premium or discount to NAV is the gap between the price a fund's shares trade at and the value of the securities that fund holds, measured per share at the same moment. Most days the gap is a few basis points wide, and what it describes is the plumbing of the fund rather than the health of its portfolio. A gap that is wide or persistent is worth understanding before it is worth worrying about.

What is an ETF premium or discount to NAV?

Net asset value, or NAV, is the fund's arithmetic. Every security it holds is valued and totalled, liabilities come off, and the result is divided by the shares outstanding. US funds strike that number once a trading day, after the 4:00 p.m. ET close. The market price is a different thing: the last price at which a buyer and a seller agreed. Price above NAV is a premium. Price below NAV is a discount. Both are quoted as a percentage of NAV.

This is one of the sharper differences between the two fund wrappers. A mutual fund order fills at the strike, at whatever NAV the fund publishes that evening, which is why a mutual fund never carries a premium or a discount. The cost of that design is that you cannot see your price when you place the order. Our mutual funds versus ETFs guide covers the rest of that comparison, and mutual fund settlement covers when the cash actually moves.

How authorized participants keep an ETF price near NAV

No rule requires an ETF to trade at NAV. What holds the two together is a profit motive wired into the fund's structure, and knowing that is most of what you need in order to read a gap correctly.

A small group of large broker-dealers sign agreements with the fund sponsor and become authorized participants, usually shortened to APs. An AP is the only party that can create or destroy ETF shares, and it works in blocks called creation units, typically tens of thousands of shares at a time. To create, the AP delivers the fund's published basket of securities and receives new ETF shares. To redeem, it hands ETF shares back and receives the basket.

Take a hypothetical fund whose basket is worth $100.00 a share while the ETF changes hands at $100.30. An AP can buy the basket in the open market, deliver it, receive shares valued at $100.00, and sell them at $100.30. That selling is what narrows the premium. A discount runs the same loop backwards: buy the cheap ETF shares, redeem them for a basket worth more, sell the basket.

Two things follow. The gap closes only as far as the round trip stays profitable, and the AP's costs set that floor: the spread on every security in the basket, the creation fee, financing, hedging, and any borrow or tax friction. The normal width of a fund's gap is a readout on how expensive its basket is to handle, which is the same quantity sitting behind the fund's own bid ask spread on screen.

Why a normal gap is wider for some funds than others

A fund holding the largest US stocks has a basket an AP can buy in seconds at tight spreads. A fund holding Japanese equities, or corporate bonds that last printed a trade three days ago, does not. One way to see that difference without touching NAV at all is to measure how far each fund's own price travels in a single regular session. Whatever moves during those hours is information the closing mark has to catch up with.

QueryHow far seven ETFs travel in a regular session, first half of 2026
The exact SQL behind every number
WITH sessions AS
(
    SELECT
        ticker,
        toDate(toTimeZone(window_start, 'America/New_York'))  AS session_date,
        argMin(toFloat64(open),  window_start)                AS px_open,
        argMax(toFloat64(close), window_start)                AS px_close
    FROM global_markets.delayed_stocks_minute_aggs
    WHERE ticker IN ('FXI', 'EWJ', 'EFA', 'SPY', 'HYG', 'LQD', 'AGG')
      AND window_start >= '2026-01-02 00:00:00'
      AND window_start <  '2026-07-01 00:00:00'
      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, session_date
    HAVING px_open > 0
)
SELECT
    ticker,
    round(quantileExact(0.5)(abs(px_close / px_open - 1) * 100), 3) AS median_move_pct,
    round(quantileExact(0.9)(abs(px_close / px_open - 1) * 100), 3) AS p90_move_pct
FROM sessions
GROUP BY ticker
ORDER BY median_move_pct DESC
Run this yourself

Over the first half of 2026, the widest of the seven was FXI, whose median session covered 0.433% from the first print to the last, with a 90th percentile session of 1.267%. At the other end of the list, AGG had a median session of 0.099%. Those two numbers are the yardstick. A quarter of a percentage point of discount on a fund whose entire day is usually smaller than that is a different event from the same quarter point on a fund that swings several times as far.

International ETFs: the stale price is the NAV, not the fund

This is the case that gets misread most often. A fund holding Japanese shares trades in New York from 9:30 a.m. to 4:00 p.m. ET. Tokyo closed hours before New York opened. The NAV struck at 4:00 p.m. ET values those Japanese shares at their last Tokyo prints, which are stale by then. The ETF price has spent the whole US session absorbing everything that happened after Tokyo went home. Compared at 4:00 p.m., the ETF is the more current of the two estimates and the NAV is the one lagging.

European funds show a partial version of the same thing. Continental and UK markets close around 11:30 a.m. ET, give or take an hour in the weeks when the US and Europe change clocks out of step. The morning half of the US session overlaps with live European trading. The afternoon half does not.

QueryMedian move before and after European markets close, first half of 2026
The exact SQL behind every number
WITH bars AS
(
    SELECT
        ticker,
        window_start,
        toDate(toTimeZone(window_start, 'America/New_York')) AS session_date,
        toHour(toTimeZone(window_start, 'America/New_York')) * 60
            + toMinute(toTimeZone(window_start, 'America/New_York')) AS et_minute,
        toFloat64(open)  AS px_o,
        toFloat64(close) AS px_c
    FROM global_markets.delayed_stocks_minute_aggs
    WHERE ticker IN ('SPY', 'VGK', 'EFA', 'EWJ')
      AND window_start >= '2026-01-02 00:00:00'
      AND window_start <  '2026-07-01 00:00:00'
),
legs AS
(
    SELECT
        ticker,
        session_date,
        argMinIf(px_o, window_start, et_minute >= 570) AS px_open,
        argMaxIf(px_c, window_start, et_minute <  690) AS px_midday,
        argMaxIf(px_c, window_start, et_minute <  960) AS px_close
    FROM bars
    WHERE et_minute >= 570 AND et_minute < 960
    GROUP BY ticker, session_date
    HAVING px_open > 0 AND px_midday > 0 AND px_close > 0
)
SELECT
    ticker,
    round(quantileExact(0.5)(abs(px_midday / px_open  - 1) * 100), 3) AS morning_move_pct,
    round(quantileExact(0.5)(abs(px_close  / px_midday - 1) * 100), 3) AS afternoon_move_pct
FROM legs
GROUP BY ticker
ORDER BY multiIf(ticker = 'SPY', 1, ticker = 'VGK', 2, ticker = 'EFA', 3, 4)
Run this yourself

For VGK, the median morning half of the session covered 0.288% and the median afternoon half covered 0.289%. That afternoon figure is price discovery with no live quote from the underlying market anywhere in it. The US benchmark in the same panel, SPY, splits its day 0.306% and 0.283%, with its holdings trading live in both halves. EWJ sits at the far end: its home market shut before New York opened, which places both halves of the US day, 0.272% and 0.302%, outside anything the closing mark can price.

Sponsors are not blind to this. Many apply a fair value adjustment to foreign holdings at the strike, nudging stale marks toward where those markets would likely reopen. The adjustment narrows the gap without erasing it, and the method varies by sponsor, which is one reason two funds tracking the same index can publish different premiums on the same evening.

Bond ETFs: a NAV built from bid side marks

Corporate and municipal bonds trade over the counter, and most individual bonds do not trade at all on a given day. A fund cannot mark a portfolio of them to last sale, so it uses evaluated prices from a pricing service: model estimates built from whatever comparable trades, quotes and spreads exist. Those evaluations are conventionally struck on the bid side, the price a holder could sell at.

That convention builds a small structural discount into the inputs. The ETF trades wherever buyers and sellers meet, closer to the middle of the bond market than to its bid, and a bond fund that appears to carry a persistent small premium is often a mid-market price sitting above a bid-side NAV. In a fast selloff the sign flips. ETF shares reprice in seconds while evaluated marks update on a slower cadence, and the fund prints a discount that is really a difference in measurement speed.

QueryMedian session move by month, 2026 first half
The exact SQL behind every number
WITH sessions AS
(
    SELECT
        ticker,
        toDate(toTimeZone(window_start, 'America/New_York'))  AS session_date,
        argMin(toFloat64(open),  window_start)                AS px_open,
        argMax(toFloat64(close), window_start)                AS px_close
    FROM global_markets.delayed_stocks_minute_aggs
    WHERE ticker IN ('SPY', 'EFA', 'HYG')
      AND window_start >= '2026-01-02 00:00:00'
      AND window_start <  '2026-07-01 00:00:00'
      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, session_date
    HAVING px_open > 0
)
SELECT
    formatDateTime(session_date, '%Y-%m')                                            AS month,
    round(quantileExactIf(0.5)(abs(px_close / px_open - 1) * 100, ticker = 'SPY'), 3) AS spy_median_move_pct,
    round(quantileExactIf(0.5)(abs(px_close / px_open - 1) * 100, ticker = 'EFA'), 3) AS efa_median_move_pct,
    round(quantileExactIf(0.5)(abs(px_close / px_open - 1) * 100, ticker = 'HYG'), 3) AS hyg_median_move_pct
FROM sessions
GROUP BY month
HAVING countIf(ticker = 'SPY') > 0
   AND countIf(ticker = 'EFA') > 0
   AND countIf(ticker = 'HYG') > 0
ORDER BY month
Run this yourself

The scale of a bond fund's ordinary day is small, which is what makes a fixed threshold misleading. In the panel above, the median HYG session measured 0.074% in the first month shown and 0.063% in the last, while the equity line for the first month came in at 0.322%. Half a percentage point of discount is a large number against a day of that size, and the yardstick itself moves month to month.

End of day NAV versus the intraday indicative value

Two numbers both describe what the fund is worth, and they are not interchangeable.

The official NAV is struck once, after the close, and it is the number every published premium and discount is measured against. The intraday indicative value, labelled IIV or IOPV, is a running estimate of basket value published through the session and updated every 15 seconds. It is an estimate rather than a tradable price, and for a fund with foreign holdings it inherits exactly the same stale inputs the closing NAV does. The after hours session sits further out still, printing prices against a NAV struck at the previous close.

The practical upshot is a measurement artifact worth knowing. A fund's published premium and discount history is a series of 4:00 p.m. snapshots: closing price against closing NAV. The open and the close are the two edges of the day where price discovery is most concentrated, and minute by minute price ranges show the shape.

QueryAverage minute bar range by ET clock time, second quarter 2026
The exact SQL behind every number
SELECT
    formatDateTime(toStartOfFifteenMinutes(toTimeZone(window_start, 'America/New_York')), '%H:%i') AS et_time,
    round(avgIf(range_bps, ticker = 'SPY'), 2) AS spy_range_bps,
    round(avgIf(range_bps, ticker = 'EFA'), 2) AS efa_range_bps,
    round(avgIf(range_bps, ticker = 'HYG'), 2) AS hyg_range_bps
FROM
(
    SELECT
        window_start,
        ticker,
        (toFloat64(high) - toFloat64(low)) / toFloat64(close) * 10000 AS range_bps
    FROM global_markets.delayed_stocks_minute_aggs
    WHERE ticker IN ('SPY', 'EFA', 'HYG')
      AND window_start >= '2026-04-01 00:00:00'
      AND window_start <  '2026-07-01 00:00:00'
      AND close > 0
      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 et_time
HAVING countIf(ticker = 'SPY') > 0
   AND countIf(ticker = 'EFA') > 0
   AND countIf(ticker = 'HYG') > 0
ORDER BY et_time
Run this yourself

Averaged across the second quarter of 2026, an SPY minute bar in the 09:30 bucket spanned 7.06 basis points of its own price. By 12:45 the same measure had settled to 3.56 basis points. The final bucket, 15:45, printed 5.18 basis points, the window in which closing auction imbalances are published and the closing price is set. EFA traces the same shape at its own level, 6.47 basis points in the opening bucket against 2.96 at midday, and HYG opened the day at 2.53.

A snapshot taken at the busiest instant of the day, compared against a NAV struck at that same instant, will show a wider spread of premiums and discounts than a mid-session order ever meets. The published number is honest. It answers a narrower question than most readers assume.

When creation and redemption stops working

Everything above assumes an AP can assemble or unwind the basket at a sensible cost. Several situations interrupt that.

The basket can become expensive or impossible to source. When dealers step back from an asset class, the bonds or foreign shares an AP needs are quoted wide or not quoted at all, and a round trip that normally closes a few basis points now costs more than the gap is worth. The gap widens until the trade pays again.

Creations can also be capped or suspended outright. A fund that has hit a position limit, a regulatory ceiling on its holdings, or a sponsor-imposed cap stops issuing new creation units, and from that point the mechanism runs one way. Redemptions still work, which keeps a discount in check. Nothing can manufacture new supply to meet demand, and a premium can persist and grow for as long as the halt lasts. Funds holding derivatives rather than cash securities are the usual candidates: how leveraged ETFs work covers the daily reset machinery behind one such family, and covered call ETFs describes a wrapper whose basket includes written options. An AP is also a dealer working its own book under its own risk limits. No rule obliges one to step in on a given day.

Practical checks before you trade an ETF

  • A limit order sets the worst price you will accept. A market order takes whatever is resting, which on a thin fund at a thin moment can sit well away from fair value.
  • The first and last minutes of the session carry the widest bars, as the panel above measures. The middle of the day is where quoted spreads are usually narrowest.
  • A fund's own premium and discount history is published on the sponsor's website, along with a count of the days it closed above and below NAV. The useful comparison for today's gap is that distribution rather than zero.
  • If the fund holds foreign securities, check whether those markets were open during the US session. A gap on a fund whose home market has been shut since before the US open is a different measurement from the same gap on a domestic fund.
What these panels do and do not measure

None of the panels on this page contains a NAV. Every figure comes from global_markets.delayed_stocks_minute_aggs, the one minute price history for US listed shares, so each panel measures a fund's own traded price. Premium and discount figures themselves are published by fund sponsors. What these measurements size is the movement a closing mark has to keep up with, which is the quantity behind how wide a normal gap runs. The session is bounded at 9:30 a.m. and 4:00 p.m. ET, and each window is a fixed calendar range in 2026.

FAQ

Is an ETF premium or discount a sign that something is wrong with the fund?

Usually not. A gap of a few basis points is the ordinary cost of assembling the fund's basket, and gaps on international and bond funds are largely a timing and marking artifact. A gap that is large against that fund's own history, or that persists over many days, is the version worth investigating, starting with whether creations have been capped.

Why do international ETFs trade at a premium or discount so often?

The NAV values foreign holdings at their last local closing prices, which can be many hours old when US trading ends at 4:00 p.m. ET. The ETF price has kept moving in the meantime. The published gap measures the distance between a current price and a stale mark.

What is the difference between NAV and the intraday indicative value?

NAV is the official per share value of the fund's holdings, struck once after the 4:00 p.m. ET close. The intraday indicative value, or IIV, is an estimate of the same quantity published every 15 seconds during the session. Only the NAV is used for creations and redemptions, and only the NAV appears in a fund's published premium and discount history.

Does the published premium and discount overstate what I would experience?

For a mid-session trade, generally yes. Every published figure is a 4:00 p.m. snapshot, and the closing window carries some of the widest price ranges of the day. A fund's typical quoted spread through the middle of the session is the closer match to a mid-session order.


Every panel here ships with the exact SQL underneath it. Swap in the funds you follow and run the same measurements on the Strasmore terminal.

#etfs#nav#authorized participants#arbitrage#bond etfs