6. Descuento de flujos y factores de capitalización

Para comparar pagos de fechas distintas primero debemos llevarlos a una misma fecha. Esta operación sencilla es la base numérica de la valoración por no arbitraje.

6.1 Un pago necesita una fecha

Decir que un contrato paga $10.000 no alcanza para conocer su valor. Debemos saber cuándo se paga. Recibir $10.000 hoy permite usarlos, invertirlos o cancelar una obligación inmediatamente; recibirlos dentro de un año obliga a esperar y está expuesto a la tasa relevante durante ese período.

La valoración de derivados compara carteras con pagos en diferentes momentos. El descuento y la capitalización son las herramientas que permiten trasladar un flujo de una fecha a otra sin perder la referencia temporal.

Regla fundamental: sólo podemos sumar, restar o comparar flujos monetarios después de expresarlos en la misma fecha y moneda.

6.2 La línea de tiempo como primer control

Antes de usar una fórmula conviene representar las fechas. Llamaremos t = 0 al día de valoración y T a una fecha futura. Un signo positivo indica cobro para la perspectiva elegida y uno negativo, pago.

t = 0Fecha de valoración
...Transcurre el tiempo
t = 1Un período
...Continúa el plazo
t = TFlujo futuro

La línea de tiempo hace visibles errores frecuentes: usar una tasa anual con meses como si fueran años, descontar un pago que ya está hoy o combinar importes en distintas monedas. En un modelo informático, las fechas y unidades deben formar parte de los datos, no quedar implícitas en comentarios.

6.3 Factor de capitalización

El factor de capitalización transforma un importe presente en su valor futuro. Si la tasa efectiva por período es r y faltan n períodos, bajo capitalización compuesta el factor es:

factor de capitalización = (1 + r)n
valor futuro = valor presente × (1 + r)n

Con una tasa de 5 % por período, $1.000 hoy equivalen a $1.050 al finalizar un período. Después de dos períodos equivalen a $1.102,50: el segundo interés se calcula sobre el saldo ya acumulado.

Capitalización de $1.000 a 5 % por período.
PeríodosFactorValor futuro
01,000000$1.000,00
11,050000$1.050,00
21,102500$1.102,50
31,157625$1.157,63

6.4 Factor de descuento y valor presente

El factor de descuento realiza el camino inverso: responde cuánto vale hoy un pago conocido en una fecha futura. Es el recíproco del factor de capitalización.

factor de descuento = 1 / (1 + r)n
valor presente = flujo futuro / (1 + r)n

Si podemos invertir a 5 % por período, recibir $1.102,50 dentro de dos períodos equivale a recibir $1.000 hoy: al capitalizar $1.000 dos veces se llega exactamente al pago futuro. Este vínculo es el que permite reemplazar un flujo futuro por un importe actual en una cartera replicante.

6.5 La tasa debe ser coherente con el plazo

La tasa y el número de períodos deben usar la misma unidad temporal. Una tasa efectiva mensual debe acompañarse de meses; una tasa efectiva anual, de años. Si una tasa anual efectiva es 12 %, no es correcto usar 12 % para descontar un mes: primero se debe convertir a una tasa mensual equivalente o usar una fracción de año dentro del modelo que corresponda.

Correcto

Tasa 2 % mensual y plazo 6 meses: n = 6.

Correcto

Tasa 10 % anual y plazo 2 años: n = 2.

Incorrecto

Tasa 10 % anual aplicada doce veces como si fuera mensual.

Documentar

Indicar siempre si la tasa es efectiva, nominal, simple, continua o tomada de una curva.

6.6 Descontar varios flujos

Una cartera o derivado puede contener pagos en más de una fecha. El valor presente se obtiene descontando cada flujo según su plazo y sumando los valores presentes. Para flujos Fi en fechas ti:

valor presente = Σ Fi / (1 + ri)ni

La notación permite que cada fecha tenga una tasa o factor distinto. En una introducción usaremos una tasa constante para simplificar; en valoración profesional se emplean factores de descuento obtenidos de una curva coherente con cada vencimiento.

6.7 Ejemplo: comparar dos alternativas en la fecha de hoy

Consideremos dos alternativas: A paga $10.000 dentro de un año; B paga $10.600 dentro de dos años. Si la tasa efectiva anual es 5 %, sus valores presentes son:

VP(A) = 10.000 / 1,05 = 9.523,81
VP(B) = 10.600 / 1,052 = 9.614,51

