Commercial Mortgage & Fixed-Income Analytics
CMBS Yield Maintenance Prepayment Penalty Formula
Calculate commercial mortgage Yield Maintenance prepayment penalties MAX(Floor * Balance, Balance * (r_note - y_T) * ((1 - (1 + y_T)^(-T)) / y_T)) as Treasury yields move.
Why refinancing a fixed-rate commercial mortgage when rates drop triggers a huge Yield Maintenance fee!
Unlike residential mortgages that allow penalty-free refinancing, agency and CMBS commercial loans protect bondholders with Yield Maintenance: if a borrower prepays Balance B with T years remaining on an interest-only note rate r_note when matched-maturity Treasury yield is y_T > 0, the borrower must pay the Present Value (discounted at y_T) of the lost annual interest spread B * (r_note - y_T) over T years, floored at a contractual minimum penalty f_min * B (typically 1.0% of par): Penalty_YM = MAX(f_min * B, B * (r_note - y_T) * ((1 - (1 + y_T)^(-T)) / y_T))!
Verify on Loan_Balance_B = 5,000,000 (B2), Note_Rate_rn = 0.065 (B3 = 6.50%), Matched_Treasury_Yield_yT = 0.040 (B4 = 4.00%), Remaining_Term_T = 5 years (B5), and Par_Floor_fmin = 0.01 (B6 = 1.00% -> 50,000 floor): annual lost spread is 5,000,000 * 0.025 = 125,000/yr; discounted at 4.00% over 5 years (annuity factor 4.451822), Yield Maintenance equals 556,477.79 (11.13% of loan balance!)! Conversely, if Treasury rates rise above the note rate to y_T = 0.070 (7.00%), the spread strip is negative and the 1.00% floor binds at 50,000.00!
| Treasury Environment (5M Loan @ 6.50%, 5 Yr Left) | Present Value of Spread Strip | Binding Yield Maintenance Penalty |
|---|---|---|
| Rate-Cut Rally (y_T = 4.00%) | 556,477.79 (11.13% of Par) | 556,477.79 |
| Matched Rate (y_T = 6.50%) | 0.00 | 50,000.00 (1.00% Minimum Floor) |
| Higher-Rate Selloff (y_T = 7.00%) | -102,504.94 (Floored) | 50,000.00 (1.00% Minimum Floor) |
Floored CMBS Yield Maintenance Prepayment Penalty Formula
Validate B > 0, r_note > 0, y_T > 0, T > 0, and f_min >= 0.
=LET(b_ln, B2, r_nt, B3, y_tr, B4, t_rm, B5, f_mn, B6, IF(OR(b_ln <= 0, r_nt <= 0, y_tr <= 0, t_rm <= 0, f_mn < 0), "Invalid Prepayment Input", LET(pv_sp, b_ln * (r_nt - y_tr) * ((1 - ((1 + y_tr)^(-t_rm))) / y_tr), ROUND(MAX(f_mn * b_ln, pv_sp), 2))))Effective Prepayment Penalty as % of Loan Balance Formula
Express Total Prepayment Cost / B so asset-sale disposition models compare net proceeds cleanly.
=IF(ISTEXT(E3), E3, ROUND(E3 / B2, 4))Try the example
Use the original values or change them to test your understanding.