1 / 25

Fixed Income

Fixed Income. Downloads. Today’s work is in: matlab_lec09.m Functions we need today: ycurve.m Datasets we need today: data_bonds.m. Bonds. A bond is a security that pays a predefined amount at predefined future dates

edana
Download Presentation

Fixed Income

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Fixed Income

  2. Downloads • Today’s work is in: matlab_lec09.m • Functions we need today: ycurve.m • Datasets we need today: data_bonds.m

  3. Bonds • A bond is a security that pays a predefined amount at predefined future dates • They care called fixed income securities because the payments are (usually) fixed • Note that unlike stocks, bonds are (usually) free of cash flow risk • Bonds still carry discount rate risk

  4. Price • As with any security, the price of a bond is the discounted present value of all future cash flows • Suppose a bond pays $3 on Jan 1st 2009, $3 on Jan 1st 2010, and $103 on Jan 1st 2011 • Suppose today is Jan 1st 2008 and you expect the discount rate to be 2% in 2008, 3% in 2009, and 4% in 2010 • The bond’s price is

  5. Yield • Note that in the above example the discount rate was not constant! • We can try to find a constant discount rate that would make the bond’s actual price equal to the discounted value of cash flows. This discount rate is called the Yield • Note that the yield is not the “true” discount rate • For the above bond, the yield is

  6. Institutional Details • In the U.S. most bonds have coupons which are paid every 6 months • Coupon payments are quoted as an annual percent of the principle • ie if coupon is 3% bond pays $1.5 twice per year • At the time the bond matures, the owner receives the principal and one last coupon payment • A bond that matures on Jan 1st 2010 and has a 4% coupon rate has payments of: $102 on Jan 1st 2010, $2 on July 1st 2009, $2 on Jan 1st 2009 …

  7. Institutional Details • If I buy a bond with 2 months left until the coupon payment, I will receive the full coupon payment I am entitled to all future payments • The price is the present value of all future payments, this is called the “dirty” price and is the true out of pocket cost to buyer • This is the only number we should care about or know • Banks do not quote the dirty price but rather “clean” price • ClnP = DrtP – AccrInt • Accrued Interest = Coupon*(6-MonthUntilCoupon) • Buyer pays DrtP=ClnP+AccrInt • Just after coupon is paid, AccrInt=0 so ClnP=DrtP • To avoid unnecessary complications we will only look at bonds close to after coupon paid so that ClnP≈DrtP

  8. ConstructingDataset • This data set is being constructed on Oct 3, 2008 • Data comes from Bloomberg screen on trading floor • Could also get data from WSJ: http://online.wsj.com/mdc/public/page/mdc_bonds.html?mod=mdc_topnav_2_3000 • We will construct the vector maturity: >>maturity(1)=2009+4/12; • We will construct the vector price: >>price(1)=100+33.5/36 %prices quoted as fraction of 36 %we are given bid and ask, take midpoint • We will construct the vector coupon: >>coupon(1)=3+1/8;

  9. Load Data >>data_bonds; >>N=length(maturity); %number of bonds >>calendar=[2008+(9/12):(1/12):2030]'; >>T=length(calendar); >>startdate=2008+(10/12)+((3/31)/12);

  10. Construct CF >>CF=zeros(T,N); %make matrix of cashflows >>for i=1:N; [a Tmat]=min(abs(maturity(i)-calendar)); CF(Tmat,i)=100+coupon(i)*.5; for t=1:Tmat-1; if mod(t,6)==0 & calendar(Tmat-t)>startdate; CF(Tmat-t,i)=coupon(i)*.5; end; end; end;

  11. Construct CF >> CF(1:20,1:6) ans = 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 101.5625 102.2500 1.6875 1.8125 2.0000 1.0625 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 101.6875 101.8125 2.0000 1.0625 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 102.0000 101.0625

  12. Calculating Yield >> for i=1:N; prerrbest=100000000; for j=1:1000; y=0+.2*(j-1)/(1000-1); py=sum(CF(:,i)./((1+y).^(calendar-startdate))); prerr=abs(price(i)-py); if prerr<prerrbest; prerrbest=prerr; yieldbest(i)=y; end; end; end; >> plot(maturity,yieldbest,'.'); >> xlabel('Maturity'); ylabel('Yield');

  13. Calculating Yield • Note that yield increases with maturity, this is typical • However, this is not what is known as the yield curve (though it is related)

  14. The Yield Curve • A zero-coupon bond is a bond that has no coupon payments and only pays the principal at maturity • For such a bond yT=rT where r is the rate of return and T is time until maturity • Note that any other bond can be constructed with a portfolio of “zeros” so if we know the prices (or yields) of “zeros” of every maturity we can price any other bond • The Yield curve is the yield on zero coupon bonds of every maturity • Also called Term Structure of Interest Rates • Note that we have already broken up all of our bonds into “zeros” within the matrix CF • Now we just need a yield for each point in time which will make each bond price (almost) agree with the price of the cash flows

  15. Constructingthe Yield Curve • We will not solve for a yield for every date but rather at a few different dates and then interpolate between them %motnhs in which we will solve for yield >>yieldgriddate=[6 12 18 24 30 36 42 48 60 72 96 120 180 T]'; %actual dates of those months >>yielddate=calendar(yieldgriddate); %initial guess (these are yields of bonds at various maturities taken from printout) >>y0=[1.0123 1.0157 1.0150 1.0158 1.0175 1.0204 1.0228 1.0238 1.027 1.028 1.033 1.037 1.042 1.042]';

  16. ycurve.m function x=ycurve(yieldgrid,yielddate,calendar,startdate,CF,price,N,T); %first interpolate to get yield for every date in dataset for t=1:T; [a b]=min(abs(yielddate-calendar(t))+10000*(yielddate>=calendar(t))); if b==length(yielddate); b=b-1; end; mult=(calendar(t)-yielddate(b))/(yielddate(b+1)-yielddate(b)); yield(t,1)=yieldgrid(b)+mult*(yieldgrid(b+1)-yieldgrid(b)); end; %next calculate the discounted present value of CF and compare to price for i=1:N; err(i)=price(i)-sum(CF(:,i)./(yield.^(calendar([1:T]')-startdate))); end; x=mean(abs(err));

  17. Constructingthe Yield Curve • ycurve.m takes in any yield curve and return the pricing error from that curve, we want to make that error as small as possible • fminsearch.m can minimize errors, its inputs are a function, and a set of initial values; it will then search over values to find the minimum of the function • Sometimes you have to apply fminsearch.m more than once to get to “better” minimum

  18. Constructingthe Yield Curve >>y1=fminsearch(@ycurve,y0,[],yielddate,calendar,startdate,CF,price,N,T); >>y2=fminsearch(@ycurve,y1,[],yielddate,calendar,startdate,CF,price,N,T); >>y3=fminsearch(@ycurve,y2,[],yielddate,calendar,startdate,CF,price,N,T); %check minimum values: >> disp([ycurve(y0,yielddate,calendar,startdate,CF,price,N,T) ... ycurve(y1,yielddate,calendar,startdate,CF,price,N,T) ... ycurve(y2,yielddate,calendar,startdate,CF,price,N,T) ... ycurve(y3,yielddate,calendar,startdate,CF,price,N,T)]); 3.1012 0.5914 0.5521 0.5518 %plot the yield curve >>plot(yielddate,y3,'LineWidth',3); • The yield curve is upward sloping, this is typical • This suggests expectations of higher interest rates in the future and/or more risk at longer maturities • Sometimes (rarely) yield curves are downward sloping • This is called “inverted” and often precedes recessions • Suggests expectations of lower interest rates and/or less risk at longer maturities

More Related