Привет, может кому пригодится - в БП 3.0 есть модуль ФинансовыеИнструменты
Там ставку считает в функции ФинансовыеИнструменты.XIRR
Ниже код
// Вычисляет приблизительную годовую ставку IRR для графика платежей с произвольной периодичностью. Соответствует функции Excel ЧИСТВНДОХ.
// Вычисление производится методом Ньютона.
// IRR - внутренняя норма доходности, при которой инвестиции равны приведенной стоимости будущих поступлений, т.е. NPV = 0.
//
// Параметры:
// Платежи - Массив из Число - Суммы платежей по графику. По крайней мере один платеж в графике должен быть положительный и один отрицательный.
// Даты - Массив из Дата - Даты платежей. Индексы дат в массиве должны совпадать с соответствующими индексами сумм в массиве платежей.
// Предположение - Число - Предполагаемая ставка (задается в виде числа: например, 0.25 соответствует 25%).
// Необязательный параметр, по умолчанию исходная ставка = 0.1.
//
// Возвращаемое значение:
// Число, Неопределено - Ставка IRR. Если рассчитать ставку не удалось или входные данные некорректны, вовращается Неопределено.
//
Функция XIRR(Платежи, Даты, Предположение = Неопределено) Экспорт
Если Предположение = Неопределено Тогда
Х0 = 0.1;
Иначе
Х0 = Предположение;
КонецЕсли;
Сроки = Новый Массив;
Для Инд = 0 По Даты.Количество() - 1 Цикл
Сроки.Добавить((Даты[0] - Даты[Инд]) / 31536000); // В долях года
КонецЦикла;
Х1 = 0.0;
Допуск = 0.00000001;
МаксИтераций = 500;
ЧислоИтераций = 0;
Пока ЧислоИтераций < МаксИтераций Цикл
Знаменатель = Всего_ДФ_XIRR(Платежи, Сроки, Х0);
Если Знаменатель = 0 Тогда
Возврат Неопределено;
КонецЕсли;
Х1 = Х0 - Всего_Ф_XIRR(Платежи, Сроки, Х0) / Знаменатель;
Ошибка = МодульЧисла(Х1 - Х0);
Х0 = Х1;
Если Ошибка <= Допуск Тогда
Возврат Х0;
КонецЕсли;
ЧислоИтераций = ЧислоИтераций + 1;
КонецЦикла;
Возврат Неопределено;
КонецФункции
Показать