Residential Mortgage-Backed Securities (RMBS) represent a cornerstone of global fixed income capital markets, transforming illiquid underlying mortgage loan pools into structured, tradeable bonds. Structuring institutional RMBS requires rigorous mathematical cash flow waterfall modeling (Sequential Pay vs Planned Amortization Class / PAC tranches), constant prepayment rate (CPR) forecasting, and negative convexity hedging via interest rate swaptions.
The Mechanics of RMBS Cash Flow Waterfalls & Prepayment Sensitivity
How principal and interest cash flows cascade through senior and subordinated tranches:
Unlike standard fixed-rate corporate bonds that exhibit positive price-yield convexity, mortgages contain embedded borrower prepayment options. When benchmark interest rates decline, mortgagors refinance, compressing mortgage duration and capping bond price appreciation ($-\frac{d^2P}{dy^2} < 0$). Managing this requires dynamic delta-gamma hedging via receiver swaptions.
RMBS Capital Structure Tranche Hierarchy
| Tranche Class | Credit Rating | Cash Flow Priority | Prepayment & Extension Risk |
|---|---|---|---|
| Senior Class A (PAC / Sequentials) | AAA / Aaa | First priority principal & interest | Protected via support tranches |
| Mezzanine Class M1 / M2 | AA to BBB | Subordinated to Senior Class A | Moderate credit & duration volatility |
| Subordinated / Equity B Tranche | Unrated / BB | First-loss position (Residual yield) | High default & extension exposure |
Single Monthly Mortality (SMM) & CPR Prepayment Model in TypeScript
Simulating pool amortization and monthly principal prepayments:
export interface MortgagePoolParams {
startingBalance: number;
wacRate: number; // Weighted Average Coupon
termMonths: number;
annualCpr: number; // Constant Prepayment Rate (e.g. 0.08 for 8% CPR)
}
export function calculateMonthlyPoolAmortization(params: MortgagePoolParams): { scheduledPrincipal: number; prepaymentPrincipal: number; remainingBalance: number } {
const monthlyRate = params.wacRate / 12;
const smm = 1 - Math.pow(1 - params.annualCpr, 1 / 12);
const scheduledPayment = params.startingBalance * (monthlyRate * Math.pow(1 + monthlyRate, params.termMonths)) / (Math.pow(1 + monthlyRate, params.termMonths) - 1);
const scheduledInterest = params.startingBalance * monthlyRate;
const scheduledPrincipal = scheduledPayment - scheduledInterest;
const prepayableBalance = params.startingBalance - scheduledPrincipal;
const prepaymentPrincipal = prepayableBalance * smm;
const remainingBalance = prepayableBalance - prepaymentPrincipal;
return { scheduledPrincipal, prepaymentPrincipal, remainingBalance };
}
Structure Your Fixed Income & Mortgage Portfolios
Hedge interest rate sensitivity and optimize credit yields. Read our guide on Syndicated Mezzanine Debt & Intercreditor Deeds, explore commercial rollover physics on CarInjuryAttorney Forensics, review real-time ad bidding on AffiliatePartners RTB Engines, or consult with our structured credit team.