Calculating the "return" of a bond (GS10)?

Discuss all general (i.e. non-personal) investing questions and issues, investing news, and theory.
Post Reply
User avatar
Topic Author
lauren_knows
Posts: 193
Joined: Mon Jan 28, 2013 2:11 pm
Location: NoVA, USA
Contact:

Calculating the "return" of a bond (GS10)?

Post by lauren_knows »

So, I've noticed that FireCalc, other online calculators, and a lot of custom spreadsheets on bogleheads use the Shiller GS10 long interest rate as generic "bond" data in their calculations. However, it was posited to me that FireCalc was probably calculating the "return" of the bonds for any given year incorrectly. I wanted to run this by people that know more about how bonds work than I do.

FireCalc takes the Shiller GS10 data, and simply uses the long interest rate for January of any given year to determine the "return" for that bond.

Example:

Code: Select all

- Portfolio has $10,000 in bonds.
- Simulation uses the year 1871's GS10 data (5.32%)
- Portfolio at the end of 1871 = $10,000 * 1.0532 = $10,532. 
Someone mentioned to me that this completely ignores "capital appreciation" in a bond. The following site has some written on the topic: http://pages.stern.nyu.edu/~adamodar/. Specifically, he has a spreadsheet outlining TBills and their actual return values: http://www.stern.nyu.edu/~adamodar/pc/d ... tretSP.xls.

For all bonds with greater than 1 year maturity,the formula for the price change of a bond is: Image.

Adamodar's spreadsheet uses "end of year" data. So, to modify it slightly to fit "beginning of year" data that FireCalc and other spreadsheets on here use, I came up with the following calculation for the bond return of a given year: (InterestRate*((1-(1+NextYearsInterestRate^-10))/NextYearsInterestRate)) + (1/((1+NextYearsInterestRate)^10))-1) + InterestRate.

A great example of how this effects calculations for FireCalc and other tools:

Code: Select all

-In 1979 GS10 was 9.1% 
- In 1980 it was 10.8%. 

So the GS10 return for 1979 would be -1%, not 9.1% due to the
price change of the bonds cause by rates rising during the year.
Is this even remotely correct? There are a few threads on early-retirement.org that are talking about this too.
41 - Married - 2 kids - Aiming for FI/ER in early 40s - Creator of cFIREsim
User avatar
Cut-Throat
Posts: 2011
Joined: Sun Oct 17, 2010 9:46 am

Re: Calculating the "return" of a bond (GS10)?

Post by Cut-Throat »

So, if true, what does this say to you?
User avatar
Topic Author
lauren_knows
Posts: 193
Joined: Mon Jan 28, 2013 2:11 pm
Location: NoVA, USA
Contact:

Re: Calculating the "return" of a bond (GS10)?

Post by lauren_knows »

Cut-Throat wrote:So, if true, what does this say to you?
Well, if it's true, methods that calculate the return as FireCalc does... are not accurate at all. Like the 1979 example. The old method has 1979 as a 9.1% return on bonds. The new method has it at -1%. That's a big difference.
41 - Married - 2 kids - Aiming for FI/ER in early 40s - Creator of cFIREsim
grayfox
Posts: 5569
Joined: Sat Sep 15, 2007 4:30 am

Re: Calculating the "return" of a bond (GS10)?

Post by grayfox »

boknows wrote:
FireCalc takes the Shiller GS10 data, and simply uses the long interest rate for January of any given year to determine the "return" for that bond.
If they are doing that, it definitely sounds wrong to me.

What I have done in my spreadsheets is calculate monthly total return from bond price changes using the Excel bond price function. I don't have the spreadsheet handy so I can't see the exact formula I used or if my answer is the same as you get.

Thanks for pointing that out. When I have more time, I'll look at it some more.
User avatar
Topic Author
lauren_knows
Posts: 193
Joined: Mon Jan 28, 2013 2:11 pm
Location: NoVA, USA
Contact:

Re: Calculating the "return" of a bond (GS10)?

Post by lauren_knows »

grayfox wrote:
boknows wrote:
FireCalc takes the Shiller GS10 data, and simply uses the long interest rate for January of any given year to determine the "return" for that bond.
If they are doing that, it definitely sounds wrong to me.
I've completely reverse-engineered and recreated Firecalc... so I'm positive that's how it works :)

