I'm trying to understand the amortization schedules of TD mortgages, as produced by the TD Calculator.
The monthly payment amounts (on this fixed rate mortgage) are predictable and constant, but the portion of each payment that goes to interest is non-monotonic. I would expect it to start high, and progressively reduce. But it jumps up and down... why is that?
E.g.:
A 1M dollar loan, Amortization of 25 year, monthly payments, at a quoted fixed rate of 5.34%. Screenshot is from Aug 14 2022.
And the equivalent table, in text:
Payment # | Opening Bal. | Principal | Interest | Payment | Closing Balance |
---|---|---|---|---|---|
1 | $1,000,000.00 | $1,672.48 | $4,338.62 | $6,011.10 | $998,327.52 |
2 | $998,327.52 | $1,535.36 | $4,475.74 | $6,011.10 | $996,792.16 |
3 | $996,792.16 | $1,686.40 | $4,324.70 | $6,011.10 | $995,105.76 |
4 | $995,105.76 | $1,549.80 | $4,461.30 | $6,011.10 | $993,555.96 |
5 | $993,555.96 | $1,556.75 | $4,454.35 | $6,011.10 | $991,999.21 |
6 | $991,999.21 | $1,994.12 | $4,016.98 | $6,011.10 | $990,005.09 |
7 | $990,005.09 | $1,572.67 | $4,438.43 | $6,011.10 | $988,432.42 |
8 | $988,432.42 | $1,722.67 | $4,288.43 | $6,011.10 | $986,709.75 |
9 | $986,709.75 | $1,587.45 | $4,423.65 | $6,011.10 | $985,122.30 |
10 | $985,122.30 | $1,737.03 | $4,274.07 | $6,011.10 | $983,385.27 |
11 | $983,385.27 | $1,602.35 | $4,408.75 | $6,011.10 | $981,782.92 |
12 | $981,782.92 | $1,609.53 | $4,401.57 | $6,011.10 | $980,173.39 |
What's at play?
Edit: Wall of math below for trying out answers
It was promptly suggested that the varying rates might ebb and flow with the lengths of the months in the calendar (2022). I was curious to try which particular fraction they were using to estimate the length of the year.
First, I compute the effective annual rate from the fixed rate
# fixed mortgage rates in canada compound on 6 months, so
# we have to simulate the quoted APR compounding every 6 mo.
APR = 0.0534 # quoted rate
EAR = (1+0.0534/2)^2 - 1 = 0.05411289 = 5.41%
From there, we can derive periodic interest rates for different periods:
# 30 day, 31 day, and 28 day
rate_30 = (1+EAR)^(30/365) - 1 # Apr, Jun, Sep, Nov
rate_31 = (1+EAR)^(31/365) - 1 # Jan, Mar, May, Jul, Aug, Oct, Dec
rate_28 = (1+EAR)^(28/365) - 1 # Feb
This is the same as if we'd established the equivalent daily rate, and then compounded it each day of the month during that month.
daily_rate = (1+EAR)^(1/365) - 1
rate_30 = (1+EAR)^(30/165) - 1
= ((1+EAR)^(1/165))^30 - 1
= (1 + daily_rate)^30 - 1
# same for rate_28 and rate_31
Just to show that the above works, if you borrowed X
dollars at the start of the year, didn't make any payments, and at the end of each month multiplied the balance with the rate of that month, and then looked at the final balance a year later, you'd have accumulated 5.41% additional debt:
Y2_loan = X * (1+jan_rate) * (1+feb_rate) * ... * (1+dec_rate)
= X * (1+rate_31) * (1+ rate_28) * ... * (1+rate_31)
= X * (1+rate_31)^7 * (1 + rate_28) * (1+ rate_30)^4
= X * (1+EAR)^(217/365) * (1+EAR)^(28/365) * (1+EAR)^(120)
= X * (1+EAR)^(365/365) = X * (1+EAR)
= 1.0541129 * X
(just to show that the interest compounded that way is equivalent to compounding once yearly at 5.411289%)
Reversing the fractional year amounts
I then tried to use the equations above to determine which fractions of a year were being used by TD's calculator.
I look at the first few payment data points A, B, C, which are on consecutive months:
(O)pening principal | (I)nterest Payment | Effective monthly rate (I/O) |
---|---|---|
1,000,000 | $4,338.62 | A= 0.004338620 |
998,327.52 | $4,475.74 | B= 0.004483238 |
996,792.16 | $4,324.70 | C= 0.004338618 |
We see that the rate for the second month is higher than the first, and we see that the third effective rate C is the same as A. Let's ignore the fact that the monetary values are rounded for a moment.
We can plug the obtained rate in our yearly formula to derive the exponent applied to the EAR, dubbed frac_A
here:
(1+EAR)^frac_A - 1 = A
(1+EAR)^frac_A - 1 = 0.004338620
(1+EAR)^frac_A = 1.004338620
log((1+EAR) ^ frac_A) = log(1.00338620)
frac_A * log(1+EAR) = log(1.00338620)
frac_A = log(1.00338620)/log(1+EAR)
frac_A = 0.082149378
= 29.98452308 / 365 # Assuming the year has 365 days exactly.
= 30 / 365.1883997 # Assuming the month has 30 days exactly.
So it could be that the first period corresponds to a 29.9845 day-period in a year of 365 days, or a period of 30 days in a year with 365.19 days.
If I do the same to datapoint B, then we obtain a period of 30.9818 days in a year of 365 days, or a period of 31 days in a year with 365.21 days.
Considering numerical rounding on the dollar amounts
There shouldn't be much rounding error on the very first payment, and so when taking into account rounding, the true value of that first payment could lie anywhere between $4,338.61 and $4,338.63 before rounding (either up or down).
If the number was on the limit of $4338.61, then that would correspond to a month with 29.98445 days, or a 30 day period in a 365.1892 day year
If the number was on the limit of 4338.63, then that's 29.98459 days, or a 365.2149 days in a year.
I can't get it over the 30 day mark, so the rounding must happen elsewhere, probably on the EAR calculation.