MBS_Tabular() function |
MBS_Tabular() function
MBS_Tabular(argument list )
This function values a mortgage security using Monte Carlo simulation on a Hull-White interest rate tree, with a user-defined prepayment model (via a 2-dimensional lookup table). Customized versions of this function can be created on demand, if one were to provide a suitable prepayment function.
The function returns a 1 row by 12 columns ARRAY (see section on Array Formulas in this manual). The return values consist of estimated security price, standard error of the estimate, and option-adjusted duration (in years) for the total security, and for the PO, IO, and PIP components; the values are in the following order:
1. total MBS price
2. total MBS standard error of price
3. total MBS duration
4. Principal-Only price
5. Principal-Only standard error of
price
6. Principal-Only duration
7. Interest-Only price
8. Interest-Only standard error of price
9. Interest-Only duration
10. Penalty-Interest-Payments-only price
11. Penalty-Interest-Payments-only
standard error of price
12. Penalty-Interest-Payments-only
duration
Suppose that the price estimate was $99.05, and the standard deviation of the estimate was $0.05. This means that 19 times out of 20, the "true price" (according to all the model's assumptions and inputs) will lie between two standard deviations of the estimate, i.e. between $99.85 and $99.15. The number of simulations can be increased in order to improve the precision of the estimate (albeit with a commensurate increase in computational time).
Note that the returned values are in all cases DIRTY prices (i.e. inclusive of any accrued interest, as of the valuation date). Clean prices can be calculated by making an adjustment for accrued interest, however the adjustment can sometimes be security specific, and time-of-month specific, so we've excluded that from this analysis).
The antithetic variate technique is used by default to maximize accuracy.
The function uses the following arguments (29 in total, which is the maximum allowed by Excel; MBS are indeed complex!):
Argument | Description | Restrictions |
VD | the valuation date for the security (e.g. today); NB: the first element of the zero curve date arrays must be equal to this value | valid Excel date number |
MD | maturity date of mortgage | valid Excel date
number >= VD |
FOD | first "open" date of the mortgage (before this date, full economic prepayment penalties apply, which are based on the entire interest rate differential); if the first open date is past the maturity date, the mortgage is "closed" | none |
Age | the age of the mortgage, in MONTHS, as of the valuation date | >= 0 |
Princ | the remaining principal of the mortgage in dollars (we suggest that this value always be set at $100, in order to allow on to value the mortgage as a percentage of remaining principal more easily) | > 0 |
CleanUp | if the remaining principal falls below this dollar level, the mortgage is assumed to pay off in full immediately | < Principal |
RAM | the remaining amortization of the mortgage, measured in MONTHS from the valuation date (e.g. 20 years remaining amortization would be entered as 240) | > 0 |
Freq | the payment frequency of the mortgage (number of payments per annum) | 1, 2, 4, or 12 |
Coupon | the coupon rate on
the mortgage security in decimal form, e.g. 8% is
expressed as 0.08 (for MBS, this is often lower than the
rate on the underlying mortgages) NB: this rate must be specified as an annual rate, with a compounding frequency of Freq (e.g. 10% would represent a 2.5% quarterly rate, if the frequency is 4) If the quoted coupon is semi-annual, and the mortgage pays monthly, the semi-annual rate must be converted to the equivalent rate which is compounded monthly. |
>= 0 |
Mort_Rate | the weighted-average mortgage rate for the pool, expressed as an annualized rate, but with a compounding frequency of Freq (see note directly above, on "Coupon") | >= Coupon |
Age_VecX | a row vector of mortgage ages (in months) for indexing into the prepayment matrix | ascending order |
C_R_VecY | a column vector of refinancing incentives (defined as mortgage rate less the refinancing rate, both expressed on a semi-annual compounding frequency), in decimal form (e.g. 5% is expressed as 0.05) | ascending order |
PrepMatrix | an array of annualized prepayment rates in decimal form (e.g. 20% is expressed as 0.20) | number of rows must equal dimension of C_R_VecY, and number of columns must equal dimension of Age_VecX |
PrepFact | a multiplicative factor for the tabular prepayment (e.g. 1.0 would give the standard prepayment model, 0.0 would give no prepayments at all, 2.0 would give 200% of normal prepayments, etc.) | >= 0 (typically 1.0) |
PrepShift | an additive shift
to the prepayments (in annualized form), which are added
AFTER the multiplicative factor above is used For example, 0.05 would add 5% to the annual prepayment rate for all times and refinancing incentives. |
none (typical 0.0) |
LiqPerc | the percentage of
prepayments which are liquidations IN THE OPEN period (in
the closed period, we assume 100% partal prepayments) Typically, this value is 0.90 or so (90% liquidations). |
>= 0.0 <= 1.0 |
NumPIP | the number of months worth of penalty interest for liquidations in the open period (e.g. 3 months is typical for Canada) | >= 0.0 |
ShortRateVol | annual standard deviation of the short rate of interest, in decimal form (Hull-White model) | > 0 |
Rev_Rate | mean reversion rate
of the short rate of interest, in decimal form
(Hull-White model) When set to zero, the Hull-White model reduces to the Ho-Lee [1986] model. |
>= 0 |
GovDates | array of zero coupon curve dates for the government risk-free curve (i.e. zero credit risk) | strictly
ascending order The first date of this array must be Valuation_Date (VD) |
GovRates | array of continuously compounded zero coupon rates in decimal form (e.g. six percent entered as 0.06) for the government risk-free curve | > 0 correspond to GovDates array |
GovShock | a 4 by 1 vector, in the order OAS, Bucket_Start, Bucket_End, and Bucket_Shift which allow one to shock the risk-free curve (see any Hull-White function for the definitions of the OAS, Bucket_Start, Bucket_End, and Bucket_Shift requirements) | must have 4 elements |
CredDates | array of zero coupon curve dates for the risk cost-of-credit curve; this curve should be ABOVE the Government curve, as it should reflect the credit risk of the underlying mortgage cash flows, as well as the liquidity of the security, transactions costs, and return on capital (profits) of the mortgage lender/investor | strictly
ascending order The first date of this array must be Valuation_Date (VD) |
CredRates | array of continuously compounded zero coupon rates in decimal form (e.g. six percent entered as 0.06) for the risky curve | > 0 correspond to CredDates array |
CredShock | a 4 by 1 vector, in the order OAS, Bucket_Start, Bucket_End, and Bucket_Shift which allow one to shock the risk-free curve (see any Hull-White function for the definitions of the OAS, Bucket_Start, Bucket_End, and Bucket_Shift requirements) | must have 4 elements |
MortTerms | a vector of mortgage terms in months (e.g. 6, 12, 24, 36, 60) for which we will specify mortgage spreads over government par bond yields | a vector |
MortSpreads | a vector of spreads
over the semi-annual government par rate for
mortgages of the corresponding tenor. These are used to
determine the relevant refinancing rates in future
scenarios. |
none (but should
normally be positive) The array must be of the same length as MortTerms. |
Steps | the number of tree steps per mortgage payment (typically 1 or 2, although perhaps higher for very short term MBS, or for ones with a low payment prequency) | > 0 |
Sims | the number of Monte Carlo simulations (increase this number to improve accuracy) | > 10 typically 1000 or more |
© 1995-98 Leap of Faith Research Inc.