Let me know what you find in your custom spreadsheets. If you can, think about how it would affect yearly calculations instead of monthly (that's what FireCalc and a lot of other spreadsheets go off of).

Thanks!
41 - Married - 2 kids - Aiming for FI/ER in early 40s - Creator of cFIREsim
User avatar
Cut-Throat
Posts: 2011
Joined: Sun Oct 17, 2010 9:46 am

Re: Calculating the "return" of a bond (GS10)?

Post by Cut-Throat »

boknows wrote:
Cut-Throat wrote:So, if true, what does this say to you?
Well, if it's true, methods that calculate the return as FireCalc does... are not accurate at all. Like the 1979 example. The old method has 1979 as a 9.1% return on bonds. The new method has it at -1%. That's a big difference.
Yes, I know it be wrong. And for 1 year it may be off by quite a bit. What I was asking is for a 30 year period that is usually run for FireCalc, which direction would it be off? IOW how would you estimate that it would affect the SWR.
User avatar
Topic Author
lauren_knows
Posts: 193
Joined: Mon Jan 28, 2013 2:11 pm
Location: NoVA, USA
Contact:

Re: Calculating the "return" of a bond (GS10)?

Post by lauren_knows »

Cut-Throat wrote:
boknows wrote:
Cut-Throat wrote:So, if true, what does this say to you?
Well, if it's true, methods that calculate the return as FireCalc does... are not accurate at all. Like the 1979 example. The old method has 1979 as a 9.1% return on bonds. The new method has it at -1%. That's a big difference.
Yes, I know it be wrong. And for 1 year it may be off by quite a bit. What I was asking is for a 30 year period that is usually run for FireCalc, which direction would it be off? IOW how would you estimate that it would affect the SWR.
Firecalc's defaults are $750k portfolio, $36k spending, 30 years, 75/25 AA.

Old method: 95% success rate SWR = $29,813.72/$750,000 = 3.975% SWR.
Proposed Method: 95% success rate SWR = $28,550.29/$750,000 = 3.806% SWR.

So, FireCalc is slightly overestimating SWR if this is true.

The difference gets bigger with a higher bond allocation. At 50/50:

Old: $29,961.35/750,000 = 3.994%
Proposed: $26,587.63/750,000 = 3.545%
41 - Married - 2 kids - Aiming for FI/ER in early 40s - Creator of cFIREsim
grayfox
Posts: 5569
Joined: Sat Sep 15, 2007 4:30 am

Re: Calculating the "return" of a bond (GS10)?

Post by grayfox »

When I first started playing with the Shiller data, I found that the total return was not calculated for either S&P500 or GS10. So I had to apply the total return formula for a holding period.

You buy a security at time t-1 at price Pt-1. During the holding period, you collect dividend Dt. You sell it at time t at price Pt.
We want to know the total return for the holding period. I am using monthly data, so I am calculating monthly total return series for GS10.

The formula for total return is

Image
From Total Return: The Foundation of Modern Finance

To simplify, I assumed that the GS10 was the YTM on a zero coupon bond, so I didn't have to keep track of interest payments (Dt=0). I ignored that zero-coupon usually has slightly higher YTM than coupon bond of the same maturity.
So you bought a 10-year (120 months) zero at a discount price in month 1 and sold one month later at the current price. I ignored that it would actually be a (119 month) bond and slightly higher in price. (Edit: Actually, I probably should have just calculated the discount price for the 119 month, and assumed the YTM was the same as the 120 month.)

E.g. $1000 10-Year Zero Coupon Treasury
1979.01 BUY YTM = 9.10 Price = $418.55
1979.02 SELL YTM = 9.10 Price = $418.55
Nominal return = 0.000%

1979.02 BUY YTM = 9.10 Price = $418.55
1979.03 SELL YTM = 9.12 Price = $417.79
Nominal return = -0.183%

1979.03 BUY YTM = 9.12 Price = $417.79
1979.04 SELL YTM = 9.18 Price = $415.50
Nominal return = -0.548%

and so on

Do this every month and to get the monthly total return series for the bond.
User avatar
Topic Author
lauren_knows
Posts: 193
Joined: Mon Jan 28, 2013 2:11 pm
Location: NoVA, USA
Contact:

Re: Calculating the "return" of a bond (GS10)?

Post by lauren_knows »

grayfox wrote:When I first started playing with the Shiller data, I found that the total return was not calculated for either S&P500 or GS10. So I had to apply the total return formula for a holding period.

You buy a security at time t-1 at price Pt-1. During the holding period, you collect dividend Dt. You sell it at time t at price Pt.
We want to know the total return for the holding period. I am using monthly data, so I am calculating monthly total return series for GS10.

The formula for total return is

Image
From Total Return: The Foundation of Modern Finance

To simplify, I assumed that the GS10 was the YTM on a zero coupon bond, so I didn't have to keep track of interest payments (Dt=0). I ignored that zero-coupon usually has slightly higher YTM than coupon bond of the same maturity.
So you bought a 10-year (120 months) zero at a discount price in month 1 and sold one month later at the current price. I ignored that it would actually be a (119 month) bond and slightly higher in price.

E.g. $1000 10-Year Zero Coupon Treasury
1979.01 BUY YTM = 9.10 Price = $418.55
1979.02 SELL YTM = 9.10 Price = $418.55
Nominal return = 0.000%

1979.02 BUY YTM = 9.10 Price = $418.55
1979.03 SELL YTM = 9.12 Price = $417.79
Nominal return = -0.183%

1979.03 BUY YTM = 9.12 Price = $417.79
1979.04 SELL YTM = 9.18 Price = $415.50
Nominal return = -0.548%

and so on

Do this every month and to get the monthly total return series for the bond.
So, forgive my naivety about bonds (which is why I'm posting this thread)... but the GS10 Shiller data is an interest rate. From what I'm being told, in calculating a bond's total return, you need to take into account the yield of that bond (from the interest rate), and capital appreciation... which requires using the maturity date (10 years for a GS10).

I think that you're explanation is using the interest rate as an analog to stock price. Is that correct thinking?
41 - Married - 2 kids - Aiming for FI/ER in early 40s - Creator of cFIREsim
grayfox
Posts: 5569
Joined: Sat Sep 15, 2007 4:30 am

Re: Calculating the "return" of a bond (GS10)?

Post by grayfox »

boknows wrote:
So, forgive my naivety about bonds (which is why I'm posting this thread)... but the GS10 Shiller data is an interest rate. From what I'm being told, in calculating a bond's total return, you need to take into account the yield of that bond (from the interest rate), and capital appreciation... which requires using the maturity date (10 years for a GS10).

I think that you're explanation is using the interest rate as an analog to stock price. Is that correct thinking?
Nope, has nothing to do with stock prices. I'm using the GS10 yield as the YTM of the bond. A coupon bond would sell at 100 and pay a coupon bond twice per year for ten years, then redeem at 100. This would be complicated to calculate because you would have to keep track of the interest payments, as well as price changes in the bonds.

A zero-coupon bond with the same YTM would sell at a discount price, pay nothing for ten years, then redeem at 100.
E.g. if YTM=9.10% then discount price for 10 years = 41.855 , if I calculated that correctly. So you only have to keep track of the monthly price change.

So I calculate the discount price of a 120-month zero-coupon bond with the same YTM as GS10. Buy it at discount and then sell it one month later as a 119-month bond at the new discount price, which is different because interest rates changed plus one less month. There is only the capital gain to calculate.
linuxizer
Posts: 1784
Joined: Wed Jan 02, 2008 6:55 am

Re: Calculating the "return" of a bond (GS10)?

Post by linuxizer »

I may have missed it, but are you accounting for interest-on-interest as well?
User avatar
Topic Author
lauren_knows
Posts: 193
Joined: Mon Jan 28, 2013 2:11 pm
Location: NoVA, USA
Contact:

Re: Calculating the "return" of a bond (GS10)?

Post by lauren_knows »

grayfox wrote:
boknows wrote:
So, forgive my naivety about bonds (which is why I'm posting this thread)... but the GS10 Shiller data is an interest rate. From what I'm being told, in calculating a bond's total return, you need to take into account the yield of that bond (from the interest rate), and capital appreciation... which requires using the maturity date (10 years for a GS10).

I think that you're explanation is using the interest rate as an analog to stock price. Is that correct thinking?
Nope, has nothing to do with stock prices. I'm using the GS10 yield as the YTM of the bond. A coupon bond would sell at 100 and pay a coupon bond twice per year for ten years, then redeem at 100. This would be complicated to calculate because you would have to keep track of the interest payments, as well as price changes in the bonds.

A zero-coupon bond with the same YTM would sell at a discount price, pay nothing for ten years, then redeem at 100.
E.g. if YTM=9.10% then discount price for 10 years = 41.855 , if I calculated that correctly. So you only have to keep track of the monthly price change.

So I calculate the discount price of a 120-month zero-coupon bond with the same YTM as GS10. Buy it at discount and then sell it one month later as a 119-month bond at the new discount price, which is different because interest rates changed plus one less month. There is only the capital gain to calculate.
Your methodology says:

Over the entire year of 1979:
E.g. $1000 10-Year Zero Coupon Treasury
1979.01 BUY YTM = 9.10 Price = $418.55
1980.01 SELL YTM = 10.8 Price = $415.02
Total Return = -0.8425%

The methodology I mentioned in the OP says that total return in 1979 is -1.00%. Is this specifically due to the assumptions on the zero-coupon? Is my above example assuming differently?
41 - Married - 2 kids - Aiming for FI/ER in early 40s - Creator of cFIREsim
User avatar
Topic Author
lauren_knows
Posts: 193
Joined: Mon Jan 28, 2013 2:11 pm
Location: NoVA, USA
Contact:

Re: Calculating the "return" of a bond (GS10)?

Post by lauren_knows »

linuxizer wrote:I may have missed it, but are you accounting for interest-on-interest as well?
As to not complicate things with running IOI totals, Firecalc and other spreadsheets assume total rebalance every year. So, I'm not sure that's an issue.
41 - Married - 2 kids - Aiming for FI/ER in early 40s - Creator of cFIREsim
linuxizer
Posts: 1784
Joined: Wed Jan 02, 2008 6:55 am

Re: Calculating the "return" of a bond (GS10)?

Post by linuxizer »

Playing around with bond simulator.

Code: Select all

library(maRketSim)
mt <- 30
# Create interest rate histories
rates <- data.frame( i = c(.1005,.0928,.1151,.1127), mat=c(.25,30,.25,30),t=c(79,79,80,80) ) # Data from H15 series annual
m79 <- market( market.bond( i = subset(rates,t==79&mat==30)$i, MMrate=subset(rates,t==79&mat==.25)$i ), t=79 )
m80 <- market( market.bond( i = subset(rates,t==80&mat==30)$i, MMrate=subset(rates,t==80&mat==.25)$i ), t=80 )
# Create a LT bond in 1979
b1 <- bond( m79, mat=mt )
b1
And the price changes:

Code: Select all

> summary(b1,m79)
30-year bond with interest of 9.28% under a current market yield of 9.28%.
Current maturity of 30 years.
Par value is $1000, paying $46.4 every 0.5 year.
Present value (price) of the bond under current market conditions is $1000
Macaulay duration is 10.53 years, modified duration is 10.07 years, with a convexity of 176.31.
> summary(b1,m80)
30-year bond with interest of 9.28% under a current market yield of 11.27%.
Current maturity of 29 years.
Par value is $1000, paying $46.4 every 0.5 year.
Present value (price) of the bond under current market conditions is $830.77
Macaulay duration is 9.16 years, modified duration is 8.67 years, with a convexity of 136.27.
Edit: Found a bug. Deleted last half of output.
Last edited by linuxizer on Tue Jan 07, 2014 12:36 pm, edited 1 time in total.
User avatar
Topic Author
lauren_knows
Posts: 193
Joined: Mon Jan 28, 2013 2:11 pm
Location: NoVA, USA
Contact:

Re: Calculating the "return" of a bond (GS10)?

Post by lauren_knows »

So, I'm searching more online for examples of if GS10 is a zero-coupon bond, and of course I run across GreyFox's website. Ha... I love BH.org.

http://www.lagunabeachbikini.com/index. ... est-rates/

What's slightly distressing to hear is this part:
A 10-Year Zero-Coupon Treasury with YTM of 5.10% would have sold for $608.10 in Feb-2001 and would pay $1000 in Feb-2011.
If this is true, then isn't any simulator or spreadsheet that "rebalances" annually, sort of cheating the calculation? If held say $250k in bonds that were purchased over the course of 20 years... that $250k would be comprised of all sorts of different rate bonds. Right?

I also need to find some source that states that the GS10 rates used in Shiller's data actually ARE zero-coupon. That seems to be a big deal.
41 - Married - 2 kids - Aiming for FI/ER in early 40s - Creator of cFIREsim
linuxizer
Posts: 1784
Joined: Wed Jan 02, 2008 6:55 am

Re: Calculating the "return" of a bond (GS10)?

Post by linuxizer »

boknows wrote:If this is true, then isn't any simulator or spreadsheet that "rebalances" annually, sort of cheating the calculation? If held say $250k in bonds that were purchased over the course of 20 years... that $250k would be comprised of all sorts of different rate bonds. Right?

I also need to find some source that states that the GS10 rates used in Shiller's data actually ARE zero-coupon. That seems to be a big deal.
Zero-coupon complicates things a little, but also simplifies (don't have to worry about interest-on-interest, etc.).

I don't see a problem with annual rebalancing of zeroes. That $250 would all be at the market interest rate, by definition. That's why the price changes occur--to equalize with the market rate.

Another question is what duration are they targeting when they rebalance? If they are just holding it steady at 10 year maturity each time they rebalance then the duration and therefore the risk would have shifted wildly over time (6.3y duration for a 10-year 11% bond vs. 8.7y duration for a 10-year 3% bond).
grayfox
Posts: 5569
Joined: Sat Sep 15, 2007 4:30 am

Re: Calculating the "return" of a bond (GS10)?

Post by grayfox »

boknows wrote:
I also need to find some source that states that the GS10 rates used in Shiller's data actually ARE zero-coupon. That seems to be a big deal.


GS10 is not zero coupon bond. That was just a simpifying assumption.

Zero usually has slightly higher ytm than coupon bond. Like the 10-year is 3.00% the zero might be 3.2%
Look it up on wsj
linuxizer
Posts: 1784
Joined: Wed Jan 02, 2008 6:55 am

Re: Calculating the "return" of a bond (GS10)?

Post by linuxizer »

grayfox wrote:Zero usually has slightly higher ytm than coupon bond. Like the 10-year is 3.00% the zero might be 3.2%
I believe zeroes typically have a lower yield than coupon bonds, in part because of lower liquidity and higher complexity (STRIPS are created from coupon-paying Treasuries). The higher yield you're seeing is an artifact of a longer duration, and is yet another reason why everyone should strive to think of bonds in terms of duration not maturity :-)
User avatar
Topic Author
lauren_knows
Posts: 193
Joined: Mon Jan 28, 2013 2:11 pm
Location: NoVA, USA
Contact:

Re: Calculating the "return" of a bond (GS10)?

Post by lauren_knows »

grayfox wrote:
boknows wrote:
I also need to find some source that states that the GS10 rates used in Shiller's data actually ARE zero-coupon. That seems to be a big deal.


GS10 is not zero coupon bond. That was just a simpifying assumption.

Zero usually has slightly higher ytm than coupon bond. Like the 10-year is 3.00% the zero might be 3.2%
Look it up on wsj
So, is my original formula in the OP, slightly more accurate that your zero-coupon assumption?
41 - Married - 2 kids - Aiming for FI/ER in early 40s - Creator of cFIREsim
User avatar
ogd
Posts: 4876
Joined: Thu Jun 14, 2012 11:43 pm

Re: Calculating the "return" of a bond (GS10)?

Post by ogd »

grayfox wrote:So you bought a 10-year (120 months) zero at a discount price in month 1 and sold one month later at the current price. I ignored that it would actually be a (119 month) bond and slightly higher in price. (Edit: Actually, I probably should have just calculated the discount price for the 119 month, and assumed the YTM was the same as the 120 month.)

E.g. $1000 10-Year Zero Coupon Treasury
1979.01 BUY YTM = 9.10 Price = $418.55
1979.02 SELL YTM = 9.10 Price = $418.55
Nominal return = 0.000%
This calculation ignores interest entirely. The reduction to 119 months is essential and it produces 1 month's worth of 9.10% interest. Like so:

1979.02 SELL YTM = 9.10 Maturity = 9.917 Price = $421.59
Nominal return = 0.72%

Maybe that's what you meant by your edit. For the record, I like the zero coupon method, it reinvests automatically, so to speak. However, zero coupons have a much longer duration than coupon bonds in time of high yields, for example:
boknows wrote:Over the entire year of 1979:
E.g. $1000 10-Year Zero Coupon Treasury
1979.01 BUY YTM = 9.10 Price = $418.55
1980.01 SELL YTM = 10.8 Price = $415.02
Total Return = -0.8425%
I get:
1980.01 SELL YTM = 10.8 Price = $397.32
Total Return = -5.07%

This is because the duration of a 10 year coupon bond of 9.1% is about 7 years, so the losses for the zero coupon with duration 10 years are greater and no longer balanced by the interest.

boknows: I think your method is mostly right, but it does ignore two things:
1) price appreciation to maturity, as hinted by your fellow posters elsewhere. A 10 year @9.1% @$100 in 1979 becomes a 9 year @10.8% @$90.51 in 1980, plus interest 9.1%, for a total return of -0.39%.
2) the yield curve. When you sell a 10 year bond after 1 year, it's a 9 year bond with a slightly different YtM. In 1980 the curve happened to be very flat, but at other times the curve is steeper. This actually involves getting yield curve data which is not easy.

FIRECalc probably assumes that the price depreciations self-correct in short order due to these two effects (e.g. yield curve flattening is an important reason why bond returns are close to the interest rates, as opposed to higher due to rolling yield), so it just uses the interest. I don't think it's a terrible assumption for all but the shortest intervals.
User avatar
Cut-Throat
Posts: 2011
Joined: Sun Oct 17, 2010 9:46 am

Re: Calculating the "return" of a bond (GS10)?

Post by Cut-Throat »

ogd wrote:FIRECalc probably assumes that the price depreciations self-correct in short order due to these two effects (e.g. yield curve flattening is an important reason why bond returns are close to the interest rates, as opposed to higher due to rolling yield), so it just uses the interest. I don't think it's a terrible assumption for all but the shortest intervals.
If this is true and his calculations are close to FireCalc's why is he getting a rather large discrepancy of results on a 30 year run?
User avatar
ogd
Posts: 4876
Joined: Thu Jun 14, 2012 11:43 pm

Re: Calculating the "return" of a bond (GS10)?

Post by ogd »

Cut-Throat wrote:
ogd wrote:FIRECalc probably assumes that the price depreciations self-correct in short order due to these two effects (e.g. yield curve flattening is an important reason why bond returns are close to the interest rates, as opposed to higher due to rolling yield), so it just uses the interest. I don't think it's a terrible assumption for all but the shortest intervals.
If this is true and his calculations are close to FireCalc's why is he getting a rather large discrepancy of results on a 30 year run?
Because he's missing the two things above, #1 being particularly important. If a large discrepancy persists, I'm not sure how much would be #2 (which as I mentioned is hard to do properly because you need 9 year yields) and how much would be FireCalc's simplifications.
dodonnell
Posts: 421
Joined: Wed Oct 29, 2008 6:48 pm

Re: Calculating the "return" of a bond (GS10)?

Post by dodonnell »

This is how Morningstar calculates it:

http://admainnew.morningstar.com/direct ... dology.pdf
User avatar
Topic Author
lauren_knows
Posts: 193
Joined: Mon Jan 28, 2013 2:11 pm
Location: NoVA, USA
Contact:

Re: Calculating the "return" of a bond (GS10)?

Post by lauren_knows »

ogd wrote:
This is because the duration of a 10 year coupon bond of 9.1% is about 7 years, so the losses for the zero coupon with duration 10 years are greater and no longer balanced by the interest.

boknows: I think your method is mostly right, but it does ignore two things:
1) price appreciation to maturity, as hinted by your fellow posters elsewhere. A 10 year @9.1% @$100 in 1979 becomes a 9 year @10.8% @$90.51 in 1980, plus interest 9.1%, for a total return of -0.39%.
Can you point out how you come up with a price of $90.51 for the 1980 example? It wouldn't be too difficult to model the bonds in FireCalc or any other tool, so that they rebalance every year... so it's always selling a 9yr bond and buying a 10yr.
2) the yield curve. When you sell a 10 year bond after 1 year, it's a 9 year bond with a slightly different YtM. In 1980 the curve happened to be very flat, but at other times the curve is steeper. This actually involves getting yield curve data which is not easy.
Because I'm trying to learn something that I don't know very well, can you explain the YtM formula? I see here: http://www.financeformulas.net/Yield_to_Maturity.html an example. In that example, is the "Face Value" what you bought it at (say 100) and the "Price" is the current price (say 90.51)? So, all you need is the interest rate and how much you paid for the bonds in question?
FIRECalc probably assumes that the price depreciations self-correct in short order due to these two effects (e.g. yield curve flattening is an important reason why bond returns are close to the interest rates, as opposed to higher due to rolling yield), so it just uses the interest. I don't think it's a terrible assumption for all but the shortest intervals.
Well, if it's not a bad assumption, this is all moot. I just don't know bonds that well and am trying to get more people to weigh in. Thanks!
41 - Married - 2 kids - Aiming for FI/ER in early 40s - Creator of cFIREsim
User avatar
ogd
Posts: 4876
Joined: Thu Jun 14, 2012 11:43 pm

Re: Calculating the "return" of a bond (GS10)?

Post by ogd »

boknows wrote:Can you point out how you come up with a price of $90.51 for the 1980 example? It wouldn't be too difficult to model the bonds in FireCalc or any other tool, so that they rebalance every year... so it's always selling a 9yr bond and buying a 10yr.
I just plugged into a bond calculator (http://www.investopedia.com/calculator/bondprice.aspx). Excel PRICE should give you the same. Crucially, I used 9 years instead of 10, otherwise I'd have gotten your 1% result. My guess is you need to change one of your 10's in your interest formula to a 9, but it's hard to parse and I don't have pen and paper handy.
boknows wrote:Because I'm trying to learn something that I don't know very well, can you explain the YtM formula? I see here: http://www.financeformulas.net/Yield_to_Maturity.html an example. In that example, is the "Face Value" what you bought it at (say 100) and the "Price" is the current price (say 90.51)? So, all you need is the interest rate and how much you paid for the bonds in question?
This would be an input, not a formula. The yield of 9 year money is something the market determines via the yield curve. I don't know where 9 year yields would be readily available, but you can get a vague idea of how flat the yield curve is in that region by comparing http://research.stlouisfed.org/fred2/data/GS7.txt and http://research.stlouisfed.org/fred2/data/GS10.txt; perhaps you could even interpolate asuming it's reasonably linear from 7 to 10. As you can see, flat in 1980, steep today.
boknows wrote:Well, if it's not a bad assumption, this is all moot. I just don't know bonds that well and am trying to get more people to weigh in. Thanks!
I'm interested in how close your results are after the first change (10 year -> 9); the second is quite a bit harder to make. Please report back here if you can :beer
grayfox
Posts: 5569
Joined: Sat Sep 15, 2007 4:30 am

Re: Calculating the "return" of a bond (GS10)?

Post by grayfox »

boknows wrote:
grayfox wrote:
boknows wrote:
I also need to find some source that states that the GS10 rates used in Shiller's data actually ARE zero-coupon. That seems to be a big deal.


GS10 is not zero coupon bond. That was just a simpifying assumption.

Zero usually has slightly higher ytm than coupon bond. Like the 10-year is 3.00% the zero might be 3.2%
Look it up on wsj
So, is my original formula in the OP, slightly more accurate that your zero-coupon assumption?
You don't have to make the zero-coupon assumption. I was just trying to simplify the formula.

Bascially you have Shiller monthly data with a column of YTM's, but not monthly returns which you want. To get monthly total return you need three things: Pt-1, Dt and Pt. Then use the formula:

Image

1. Assume that every month you purchase a 120-month bond at par (Pt=100) with coupon that will give YTM = GS10 column. I think you can just set coupon = GS10 YTM, since it is a par bond when you buy it.

2. During the month, assume that you collected 1/12 of one year's interest, calculated from coupon. (Even though It' actually paid only twice per year.) That is Dt.

3. Then sell the bond at the beginning of the next month using new price Pt from bond pricing formula, Excel PRICE function, for a 119-month bond with current 119-month YTM and original coupon. Approximate the 119-month YTM with 120-month. (Probably nobody has the 119-month data, only 10-year data). The price will most likely not be 100 anymore. There will either be a capital gain or loss.

To get annual return, compound previous twelve monthly returns.
User avatar
gordoni2
Posts: 213
Joined: Wed Aug 15, 2007 12:20 am
Contact:

Re: Calculating the "return" of a bond (GS10)?

Post by gordoni2 »

Agree. I think this is a significant and easy to make mistake (failing to adjust bond returns for changing prices). In an early version of AACalc I made exactly the same error. I caught it and fixed it before going live, but it could easily have slipped by.
boknows wrote:I came up with the following calculation for the bond return of a given year: (InterestRate*((1-(1+NextYearsInterestRate^-10))/NextYearsInterestRate)) + (1/((1+NextYearsInterestRate)^10))-1) + InterestRate.
I think your formula is correct (other than one too many closing parentheses in the second term)).
User avatar
BlueEars
Posts: 3968
Joined: Fri Mar 09, 2007 11:15 pm
Location: West Coast

