4
$\begingroup$

I have to construct and evaluate portfolio of bonds and stocks, namely I need to get return on portfolio, standard deviation and sharpe ratios. I have weekly data that contains stock prices, and I could find only one source of weekly data for the bonds. It's from Federal Reserve Economic Data, weekly Yields on Moody's AAA bonds (long-term bonds, 20-30 years to maturity) in percentages. My problem is that I have no idea how to transform weekly yields into the form comparable to stocks' weekly returns. Can anyone give me some advise on it? The data looks like this:


  1. week1 7.44
  2. week2 7.43
  3. week3 7.40
$\endgroup$

4 Answers 4

2
$\begingroup$

Unfortunately I don't think it's possible to compute returns purely based on yields...

There are a few options:

  1. If you're on the buy side, you can easily get access to Barclay, Citi, or BofA's bond indices. These are very high quality datasets for studying historical bond returns.

  2. If you have Bloomberg, they've started providing bond indices as well. They come bundled with your Bloomberg subscription.

  3. I built some bond return indices myself using the Fed's fitted yield curve. I've published the entire dataset on my blog. The advantage of this dataset is that the history is pretty long (starting in the 1960s). The disadvantage is that they outperform comparable benchmark issues in a few sub-periods. The reasons for the discrepancy are detailed on the download page.

$\endgroup$
1
$\begingroup$

It may not be possible to compute returns solely on yields. However, @Oleg has information on maturity (long term bonds, 20-30 years to maturity), and the YTM gives us a coupon for an "on the run" bond. As a proxy for this bond group, you could use a bond with 25 years left to maturity with an annual coupon of 7.44, where today was the coupon date, and the coupon was paid. The bond is valued at par to yield 7.44 as the YTM.

You can use whatever software you like. Using the Kona language from https://github.com/kevinlawler/kona

The stream of 25 future Cash Flows (CF) is

CF : ( 24 # 7.44 ), 107.44

The timings of the future Cash Flows (TM) is:

TM : 1 + !25

The value of the bond today is:

+/ CF % 1.0744 ^ TM

which is 100.0

The value of the bond a week from now (when the YTM has changed to 7.43) is:

+/ CF % 1.0743 ^ TM - 7. % 365.

which is 100.2499

The value of the bond 2 weeks from now (when the YTM has changed to 7.40) is:

+/ CF % 1.0740 ^ TM - 14. % 365.

which is 100.7253

The rate of return for week 1 is (100 * -1 + 100.2499 % 100.0)

which is 0.2499 percent

The rate of return for week 2 is (100 * -1 + 100.7253 % 100.2499)

which is 0.4742 percent

$\endgroup$
0
$\begingroup$

I got an alert from Kona that someone viewed Kona coming from this question ... so, I am taking the opportunity to add two thoughts.

Duration is the present value weighted timing of all future cash flows from a bond. So, (as @Heilin states in "his" comment) it can be used to get an APPROXIMATE return.

However, the first algorithm calculates the ACTUAL present value of the 25 year proxy bond at the "current" time and at a week later, when yields have changed. As such, the calculation takes into account both the static yield income (the nominal coupon cash flows are unchanged, but the timing is 7 days shorter), and the duration impact (all nominal flows are transformed to their present values, which are determined by the timing of each flow, and the yield at that time).

$\endgroup$
-2
$\begingroup$

You can calculate an approximation. Yields are quoted on an annual basis. Bond valuations are based on Discounted Cash Flow formulas. Let’s take your sample data: weekly yields of 7.44, 7.43 and 7.40.

$100 invested for a year at a yield of 7.44% will be worth 107.44 at the end of a year.

That is 100 x (1.0744 ^ ( 365 / 365 )) = 107.44. The rate of return for the year is 7.44%

The value at the end of a week would be 100 x (1.0744 ^ ( 7 / 365 )) = 100.1377.

This translates to a weekly rate of return of 0.1377%

For the weekly yield of 7.43% we have 100 x (1.0743 ^ ( 7 / 365)) = 100.1375.

This is a weekly rate of return of 0.1375%

For the weekly yield of 7.40% we have 100 x (1.0740 ^ ( 7 / 365)) = 100.137.

Similarly, that is a weekly rate of return of 0.137%

$\endgroup$
4
  • 1
    $\begingroup$ This is completely wrong... You are only accounting for the static yield income, but ignoring the duration impact. A bond's holding period return is approximately the sum of its yield income + return from changes in yield. More specifically, the approximate return over 1-week should be $\text{yield} \times 7/365 - \text{duration} \times \text{changes in yield}$. For the same change in yield, a 30-year bond will have a vastly different return from a 2-year bond... $\endgroup$
    – Helin
    Oct 13, 2014 at 3:03
  • $\begingroup$ @haginile: The answer that you initially gave was that it is not possible. Now, suddenly, we have 2 algorithms. I think that is a great improvement. Which algorithm is "better" depends on the circumstances. My algorithm assumes that the yield is constant for the week, and that the weekly investment periods are independent (a simplifying assumption, but appropriate in many circumstances). Since we do not have duration information, your algorithm is probably not usable. $\endgroup$
    – tavmem
    Oct 13, 2014 at 11:18
  • $\begingroup$ One possible way to improve the result would be to approximate the duration. @Oleg states that he is using Moody's AAA long-term bonds with a maturity of 20-30 years. If we make a simplifying assumption of a 25 year maturity and a par bond (coupon set so that the bond trades at par, given the yield), then we could estimate a duration. $\endgroup$
    – tavmem
    Oct 13, 2014 at 11:54
  • $\begingroup$ Using the duration calculator at investopedia.com/calculator/bonddurcdate.aspx and the assumptions: Par = 100, YTM = 7.44, Annual rate = 7.44, maturity = 25, and quarterly payments, we get a duration of 11.52. (Again, not a perfect answer, but the approximations are getting better.) $\endgroup$
    – tavmem
    Oct 13, 2014 at 12:02

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge that you have read and understand our privacy policy and code of conduct.

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