Saltar al contenido
🛠️ToolsShed

Calculadora TIR

Calcula la Tasa Interna de Retorno (TIR) para una serie de flujos de caja.

Flujos de Caja Futuros

Año 1
Año 2
Año 3
Año 4

Acerca de esta herramienta

La Tasa Interna de Retorno (IRR) es una métrica crítica para evaluar la rentabilidad y eficiencia de inversiones o proyectos. Esta calculadora determina la tasa de descuento en la cual el valor presente neto (VPN) de todos los flujos de caja es igual a cero, proporcionándole un único porcentaje que representa el retorno anual de su inversión. Comprender el IRR ayuda a inversores y profesionales financieros a comparar diferentes oportunidades de inversión en igualdad de condiciones, independientemente de su tamaño o período de tiempo.

Para utilizar esta calculadora, ingrese su inversión inicial (típicamente un valor negativo) y todos los flujos de caja posteriores en orden cronológico con sus respectivos años. La herramienta resuelve iterativamente el IRR utilizando métodos numéricos. El IRR se utiliza comúnmente para evaluar inversiones de capital, adquisiciones de negocios, transacciones inmobiliarias y viabilidad de proyectos. Es particularmente valioso cuando necesita decidir entre oportunidades de inversión competidoras o determinar si un proyecto cumple con su tasa de retorno requerida.

Tenga en cuenta que el IRR asume la reinversión de flujos de caja a la tasa IRR en sí, lo cual puede no ser siempre realista; la IRR modificada (MIRR) puede abordar esto en escenarios complejos. Además, el IRR puede producir múltiples soluciones para patrones de flujo de caja no convencionales. Esta calculadora proporciona el valor principal de IRR y es más confiable cuando los flujos de caja siguen un patrón convencional con una salida inicial seguida de entradas.

Preguntas Frecuentes

Implementación de Código

def npv(rate: float, cash_flows: list) -> float:
    """Net Present Value at given rate."""
    return sum(cf / (1 + rate) ** t for t, cf in enumerate(cash_flows))

def irr(cash_flows: list, max_iter: int = 1000, tol: float = 1e-7) -> float | None:
    """Internal Rate of Return via Newton-Raphson iteration."""
    # Check sign change
    positives = any(cf > 0 for cf in cash_flows)
    negatives = any(cf < 0 for cf in cash_flows)
    if not (positives and negatives):
        return None

    rate = 0.1  # initial guess
    for _ in range(max_iter):
        f = npv(rate, cash_flows)
        # Derivative: d/dr NPV = sum(-t * cf / (1+r)^(t+1))
        df = sum(-t * cf / (1 + rate) ** (t + 1) for t, cf in enumerate(cash_flows))
        if df == 0:
            break
        new_rate = rate - f / df
        if abs(new_rate - rate) < tol:
            return new_rate
        rate = new_rate
    return None

# Example: invest $1000, receive $300, $400, $500 over 3 years
cash_flows = [-1000, 300, 400, 500]
result = irr(cash_flows)
if result is not None:
    print(f"IRR = {result * 100:.2f}%")
    print(f"NPV at IRR ≈ {npv(result, cash_flows):.6f}")  # should be ~0

Comments & Feedback

Comments are powered by Giscus. Sign in with GitHub to leave a comment.