Both answer given so far by @0xFEE1DEAD and @Kevin Arlin are correct. I'll just add some concrete numbers. The average coupon (weighted by market value of the bonds) of SHY ETF is currently ~2.36%. The computation with code will be given below. Yield is something very different and looks at the current price (not what you bought it for). That is no different to bonds really. What is different is that the ETF will never hold the bonds to maturity.
The SEC yield is not directly a measure of the returns to be expected from a fund, but rather serves as a consistent benchmark for yield performance comparison. It does not account for the fact that most funds do not mature, nor does it consider that most bonds are not held until maturity. In a nutshell, the SEC yield is basically a YTM adjusted for fees (approximate computations will be shown below).
VANGUARD states that
SEC yield requires averaging the yield to maturity of the fund’s
holdings over the prior 30 days and accounts for fund expenses.
Per prospectus, SHY ETF seeks to track the ICE® U.S. Treasury 1-3 Year Bond Index (the “Underlying Index”), which measures the performance of public obligations of the U.S. Treasury that have a remaining maturity of greater than or equal to one year and less than three.
- All eligible securities must have a minimum term to maturity of at least one year
- The composition of the Index is rebalanced at each month-end.
- The Index is not adjusted for securities that become eligible or ineligible for maintenance inclusion during the month. Any such changes are incorporated in the following month’s index. That explains why there are frequently some bonds with less than 1 year in the index. Nonetheless, they are never held to maturity.
The rest is basic bond math. Yield to maturity (YTM) is a measure that considers the NPV of the bonds. However, if you bought the bond prior to the YTM calculation, or do not hold until maturity, you cannot expect to obtain the YTM. The prospectus also explicitely warns of the risk that
An increase in interest rates will generally cause the value of
securities held by the Fund to decline.
Is there a potential for arbitrage?
Contrary to @Justin suggestion, there is no possibility for arbitrage. The ETF is holding actual bonds. It would be the exact same if you buy the bonds yourself. The bonds pay a fixed interest, irrespective of where the bond trades. The yield of the bonds is a hypothetical result, that states that you would get this return if you bought the bond now and held it to maturity. The problem is that you (almost never) buy a bond now and in the case of the ETF never hold to maturity.
You buy a bond at face value USD 100 that pays 4.75% interest and hold to maturity you will get USD 4.75 interest every year and your USD 100 back at the end. However, assume the current price of the bond is USD 144.57. We know this can only be the place if the interest rate in the market is significantly below the coupon of the bond. This bond now yields only 0.47%. If you buy it now, and hold to maturity, that will be your return. You still get 4.75% interest, but the problem is that you also still only get USD 100 back at maturity.
This is a real example, with actual market data. The details and Julia code can be found here.
The ETF has the opposite effect right now. Bond prices went below par because market interest rates keep rising. However, the currently held bonds pay, on average, just about 2.36% coupon. When the ETF needs to sell these bonds because they are no longer eligible (< 1 year for example), the ETF immediately faces the loss associated with the decline in the market value of the bond. You also cannot get rid of the bonds and buy higher yielding ones, because the loss in market value is already in your positions. The outcome is the same had you bougth the bonds yourself, and you would face the same return. If you were to buy the bonds now, you would have a higher total return, including the price appreciation. However, the coupon will still be the average coupon of the bonds held. Also, if you think you just hold to maturity, you cannot compare your return to that of the ETF because you look at two very different strategies. Hence, there is no arbitrage.
So why would anyone buy SHY if you could buy securities directly that reflect higher yields?
- If you buy bonds, you will face the same interest income (see the previous paragraph)
- You need to make only one trade to get a fixed-income portfolio
- The pay-out is monthly because the ETF holds many bonds at once (related to the last point above)
- The ETFs maturity is more or less constant making it a great vehicle for duration hedging
- Bond ETFs are liquid (not so much a benefit with US treasury but very much so with less liquid bond markets)
- (Bond) ETFs never mature. Therefore, rising rates can result in selling bonds at low prices which can lead to losing money. You will face the same downside if you do not hold bonds to maturity. In fact, SVB bank went bancrupt because of the decline in the bonds market value.
Some interest rate facts
Now, let’s look at the FED Funds rate as a Benchmark relative to the 3-year CMS Treasury rate vs SHY ETFs NAV. There are two historical extremes in the current time span of eligible maturities. First, rates were at historical lows due to COVID-19 and recently, rates were hiked at almost unprecedented speed.
It is not a coincidence that bond funds and ETFs perform very poorly if rates hike as they did in the last couple of months. The following graph shows Fed Funds, 3 year and 1 year Treasury rates. Any bond issued just a few weeks or months ago is already below par with such pronounced rate hikes. This implies yield will go up in line with current market rates. However, the coupon will still be lower, and the price of the bond went down, which means you will lose money when you sell it.
For example, below is a list of returns from Morningstar.
It is also natural that long term bond ETFs suffer more than short term bonds. The reason is basic discounting (time value of money). Exact YTM and NPV calculations with Julia code can be found in this answer. It is sufficient to keep in mind that as long as interest rates keep increasing at the current pace, and the ETF is holding "old" bonds, the return will be a lot lower compared to yield, because the NPV of the bonds decreases substantially.
The Julia dataframe below is showing the current biggest holdings, which you can retrieve directly from BlackRock. You can see the biggest position has only a coupon of 1.5% and most are priced significantly below par. This is because they were issued at a time where interest rates were still lower.
Computing the average coupon of all currently held bonds, weighted by market value looks like this:
avg_coupon = sum(shy_holdings[!,"Coupon (%)"].*shy_holdings[!,"Market Value"])/sum(shy_holdings[!,"Market Value"])
println("Market value weighted average YTM of SPY ETF = $(round(avg_coupon, digits=3))")
Market value weighted average YTM of SPY ETF = 2.367
As for the math and details, it really is all there and also very similar for every bond fund /ETF /investment. Fixed income is just more complicated than the name suggests (after all, anything fixed sounds like it’s easy to understand).
SEC Yield continued
SEC Yield for bonds funds is NOT related to the dividend of the bond fund. It is a standardized YTM computation. Most online resources do not really show detailed computations but merely show more or less the same text. You can find a detailed explanation in this FORM OF AMENDED AND RESTATED YIELD CALCULATION SERVICES AGREEMENT from the SEC.
To get to the exact number is cumbersome, but if you simply take the displayed YTM and adjust for 360 vs 365 daycount (US Treasury Convention) and subtract the fee, you get reasonably close. You can also use compute the market value weighted YTM directly with the dataframe above.
avg_ytm = sum(shy_holdings[!,"YTM (%)"].*shy_holdings[!,"Market Value"])/sum(shy_holdings[!,"Market Value"])
println("Market value weighted average YTM of SPY ETF = $(round(avg_ytm, digits=3))")
Market value weighted average YTM of SPY ETF = 4.258
If you now divide by 365, multiply be 360 and subtract the expense fee of 0.15, you get
println("Approximate SEC 30D yield = $(round(avg_ytm/365*360-0.15, digits=5))")
Approximate SEC 30D yield = 4.04967
which isn't too bad an estimate.