A continuación se presenta la fórmula estándar del préstamo, en la que el principal del préstamo inicial se establece igual a la suma de los pagos descontados a valor presente, es decir, dividido por (1 + r)^k
donde k
es el número del mes. A partir de la suma se puede obtener una expresión de forma cerrada mediante inducción que puede expresarse en términos de d
el importe del pago regular.
s = principal
r = periodic rate
n = number of payments
d = payment amount
d = r s (1 + 1/((1 + r)^n - 1))
Para que el pago sea igual todos los meses se hace una simplificación: se supone que un año se compone de 12 meses iguales, de lo contrario los pagos serían diferentes cada mes.
Una forma conveniente de cuadrar el círculo y encontrar un saldo diario es acumular sin problemas de pago a pago, tanto si el mes tiene 28 días como 30 o 31.
Un ejemplo sencillo: un préstamo de 10.000 euros al 5% de interés nominal anual, compuesto mensualmente, durante 5 años
s = 10000
r = 0.05/12
n = 60
d = r s (1 + 1/((1 + r)^n - 1)) = 188.71
La balanza b
después de cada pago en el mes x
viene dada por la expresión
(d + (1 + r)^x (r s - d))/r
por lo que los saldos al final del mes 1 y 2 son
x = 1
b1 = (d + (1 + r)^x (r s - d))/r = 9852.95
x = 2
b2 = (d + (1 + r)^x (r s - d))/r = 9705.30
Para calcular la tarifa diaria i
durante un mes con z
días de uso
i = (1 + r)^(1/z) - 1
Si el mes 2 es febrero, la tarifa diaria i
es
z = 28
i = (1 + r)^(1/z) - 1 = 0.000148511
Así que el saldo al final de, digamos, el 15 de febrero sería
b1 (1 + i)^15 = b1 (1 + 0.000148511)^15 = 9874.93
Si al final del 15 de febrero se realiza un reembolso no programado de 1000, el nuevo saldo al final del 28 de febrero sería
(9874.93 - 1000) (1 + 0.000148511)^(28 - 15) - d = 8703.36
y la amortización mensual podría continuar a partir de ahí.
En total habría 3 tarifas diarias, en función del número de días del mes (sin tener en cuenta los años bisiestos).
z = 28 i = (1 + r)^(1/z) - 1 = 0.000148511
z = 30 i = (1 + r)^(1/z) - 1 = 0.000138610
z = 31 i = (1 + r)^(1/z) - 1 = 0.000134138
A continuación se muestra un código de Mathematica de demostración que calcula y traza los valores diarios durante el primer trimestre (sin reembolsos no programados). Se repite un sencillo patrón de 5 líneas para calcular los valores diarios de cada mes.
x = 0;
b0 = (d + (1 + r)^x (r s - d))/r; (* = 10000 obviously *)
z = 31;
i = (1 + r)^(1/z) - 1;
s0 = Table[b0 (1 + i)^k, {k, 1, z - 1}];
x = 1;
b1 = (d + (1 + r)^x (r s - d))/r; (* = 9852.95 as previously *)
z = 28;
i = (1 + r)^(1/z) - 1;
s1 = Table[b1 (1 + i)^k, {k, 1, z - 1}];
x = 2;
b2 = (d + (1 + r)^x (r s - d))/r; (* = 9705.30 as previously *)
z = 31;
i = (1 + r)^(1/z) - 1;
s2 = Table[b2 (1 + i)^k, {k, 1, z - 1}];
x = 3;
b3 = (d + (1 + r)^x (r s - d))/r;
DateListPlot[Transpose[{
Table[DateList[{2022, 1, k}], {k, 0, 90}],
Flatten[{b0, s0, b1, s1, b2, s2, b3}]}],
PlotLabel -> "Q1 Amortization"]
Se puede pasar directamente a cualquier mes y calcular el saldo en un día concreto. Por ejemplo, el mes 48, el 8 de diciembre
x = 48 - 1
b47 = (d + (1 + r)^x (r s - d))/r = 2383.17 (Nov 30th balance)
z = 31
i = (1 + r)^(1/z) - 1
Balance on December 8th = b47 (1 + i)^8 = 2385.73
Además, el saldo a 31 de diciembre después del reembolso es
x = 48
b48 = (d + (1 + r)^x (r s - d))/r = 2204.39
y el saldo al final del mes 60 es, como se esperaba
x = 60
b60 = (d + (1 + r)^x (r s - d))/r = 0