I am somewhat stuck and not sure how to proceed, so any help would be appreciated. I got the Nelson Siegel model with all parameters for the real data. The curve that is produced is yield vs maturity. The maturities from the given data only provide the yield for 0.25 years, 1 year, 3 years, 5 years. The question is to find the bond price at 0 years that expires in 2 years. Obviously, the curve fitting allows calculating any maturity. However, but how to find the actual price of the bond at time 0? Yes, we have all parameters from Nelson model, but how to relate yield and bond price?


Let’s say you have 4 cash flows with semi annual frequency for a bond of 2 years. Then you look at the nelson seigel curve for the spot rates corresponding to maturity of 0.5,1,1.5 and 2 year on the curve and discount all these cash flows to the present by these spot rates.

  • $\begingroup$ Sorry, I don't think you want to use NS yield interolated for .5, 1, 1.5 years. Rather, you use the 2 year yield for all of bond's cash flows. $\endgroup$ – Dimitri Vulis Jan 3 at 18:50
  • 1
    $\begingroup$ But wouldn’t that be assuming that the rates are constants across all maturities? That would beat the purpose of constructing the nelson seigel curve in the first place (in my opinion) $\endgroup$ – Dhruv Mahajan Jan 3 at 18:53
  • $\begingroup$ Agree with @DhruvMahajan. Pricing should be performed as $P = \sum_i c_i d(t_i)$, where $c_i$ is the cash flow at time $t_i$ and $d(t_i)$ is the associated discount factor (which can be computed easily given a zero rate). Once you have the $P$, you can re-compute the conventional yield to maturity using the standard price-yield formula. $\endgroup$ – Helin Jan 3 at 18:59
  • $\begingroup$ Yield (internal rate of return) is a root of a polynomial where you discount cash flows at different time with the same rate (with suitable exponents for time). $\endgroup$ – Dimitri Vulis Jan 3 at 19:03

Nelson-Siegel gives you zero rates for any tenor: $$ r(t) = b_0 + (b_1 + b_2) * \frac{(1 - e^{-t / \tau})}{t/\tau} - b_2 e^{-t / \tau}, $$ where $t$ is the year fraction (the exact convention depends on the modeler, typically something simple such as Actual/365 is chosen to ensure one-to-one mapping between date and year fraction), and $b_0$, $b_1$, and $\tau$ are the three model parameters.

Equivalently, you can compute the discount factor for any tenor: $$ d(t) = e^{-r(t)\cdot t}. $$

You're correct to say that the model gives you a "yield" curve, but it's important to know that the "yield" in this context ($r(t)$) refers to the zero coupon rate; these are yields to maturities for pure discount bonds with no interim coupon payments and only final principal payments. Accordingly, they should be used to discount a single cash flow matching the rates' tenors. (Of course you can always convert the zero coupon curve into par coupon curve with some algebra.)

Now that you have a full curve, given any bond and its cashflows, it's trivial to compute its price as of today: $$ P = \sum_{i=1}^n c_i d(t_i), $$ where $n$ is the number of cash flows, $c_i$ is the cash flow at time $t_i$ (${}=c/f$ or coupon rate divided by coupon frequency for most periods, and $100 + c/f$ in the last period), and $d(t_i)$ is the discount factor for $t_i$ as defined above. Note that if the settlement date ($t = 0$) is not a coupon date, then $P$ is the dirty price. From this price, you can then compute a conventional quoted yield to maturity using the standard price-yield formula: $$ P = \frac{c/f}{(1 + y/f)^\omega} + \frac{c/f}{(1 + y/f)^{\omega+1}} + \cdots + \frac{100 + c/f}{(1 + y/f)^{\omega+N}} $$ where $c$ is the coupon rate, $f$ is the coupon frequency, and $\omega$ is the discount fraction for the first period (only used if the settlement date is not a coupon date).


Given the yields at some tenors, Nelson-Siegel lets you to interpolate the yield between tenors (or even to extrapolate a little beyond the last tenor).

Here are some U.S. treasury yield curves from different dates: https://www.treasury.gov/resource-center/data-chart-center/interest-rates/Pages/TextView.aspx?data=yield

It would be a good exercise to plug into NS the 4 tenors that you listed (4m, 1y, 3y, 5y) and interpolate and extrapolate the other tenors (not just 2y, but 7y, 10y, and 30y) and see how well NS matches the obsrved yields; and then to compare NS's performance to other interpolations, such as a cubic spline, or plain old linear; and then repeat this exercice giving NS more and more tenors.

People sometimes mean different things by "yield". For example, "coupon yield" is static indicative data - how much coupon the bond pays every year, irrespective of the price. It does not change until maturity, except for some unusual bonds. Most likely you mean yield to maturity.

Given the 2Y yield to maturity from NS - one intuitive way to think about this figure is that if the issuer were to sell a new bond priced at par with 2Y maturity, then this new bond's coupon yield would be this much. (Maybe a little off due to some quoting conventions.) If the new bond were sold at above / below par, then the coupon is correspondingly more / less than the yield (you can calculate by how much).

If you're trying to price a bond that may have some accrued interest, then your procedure is:

  • get the yield at bond's maturity from NS. Note that the yields at other maturity play no further role except to affect your bond's yield;

  • project the bond's future cash flows (coupons and principal);

  • use this yield to discount the cash flows of the bond. For most bonds the formula for going from yield $y$ to price is something along the lines of

$$\mathrm{dirty\ price}=\sum_{i=1}^n\frac{\mathrm{cash\ flow}_i}{(1+\frac{y}{f})^{\mathrm{time}_i}}$$

where $f$ is the frequency, $\mathrm{cash\ flow}_i$ of a vanilla bullet bond is

$$\mathrm{cash\ flow}_i=\left\{ \begin{array}{@{}ll@{}} \mathrm{coupon\ yield} /f, & \mathrm{if}\ i<n \\ \mathrm{coupon\ yield} /f + \mathrm{par}, & \mathrm{if}\ i=n \end{array}\right.$$

and $\mathrm{time}_i$ the time to $i$th cash flow is likely to be $fi-a$, all suitably tweaked for your bond's quoting convention (observe that yield to price is closed-form, while its inverse price to yield is likely to require iterative numerical solver);

  • $$\mathrm{clean\ price} = \mathrm{dirty\ price} - \mathrm{accrued}.$$

If you like, you can further calculate

$$\mathrm{current\ yield} = \frac{\mathrm{coupon\ yield}}{\mathrm{clean\ price\%}}.$$

I doubt that you mean to interpret the yield from NS as the current yield, and to divide the bond's given coupon yield by the current yield to immediately arrive at the clean price.


Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.