Re: Calculating the "return" of a bond (GS10)?

Post by BlueEars »

.....
Last edited by BlueEars on Wed Jan 08, 2014 2:24 pm, edited 3 times in total.
User avatar
ogd
Posts: 4876
Joined: Thu Jun 14, 2012 11:43 pm

Re: Calculating the "return" of a bond (GS10)?

Post by ogd »

BlueEars wrote: The Fed data is an average daily yield for each month in column B. In row 123 I calculate an income return in column C as just = (1+ B123/100)^(1/12) . The rate change in column D with a duration of 8.527 for the 10yr Treasury is just = 8.527*(B123 - B124)/100 . Add these to get the monthly return. Column F is just the multiplied total returns as they accumulate.
...
Does this look reasonable? I'm not a bond expert.
Duration is rate-dependent. It's 8.5-ish presently, but at 9.1% it's 6.97 years and at 10.8 it's 6.58. This is because a higher coupon bond front-loads the payments more. So you have substantially less losses.

I'm wary of the precision of multiplications (for longer periods), and in general I like the method that uses a bond directly better, given the source data is a single bond yield.
User avatar
BlueEars
Posts: 3968
Joined: Fri Mar 09, 2007 11:15 pm
Location: West Coast

Re: Calculating the "return" of a bond (GS10)?

