1 / 25

# Fixed Income - PowerPoint PPT Presentation

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

I am the owner, or an agent authorized to act on behalf of the owner, of the copyrighted work described.

## PowerPoint Slideshow about 'Fixed Income' - edana

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.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.

- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -
Presentation Transcript

### Fixed Income

• Today’s work is in: matlab_lec09.m

• Functions we need today: ycurve.m

• Datasets we need today: data_bonds.m

• 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

• 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

• 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

• 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 …

• 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)

• 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

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;

>>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);

>>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;

>> 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

>> 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');

• Note that yield increases with maturity, this is typical

• However, this is not what is known as the yield curve (though it is related)

• 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

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]';

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));

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

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