Skip to content
All library documents

Treasury Bond Pricing: Simple Interest Versus Street Convention

Article Quant Q&A · Author: user46652

Summary

The document investigates why a standard coupon-bond present-value calculation does not reproduce quoted prices in U.S. Treasury auction examples. It sets out a semiannual coupon formula, accrued-interest calculation, and the relationship between invoice and quoted prices, then compares those calculations with published auction figures. The accrued-interest result matches the example, while the price does not under the assumed convention.

The accepted explanation is a difference in first-period discounting: the cited official Treasury calculation uses simple interest for the partial coupon period, whereas the street convention compounds it. Replacing the compounded partial-period factor with a simple-interest factor brings the example into line with the auction result. A separate response flags a possible sign or exponent typo in the invoice-price expression, so readers should check the formula carefully. The examples illustrate the convention issue but do not establish that one convention applies to every bond market or pricing context.

Key ideas

  • Treasury notes and bonds pay coupons semiannually, and accrued interest affects the quoted price.
  • A partial first coupon period may be discounted using simple interest under official Treasury calculations.
  • The street convention compounds interest over that partial period, which can produce a different price.
  • The document compares calculated prices with Treasury auction examples to identify the convention difference.
  • A formula typo is also raised, so the invoice-price expression should be checked before use.

Tags

Full text
# Computing treasury note/bond prices from yield


# Computing treasury note/bond prices from yield












I wanted to make sure my calculation of the US treasury note/bond price is correct. Since T-notes and bonds pay coupons twice a year, let

\begin{eqnarray} F &=& \rm{face\_value} = 100 \\ y &=& \frac{ \rm{yield} }{ 2 } \\ c &=& \frac{ \rm{coupon\_rate} }{ 2 } \\ n &=& 2 \cdot \rm{maturity\_years} \\ a &=& \frac{ \rm{days\_interest\_accrues} }{ \rm{num\_days\_in\_coupon\_period} } \end{eqnarray}

In my understanding, the invoice price of a T-node/bond is given by

\begin{eqnarray} \rm{invoice\_price} &=& F \left[ \sum_{k = 1}^n \frac{c}{(1 + y)^{k - a}} + \frac{1}{(1+y)^{n - a}} \right] \\ &=& F (1 + y)^a \left\{ \frac{c}{y} \left[ 1 - \frac{1}{(1 + y)^n} \right] + \frac{1}{(1 + y)^n} \right\} \end{eqnarray}

that the accrued interest is given by

\begin{equation} \rm{accrued\_interest} = Fca \end{equation}

and that the quoted price is given by

\begin{equation} \rm{quoted\_price} = \rm{invoice\_price} - \rm{accrued\_interest} \end{equation}

However, take the following examples.

- Treasury auction results of 20-year bond on May 17, 2023: `Term and Type of Security 20-Year Bond CUSIP Number 912810TS7 Series Bonds of May 2043 Interest Rate 3-7/8% High Yield 3.954% Allotted at High 34.77% Price 98.913642 Accrued Interest per $1,000 $1.68478 Median Yield 3.875% Low Yield 2.880% Issue Date May 31, 2023 Maturity Date May 15, 2043 Original Issue Date May 31, 2023 Dated Date May 15, 2023 ` We have `yield = 0.03954 coupon_rate = 0.03875 maturity_years = 20 days_interest_accrues = '2023-05-31' - '2023-05-15' = 16 days_in_coupon_period = '2023-11-15' - '2023-05-15' = 184 ` where I have assumed the next coupon payment is on Nov 15, 2023. Plugging these into the formulae above gives an invoice price of `99.08361940342022`, an accrued interest of `0.16847826086956522`, and a quoted price of `98.91514114255065`. The accrued interest matches that listed on the auction results. I would assume that the "price" on the auction results refers to the invoice price, which my calculation, however, cannot reproduce. It is not the quoted price either.

```
Term and Type of Security      20-Year Bond
CUSIP Number                   912810TS7
Series                         Bonds of May 2043
Interest Rate                  3-7/8%
High Yield                     3.954%
Allotted at High               34.77%
Price                          98.913642
Accrued Interest per $1,000    $1.68478
Median Yield                   3.875%
Low Yield                      2.880%
Issue Date                     May 31, 2023
Maturity Date                  May 15, 2043
Original Issue Date            May 31, 2023
Dated Date                     May 15, 2023
```

```
yield = 0.03954
coupon_rate = 0.03875
maturity_years = 20
days_interest_accrues = '2023-05-31' - '2023-05-15' = 16
days_in_coupon_period = '2023-11-15' - '2023-05-15' = 184
```

- Examples on TreasuryDirect's "Understanding Pricing and Interest Rates" page: `Type of security Time to maturity High yield at auction Interest rate set at auction Price Bond 20 year 1.850% 1.750% 98.336995 Note 7 year 1.461% 1.375% 99.429922 ` Assuming that the number of days interest accrues is assumed to be 0 in these examples, my calculation cannot reproduce these prices either.

```
Type of security   Time to maturity   High yield at auction   Interest rate set at auction   Price
Bond               20 year            1.850%                  1.750%                         98.336995
Note               7 year             1.461%                  1.375%                         99.429922
```

Could someone shed light on what is going on?

## Answer by Attack68 (score 4, accepted)

https://quant.stackexchange.com/a/76921

The answer to this is the calculation mode of the bond. The street convention is to use your formula as you have stated, which uses a compounded interest formula for the first period. But the Federal documents, such as: https://www.ecfr.gov/current/title-31/subtitle-B/chapter-II/subchapter-A/part-356/appendix-Appendix%20B%20to%20Part%20356 demonstrate that official calculations use a simple interest formula.

Therefore $$ \frac{1}{(1+y)^a}$$ is replaced by $$ \frac{1}{1+ay} $$

The following demonstrates the difference,

```
# PYTHON

from rateslib import *

ust = FixedRateBond(
    effective=dt(2023, 5, 15),
    maturity=dt(2043, 5, 15),
    fixed_rate=3.875,
    spec="ust"
)
ust.accrued(dt(2023, 5, 31))
# 0.16847826
ust.price(ytm=3.954, settlement=dt(2023, 5, 31))
# 98.91514114           /* Matches your calculated value */

ust = FixedRateBond(
    effective=dt(2023, 5, 15),
    maturity=dt(2043, 5, 15),
    fixed_rate=3.875,
    spec="ust",
    calc_mode="ust_31bii",
)
ust.accrued(dt(2023, 5, 31))
# 0.16847826
ust.price(ytm=3.954, settlement=dt(2023, 5, 31))
# 98.91364174           /* Matches US Treasury Auction Results */
```

## Answer by Sara Mun (score 3)

https://quant.stackexchange.com/a/76919

There is a typo in your invoice price formula.

It should be $\dfrac{F}{(1+y)^{-a}}$, not $\dfrac{F}{(1+y)^{a}}$.

It may explain some of the differences when you consider an accrued different from zero.

Shown in full with attribution under the source's licence. Licence: CC BY-SA 4.0 (Stack Exchange)

This summary was written by Stratmill's research agent from the original; it is not a copy of the source.