Post by BlueEars »

That is interesting about duration being a function of the Treasury rates. I imagine it is simple enough that a lookup table could be used. Any ideas how to assemble one for a simple case like the 10year Treasury?
stlutz
Posts: 5585
Joined: Fri Jan 02, 2009 12:08 am

Re: Calculating the "return" of a bond (GS10)?

Post by stlutz »

To calculate using a regular (non-zero coupon) bond:

If you assume 9 year rates are the same as 10 year rates (not a bad assumption), then your 1 year return calculation using OpenOffice/Libre Office (the Excel formula should be very similar) would be:

=((((PRICE(VALUE("1/1/2000"),VALUE("1/1/2009"),0.091,0.108,100,2,0))+9.1)/100)-1)*100

This calculate the price on bond (presumably a 10 year) that started at 9.1%, but now yields 10.8%. I'm calculating the price with 9 years left to maturity. I add the $9.10 in interest, then divide by the starting price of 100, and then put in on a percentage basis by subtracting 1 and adding 100.

I get -.53%.

Using actual bond returns (price change + interest) as opposed to just taking the coupon rate will negatively impact your SWR calculations for retirements that start in the late 60s/early 70s, as this makes after-inflation bond returns in the 1970s more negative at the same time after-inflation stock returns were also negative.

