Standard prepayment effects on

Mortgage-Backed Securities cash flows

Introduction

The fixed income toolbox has functionality for dealing with mortgages with known or assumed standard prepayment speed. The standard prepayment speed determines the amount of additional principal being repaid on top of the scheduled principal repayment. In other words, it directly describes the value of call option being written on the mortgage pool.

Standard Prepayment functions

The standard prepayment functions per the Bond Markets Association, is described as a linearly increasing function of time from 0 to 30 months at the rate of 0.2% monthly and flat at 6% thereafter to maturity (360th month). This particular curve is also described as 100% PSA. Other standard prepayment curves are expressed as multiples of this base curve, as depicted in the figure below:

 

PSASpeed = [100 200];

[CPRPSA, SMMPSA]= psaspeed2rate(PSASpeed);

figure(1);

plot([1:10:360], CPRPSA([1:10:360],1), 'bo-',  [1:10:360], CPRPSA([1:10:360],2), 'rx-')

legend({'100 PSA'; '200 PSA'})

ylabel('Annual Prepayment rate in [%]')

xlabel('Month since origination');

title('Standard prepayment functions')

grid;

 

These curves are used to adjust the scheduled cash flows due to regular amortization, to reflect the impact of assumed prepayment on the mortgage cash flows. (To be precise, a monthly version of the curve is used to adjust the monthly cash flows. In mortgage parlance, the annual rate is termed CPR – constant prepayment rate -, and the monthly rate is termed SMM – single monthly mortality rate. The relation between SMM and CPR is:

 

 

 

Cash Flow Patterns

A function called mbspassthrough can be used to generate expected cash flow amounts when such prepayment function is used. Cash flow patterns corresponding to 0, 100, and 400 PSA are displayed below. The last plot corresponds to a flat, constant prepayment of 4% annual.

 

OriginalBalance = 100000;

GrossRate = 0.08125;

OriginalTerm = 360;

TermRemaining = 360;

  

PrepaySpeed = 0;

[Balance, Payment, Principal, Interest, Prepayment] = ...

mbspassthrough(OriginalBalance, GrossRate, OriginalTerm, ...

TermRemaining, PrepaySpeed);

figure(2)

bar([Principal, Interest, Prepayment],'stacked')

legend({'Scheduled Principal'; 'Interest'; 'Prepayment'})

title('Cash flows under 0 PSA');

     

PrepaySpeed = 100;

[Balance, Payment, Principal, Interest, Prepayment] = ...

mbspassthrough(OriginalBalance, GrossRate, OriginalTerm, ...

TermRemaining, PrepaySpeed);

figure(3)

bar([Principal, Interest, Prepayment],'stacked')

legend({'Scheduled Principal'; 'Interest'; 'Prepayment'})

title('Cash flows under 100 PSA');

     

PrepaySpeed = 400;

[Balance, Payment, Principal, Interest, Prepayment] = ...

mbspassthrough(OriginalBalance, GrossRate, OriginalTerm, ...

TermRemaining, PrepaySpeed);

figure(4)

bar([Principal, Interest, Prepayment],'stacked')

legend({'Scheduled Principal'; 'Interest'; 'Prepayment'})

title('Cash flows under 400 PSA');     

  

 

PrepayVector = 0.04/12*ones(360,1);

[Balance, Payment, Principal, Interest, Prepayment] = ...

mbspassthrough(OriginalBalance, GrossRate, OriginalTerm, ...

TermRemaining, [], PrepayVector);

figure(5)

bar([Principal, Interest, Prepayment],'stacked')

legend({'Scheduled Principal'; 'Interest'; 'Prepayment'})

title('Cash flows under 4% flat annual prepayment'); 

 

 

In summary, the standard prepayment functions have been incorporated into the mortgage-backed securities functions but you have the option to override the functions and supply your own prepayment function in an array format.