Калькулятор ВНД
Вычисляет внутреннюю норму доходности (ВНД) для ряда денежных потоков.
Будущие денежные потоки
Об этом инструменте
Внутренняя норма доходности (IRR) — это критический показатель для оценки прибыльности и эффективности инвестиций или проектов. Этот калькулятор определяет дисконтную ставку, при которой чистая приведенная стоимость (NPV) всех денежных потоков равна нулю, предоставляя вам единственный процент, представляющий годовой доход от вашей инвестиции. Понимание IRR помогает инвесторам и финансовым специалистам сравнивать различные инвестиционные возможности на равной основе, независимо от их размера или сроков.
Для использования этого калькулятора введите вашу начальную инвестицию (обычно отрицательное значение) и все последующие денежные потоки в хронологическом порядке с их соответствующими годами. Инструмент итеративно решает IRR, используя численные методы. IRR обычно используется для оценки капитальных инвестиций, слияний и поглощений, сделок с недвижимостью и анализа осуществимости проектов. Это особенно ценно, когда вам нужно выбирать между конкурирующими инвестиционными возможностями или оценивать, соответствует ли проект вашей требуемой норме доходности.
Помните, что IRR предполагает реинвестирование денежных потоков по самой ставке IRR, что может быть нереалистично; модифицированная IRR (MIRR) может решить эту проблему в сложных сценариях. Кроме того, для нестандартных схем денежных потоков может быть несколько решений IRR. Этот калькулятор предоставляет основное значение IRR и наиболее надежен, когда денежные потоки следуют традиционной схеме с начальным оттоком, за которым следуют притоки.
Часто задаваемые вопросы
Реализация кода
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 ~0Comments & Feedback
Comments are powered by Giscus. Sign in with GitHub to leave a comment.