I can't remember exactly which year, but I do know that somewhere between 1967 and 1969 is sort of a worst-case starting year for retirement in these simulators. Calculating bond returns correctly makes it even worse.

On the other hand, when looking at de/dis-inflationary periods like the depression or using a start year of 1999, using price+interest bond returns will make your calculations work out better.
Last edited by stlutz on Tue Jan 07, 2014 10:19 pm, edited 1 time in total.
stlutz
Posts: 5585
Joined: Fri Jan 02, 2009 12:08 am

Re: Calculating the "return" of a bond (GS10)?

Post by stlutz »

Again in Libre/OpenOffice, the duration on a 10 year bond yielding 10% would be:

=DURATION_ADD(VALUE("1/1/2000"),VALUE("1/1/2010"),0.1,0.1,2,0

Adjust the .1 values to your desired interest rate.

A 10 year bond yielding 10% has a duration of 6.5; one that yields 3% works out to be 8.7.
User avatar
BlueEars
Posts: 3968
Joined: Fri Mar 09, 2007 11:15 pm
Location: West Coast

Re: Calculating the "return" of a bond (GS10)?

Post by BlueEars »

Thanks, it looks like the DURATION function in Excel with the same arguments gives the same values.
User avatar
#Cruncher
Posts: 3977
Joined: Fri May 14, 2010 2:33 am
Location: New York City
Contact:

Re: Calculating the "return" of a bond (GS10)?

Post by #Cruncher »

ogd in [url=http://www.bogleheads.org/forum/viewtopic.php?p=1914055#p1914055]this post[/url] wrote:
boknows wrote:Can you point out how you come up with a price of $90.51 for the 1980 example? ...
I just plugged into a bond calculator ... Crucially, I used 9 years instead of 10, otherwise I'd have gotten your [negative] 1% result. My guess is you need to change one of your 10's in your interest formula to a 9 ...
That's correct, ogd, except boknows' needs to change both 10's to 9's. Here is his formula from the original post with a corrected & simplified version on the 2nd row (IR = 9.1% coupon and NYIR = 10.8% yield to maturity one year later):

Code: Select all

  (IR * ((1-(1+NYIR ^-10))/NYIR)) + (1/((1+NYIR)^10))-1) + IR <- boknows' formula
   IR *  (1-(1+NYIR)^-10) /NYIR   +  1/((1+NYIR)^10) -1  + IR <- corrected formula
         ----------------------      ---------------
                  PVA$1                    PV$1
Part of the formula (PV$1) represents the present value of $1 to be received in 10 years. Another part (PVA$1) represents the present value of $1 to be received at the end of each year for 10 years. Since (1+NYIR)^-10 is equivalent to 1/((1+NYIR)^10), PVA$1 can be expressed as (1 - PV$1) / NYIR.

Substituting 9 for 10 in the formula will produce your $90.51 result shown in column C below.

Code: Select all

      A           B         C
  --------     -------   -------
   10          10         9        Years
    9.1%       10.8%     10.8%     Yield to maturity (ytm)
    0.4186      0.3586    0.3973   Present value of $1 (PV$1 = 1 / (1 + ytm) ^ years)
    6.3895      5.9389    5.5804   Present value of annuity of $1 (PVA$1 = (1 - PV$1) / ytm)
   41.86       35.86     39.73     Present value of principal
   58.14       54.04     50.78     Present value of 9.1% coupon
  100.00       89.90     90.51     Present value of bond
                9.10      9.10     Coupon interest for 1 year
               99.00     99.61     Total value plus coupon interest
               -1.00%    -0.39%    Return over 1 year
This assumes a 10-year bond with 9.1% coupon paid annually. Column A derives its initial $100 value with the 9.1% yield equal to its coupon. Column B derives the return based on an increase in yield to 10.8% and a 10 year remaining life. Column C does the same except with a remaining life of 9 years.

By the way, one can see the monthly GS10 yields by clicking [View Data] on the left side of this FRED web page.
Last edited by #Cruncher on Wed Jan 08, 2014 6:55 am, edited 1 time in total.
User avatar
Topic Author
lauren_knows
Posts: 193
Joined: Mon Jan 28, 2013 2:11 pm
Location: NoVA, USA
Contact:

Re: Calculating the "return" of a bond (GS10)?

Post by lauren_knows »

#Cruncher wrote:
ogd in [url=http://www.bogleheads.org/forum/viewtopic.php?p=1914055#p1914055]this post[/url] wrote:
boknows wrote:Can you point out how you come up with a price of $90.51 for the 1980 example? ...
I just plugged into a bond calculator ... Crucially, I used 9 years instead of 10, otherwise I'd have gotten your [negative] 1% result. My guess is you need to change one of your 10's in your interest formula to a 9 ...
That's correct, ogd, except boknows' needs to change both 10's to 9's. Here is his formula from the original post with a corrected & simplified version on the 2nd row (IR = 9.1% coupon and NYIR = 10.8% yield to maturity one year later):

Code: Select all

  (IR * ((1-(1+NYIR ^-10))/NYIR)) + (1/((1+NYIR)^10))-1) + IR <- boknows' formula
   IR *  (1-(1+NYIR)^-10) /NYIR   +  1/((1+NYIR)^10) -1  + IR <- corrected formula
         ----------------------      ---------------
                  PVA$1                    PV$1
Part of the formula (PV$1) represents the present value of $1 to be received in 10 years. Another part (PVA$1) represents the present value of $1 to be received at the end of each year for 10 years. Since (1+NYIR)^-10 is equivalent to 1/((1+NYIR)^10), PVA$1 can be expressed as (1 - PV$1) / NYIR.

Substituting 9 for 10 in the formula will produce your $90.51 result shown in column C below.

Code: Select all

      A           B         C
  --------     -------   -------
   10          10         9        Years
    9.1%       10.8%     10.8%     Yield to maturity (ytm)
    0.4186      0.3586    0.3973   Present value of $1 (PV$1 = 1 / (1 + ytm) ^ years)
    6.3895      5.9389    5.5804   Present value of annuity of $1 (PVA$1 = (1 - PV$1) / ytm)
   41.86       35.86     39.73     Present value of principal
   58.14       54.04     50.78     Present value of 9.1% coupon
  100.00       89.90     90.51     Present value of bond
                9.10      9.10     Coupon interest for 1 year
               99.00     99.61     Total value plus coupon interest
               -1.00%    -0.39%    Return over 1 year
This assumes a 10-year bond with 9.1% coupon paid annually. Column A derives its initial $100 value with the 9.1% yield equal to its coupon. Column B derives the return based on an increase in yield to 10.8% and a 10 year remaining life. Column C does the same except with a remaining life of 9 years.
This is stellar work. Thanks for the explanation.
41 - Married - 2 kids - Aiming for FI/ER in early 40s - Creator of cFIREsim
Post Reply