B tiene mayor valor presente bajo esta tasa y estos pagos. Esto no significa automáticamente que sea “mejor” para toda persona: pueden importar riesgo, liquidez, moneda y necesidades de caja. Sí significa que, bajo los supuestos declarados, sus flujos valen más en la misma fecha de comparación.

6.8 Del cálculo a JavaScript

Las funciones deben recibir una tasa en formato decimal: 5 % se representa como 0.05. Nombrar los parámetros con claridad ayuda a evitar que un porcentaje entero se use por error como decimal.

function valorFuturo(valorPresente, tasaPorPeriodo, periodos) {
  return valorPresente * (1 + tasaPorPeriodo) ** periodos;
}

function valorPresente(flujoFuturo, tasaPorPeriodo, periodos) {
  return flujoFuturo / (1 + tasaPorPeriodo) ** periodos;
}

console.log(valorFuturo(1000, 0.05, 2));    // 1102.5
console.log(valorPresente(1102.5, 0.05, 2)); // 1000

Las dos funciones son inversas bajo los mismos datos. Esta es una prueba simple de coherencia: capitalizar y luego descontar debe devolver el importe original, salvo diferencias de redondeo.

function valorPresenteDeFlujos(flujos, tasaPorPeriodo) {
  return flujos.reduce((acumulado, flujo) => {
    return acumulado + flujo.importe / (1 + tasaPorPeriodo) ** flujo.periodo;
  }, 0);
}

const flujos = [{ importe: 10000, periodo: 1 }, { importe: 10600, periodo: 2 }];
console.log(valorPresenteDeFlujos(flujos, 0.05).toFixed(2)); // 19138.32

6.9 Laboratorio: trasladar un flujo entre fechas

Elegí un flujo futuro, una tasa efectiva por período y un plazo. El laboratorio calcula el valor presente, el factor de descuento y la comprobación de capitalización. Mantiene una única tasa por período con finalidad didáctica.

Valor presente de un flujo futuro

Todos los resultados se expresan con los supuestos que indicás.

Factor de descuento0,863838
Valor presente$86.383,76
Comprobación al vencimiento$100.000,00
Valores equivalentes en cada período.
PeríodoFactor de descuentoValor en t = 0

6.10 Supuestos y límites del descuento

Una tasa no es un número decorativo: resume un supuesto sobre el valor temporal y, según el contexto, sobre riesgo, moneda y liquidez. Aplicar una tasa arbitraria puede producir un cálculo correcto desde el punto de vista aritmético y sin embargo inadecuado desde el financiero.

  • El flujo y la tasa deben estar expresados en la misma moneda.
  • La unidad temporal de tasa y plazo debe coincidir.
  • El método de capitalización debe estar explícito.
  • Los pagos deben descontarse a una fecha común.
  • El redondeo se aplica al mostrar resultados, no antes de terminar el cálculo.

Conexión con no arbitraje: en los próximos temas, los factores de descuento permitirán comparar el costo actual de comprar un activo y financiarlo con el pago futuro de un contrato forward. La coherencia temporal será parte de la demostración de precio.

6.11 Ejercicio propuesto

Un contrato promete pagar $250.000 dentro de 18 meses. Para el ejercicio, suponé una tasa efectiva mensual de 1,2 % constante durante todo el plazo.

  1. Identificá la fecha de valoración, la fecha del flujo, la tasa y el número de períodos.
  2. Calculá el factor de descuento.
  3. Calculá el valor presente del pago.
  4. Capitalizá el valor presente 18 meses para comprobar el resultado.
  5. Mencioná dos supuestos que deberían revisarse antes de usar el cálculo en una operación real.
Ver orientación de resolución

Usamos r = 0.012 y n = 18. El factor es 1 / 1.01218 y el valor presente es 250000 / 1.01218, aproximadamente $201.674,89. Si capitalizamos ese valor durante 18 períodos a 1,2 %, recuperamos $250.000, salvo redondeo. En una operación real habría que revisar la moneda, la curva de tasas, el riesgo de crédito y el método de conteo de días.

function descontar(flujoFuturo, tasaMensual, meses) {
  return flujoFuturo / (1 + tasaMensual) ** meses;
}

const presente = descontar(250000, 0.012, 18);
console.log(presente.toFixed(2));
console.log((presente * 1.012 ** 18).toFixed(2));