Understanding the Importance of a Rate Lock
In a volatile economic environment, a rate lock is a critical tool for home buyers and refinancers. It is a guarantee from a lender to freeze a specific market quote for a set duration, protecting the borrower from market shifts that could increase the monthly financial commitment. Without a lock, you are "floating," which means your final quote is subject to daily market changes until your transaction closes.
Key Variables in Rate Locking
- Lock-in Premium: This is the cost associated with securing the quote. It may be expressed as a flat fee or as "points" (a percentage of the total principal). Longer lock periods typically carry higher premiums.
- Lock Duration: Typical periods range from 30 to 90 days. You must ensure the duration covers your entire closing timeline, as extensions can be expensive.
- Projected Shift: This represents the sensitivity of your decision. By estimating how much the market might rise if you don't lock, you can calculate if the lock-in premium is a justifiable "insurance policy."
How to Use the Rate Lock Calculator
To determine if locking today makes financial sense, input your current market quote and the total principal balance. Select your desired lock duration and input any premium fees required by your lender. Finally, input a projected shift (how much you think rates might rise) to see how many months it would take to recoup the cost of the lock through monthly savings.
Practical Example
Imagine you have a $350,000 principal balance and a current quote of 6.5%. A lender offers a 60-day lock for a premium of 0.25% ($875). If you believe the market might shift upward to 7.0% before you close, your monthly payment would increase by approximately $115. By paying the $875 lock fee, you break even in less than 8 months and save thousands over the life of the loan.
When Should You Float?
Floating (not locking) may be advantageous if market trends are downward or if you believe the cost of the lock exceeds the potential monthly savings. However, most experts recommend locking once you have a signed purchase agreement to ensure your debt-to-income ratios remain stable for final approval.
function calculateRateLock() {
var marketQuote = parseFloat(document.getElementById('marketQuote').value);
var lockPremium = parseFloat(document.getElementById('lockPremium').value);
var totalPrincipal = parseFloat(document.getElementById('totalPrincipal').value);
var projectedShift = parseFloat(document.getElementById('projectedShift').value);
var amortTerm = parseFloat(document.getElementById('amortTerm').value);
if (isNaN(marketQuote) || isNaN(totalPrincipal)) {
alert("Please enter valid Current Quote and Principal Balance values.");
return;
}
// Default values if empty
if (isNaN(lockPremium)) lockPremium = 0;
if (isNaN(projectedShift)) projectedShift = 0;
if (isNaN(amortTerm)) amortTerm = 30;
// Calc Lock-in Cost
var lockCost = totalPrincipal * (lockPremium / 100);
// Function to calc monthly payment
function getMonthlyPayment(rate, principal, years) {
if (rate === 0) return principal / (years * 12);
var r = (rate / 100) / 12;
var n = years * 12;
return principal * (r * Math.pow(1 + r, n)) / (Math.pow(1 + r, n) – 1);
}
var lockedPI = getMonthlyPayment(marketQuote, totalPrincipal, amortTerm);
var projectedPI = getMonthlyPayment(marketQuote + projectedShift, totalPrincipal, amortTerm);
var monthlySavings = projectedPI – lockedPI;
// Display Results
document.getElementById('lockResults').style.display = 'block';
document.getElementById('resLockCost').innerText = '$' + lockCost.toLocaleString(undefined, {minimumFractionDigits: 2, maximumFractionDigits: 2});
document.getElementById('resLockedPI').innerText = '$' + lockedPI.toLocaleString(undefined, {minimumFractionDigits: 2, maximumFractionDigits: 2});
document.getElementById('resProjectedPI').innerText = '$' + projectedPI.toLocaleString(undefined, {minimumFractionDigits: 2, maximumFractionDigits: 2});
document.getElementById('resMonthlySavings').innerText = '$' + monthlySavings.toLocaleString(undefined, {minimumFractionDigits: 2, maximumFractionDigits: 2});
if (monthlySavings > 0) {
var breakeven = lockCost / monthlySavings;
document.getElementById('resBreakeven').innerText = breakeven.toFixed(1) + " Months";
var fiveYearBenefit = (monthlySavings * 60) – lockCost;
document.getElementById('resFiveYearImpact').innerText = '$' + fiveYearBenefit.toLocaleString(undefined, {minimumFractionDigits: 2, maximumFractionDigits: 2});
} else {
document.getElementById('resBreakeven').innerText = "N/A (No Savings)";
document.getElementById('resFiveYearImpact').innerText = "-$" + lockCost.toLocaleString(undefined, {minimumFractionDigits: 2, maximumFractionDigits: 2});
}
}