На главную
Подписка
Новости


Рейтинг@Mail.ru











Главная / DELPHI / Часто задаваемые вопросы и ответы на них / Object Pascal / Функции и процедуры для финансовых вычислений. Сделать домашней страницей Добавить в избранное Написать писмо

Функции и процедуры для финансовых вычислений.


DoubleDecliningBalance Вычисляет амортизационные отчисления на определенном этапе.
FutureValue Вычисляет значение вклада через определенный период времени.
InterestPayment Вычисляет процентную ставку кредита.
InterestRate Вычисляет процентную ставку инвестиций.
InternalRateOfReturn Вычисляет внутреннюю ставку дохода от инвестиций.
NetPresentValue Вычисляет текущее значение платежа, используя массив с расчетными значениями.
NumberOfPeriods Вычисляет количество этапов необходимое для погашения кредита.
Payment Вычисляет полную сумму погашения кредита на отдельном этапе.
PeriodPayment Вычисляет необходимую сумму выплат основной части (без процентов) кредита на определенном этапе.
PresentValue Определяет текущее значение вклада.
SLNDepreciation Вычисляет сумму амортизационных отчислений по методу равномерной амортизации.
SYDDepreciation Вычисляет сумму амортизационных отчислений по методу ускоренной амортизации.



Подробнее:

Функция DoubleDecliningBalance( Cost, Salvage: Extended; Life, Period: Integer ): Extended;
Модуль: Math

Функция вычисляет амортизационные отчисления на определенном этапе. В качестве параметров используются: начальная стоимость Cost, срок службы Life, конечная стоимость Salvage и амортизационный период Period. Вычисления производятся по следующим формулам:

Период Сумма амортизационных отчислений

1 А1:= Cost*2/Life
2 А2:= (Cost-А1)*2/Life
3 А3:= (Cost-А1-А2)*2/Life
... ...
n Аn:= (Cost-А1-А2 - ... - Аn-1)*2/Life,
где n=Period

При достижении конечной стоимости, амортизация перестает начисляться, и для последующих периодов функция будет возвращать значение, указанное в параметре Salvage.

Пример

var
A : Extended;
begin
...
A:=DoubleDecliningBalance(1000, 100, 5, 1); { A:=400 }
...
end;




Функция FutureValue( Rate: Extended; NPeriods: Integer ; Payment, PresentValue: Extended; PaymentTime: TPaymentTime ): Extended;
Модуль: Math

Функция вычисляет значение вклада по прошествии определенного периода времени.

NPeriods - количество прошедших единиц периода времени. Например, если проценты начисляются раз в год, то данный параметр определяет количество лет.
PresentValue - первоначальная сумма вклада.
В параметре Payment указывается сумма, которая будет добавляться вкладчиком ко вкладу в течение каждой единицы периода времени. Если вклад осуществляется только один раз, то Payment:=0.
Rate - дивиденты, начисляемые за единицу периода.
Параметр PaymentTime определяет, как должны начисляться проценты:


Значение

Описание

PtStartOfPeriod Проценты начисляются в конце единицы периода времени на всю сумму, находящуюся на момент начисления на счету.

ptEndOfPeriod Проценты начисляются только на сумму, которая находилась на счету в начале единицы периода времени. Т.е. на сумму, которая была добавлена вкладчиком к вкладу в течение последней единицы времени, проценты будут начислены по прошествии следующего периода.

Знак минус в результате функции показывает, что данная сумма является кредитовой, т.е. должна быть списана со счета.

Пример
Первоначальный вклад составил 100 руб. дивиденды - 10% годовых. Ежегодно вкладчик добавляет к вкладу 50 руб. Проценты начисляются в конце года только на сумму, которая находилась на счету в начале года, т.е. проценты на сумму, которая была добавлена к вкладу в течение года будут начислены только в конце следующего года. Вычисляем сумму вклада через 5 лет.

var
Sum : Extended;
begin
...
Sum:=FutureValue(0.1, 5, 50, 100, ptEndOfPeriod);
{ Sum:= -466.306 }
...
end;




Функция InterestPayment( Rate: Extended; NPeriods: Integer ; PresentValue, FutureValue: Extended; PaymentTime: TPaymentTime ): Extended;
Модуль: Math

Функция вычисляет процентную ставку кредита на определенном этапе в денежном исчислении.

PresentValue - сумма кредита.
Rate - фиксированная процентная ставка кредита.
NPeriods - число этапов, в течение которых производятся выплаты.
Period - номер этапа выплат, для которого производятся вычисления.
FutureValue - значение суммы кредита, по истечении выплат.
Параметр PaymentTime определяет, происходят выплаты в начале (PtStartOfPeriod) этапа или в конце (ptEndOfPeriod).

Знак минус в результате функции показывает, что данная сумма является кредитовой, т.е. должна быть списана со счета.

Пример

var
Pay : Extended;
begin
...
Pay:=InterestPayment(0.1, 1, 5, 1000, 0, PtStartOfPeriod);
{ Pay:= -90.9090909090909 }
...

end;



Функция InterestRate( NPeriods: Integer; Payment, PresentValue, FutureValue: Extended; PaymentTime: TPaymentTime ): Extended;
Модуль: Math

Функция вычисляет процентную ставку инвестиций, необходимую для возврата суммы инвестиций PresentValue с дивидендами.
PresentValue - сумма инвестиций.
FutureValue - полная сумма, полученная от инвестиций. Включает возврат первоначальной суммы инвестиций и дивиденды.
NPeriods - количество этапов выплат.
Payment - сумма периодических выплат.
Параметр PaymentTime определяет, происходят выплаты в начале (PtStartOfPeriod) этапа или в его конце (ptEndOfPeriod).

Пример

var
IRate : Extended;
begin
...
IRate:=InterestRate(1, -100, -1000, 1500, ptEndOfPeriod);
{ IRate:= 0.4 }
...
end;

ВНИМАНИЕ!!! Следует аккуратно использовать финансовые функции и внимательно следить за расстановкой знаков плюс/минус в параметрах функций.
Не рекомендуем использовать функцию InterestRate при написании программ, т.к. данная функция работает не корректно.

Вызов Результат
InterestRate(1, -100, -1000, 1110, ptEndOfPeriod); 0.01
InterestRate(1, -100, -1000, 1150, ptEndOfPeriod); 0.05
InterestRate(1, -100, -1000, 1200, ptEndOfPeriod); 0 (bag)
InterestRate(1, -100, -1000, 1250, ptEndOfPeriod); 0.15
InterestRate(1, -100, -1000, 1300, ptEndOfPeriod); 0.2


Функция InternalRateOfReturn( Guess: Extended; const CashFlows: array of Double ): Extended;
Модуль: Math

Функция вычисляет внутреннюю процентную ставку дохода от инвестиций. Массив CashFlows состоит из значений инвестиций и значений получаемого дохода за определенные периоды времени. Первое значение массива должно быть отрицательным, так как оно опредеяет первоначальную сумму инвестиций. Последующие значения могут быть отрицательными (дополнительные инвестиции), положительными (получаемый доход) или равны 0.

Пример

var
IRate: Extended;
CashFlows: array of Double;
begin
...
SetLength(CashFlow, 2);
CashFlow[0]:=-1000;
CashFlow[1]:= 1200;
IRate:= InternalRateOfReturn(0, CashFlow);
{ IRate:= 0.4 }
...
end;




Функция NetPresentValue( Rate: Extended; const CashFlows: array of Double; PaymentTime: TPaymentTime ): Extended;
Модуль: Math

Функция вычисляет значение текущего платежа, используя массив с расчетными значениями. Данная функция помогает определить расчетную стоимость инвестиций на основе предполагаемого (расчетного) дохода.
Параметр Rate определяет процентную ставку инвестиций.
CashFlows - массив расчетных значений текущих платежей.
Параметр PaymentTime указывает, происходят выплаты в начале (PtStartOfPeriod) или в конце (ptEndOfPeriod) платежного этапа.

Пример

var
PayValue: Extended;
CashFlows: array of Double;
begin
...
SetLength(CashFlow, 3);
CashFlow[0]:=-100;
CashFlow[1]:= 110;
CashFlow[2]:= 121;
PayValue:= NetPresentValue (0.1, CashFlow, PtStartOfPeriod); { PayValue:= 100 }
...
end;




Функция NumberOfPeriods( Rate, Payment, PresentValue, FutureValue: Extended; PaymentTime: TPaymentTime ): Extended;
Модуль: Math

Функция определяет количество этапов, необходимых для погашения кредита до значения определенного в параметре FutureValue.
PresentValue - первоначальная сумма кредита.
Rate - процентная ставка.
Payment - величина регулярных выплат.
Параметр PaymentTime определяет, происходят выплаты в начале (PtStartOfPeriod) этапа или в его конце (ptEndOfPeriod).

Пример
Первоначальная сумма кредита составляет 364руб. Процентная ставка 20%. Регулярные ежемесячные выплаты по 100руб производятся в конце месяца. Рассчитаем сколько месяцев необходимо для полной выплаты кредита.

var
Np: Extended;
begin
...
Np:= NumberOfPeriods (0.2, 100, 364, 0, ptEndOfPeriod);
{ Np:= -3 }
...
end;




Функция Payment( Rate: Extended; NPeriods: Integer; PresentValue, FutureValue: Extended; PaymentTime: TPaymentTime ): Extended;
Модуль: Math

Функция вычисляет общую сумму погашения кредита, выплачиваемую на каждом этапе (состоит из текущих выплат и процентов).

PresentValue - сумма заимствования.
NPeriods - срок выплаты кредита. Данный пармаметр указывается количество этапов выплаты (количество лет, кварталов, месяцев и т.д.).
FutureValue - оставшаяся сумма кредита по истечении указанного периода.
Rate - величина процентной ставки кредита (ежегодная, ежеквартальная, ежемесячная и т.д. в соответствии с единицей измерения периода времени).
Параметр PaymentTime определяет, как происходят платежи: в начале (PtStartOfPeriod) или в конце (ptEndOfPeriod) платежного периода.

Пример

var
PaySum : Extended;
begin
...
PaySum:= Payment(0.2, 1, 100, 0, ptEndOfPeriod);
{ PaySum:=-120 }
...
end;




Функция PeriodPayment( Rate: Extended; Period, NPeriods: Integer; PresentValue, FutureValue: Extended; PaymentTime: TPaymentTime ): Extended;
Модуль: Math

Функция вычисляет сумму выплат основной части кредита (без учета процентов) на определенном этапе.
PresentValue - сумма заимствований.
NPeriods - срок выплаты кредита (количество этапов).
FutureValue - сумма кредита по прошествии указанного срока.
Period - номер этапа, для которого производятся вычисления.
Rate - процентная ставка кредита.
Параметр PaymentTime определяет, как происходят платежи: в начале (PtStartOfPeriod) или в конце (ptEndOfPeriod) платежного периода.
Сумму выплачиваемых процентов кредита можно вычислить с помощью функции InterestPayment.

Пример

var
PaySum : Extended;
begin
...
PaySum:= PeriodPayment(0.1, 2, 5, 1000, 0, ptEndOfPeriod);
{ PaySum:= -180.17722887422 }
...
end;




Функция PresentValue( Rate: Extended; NPeriods: Integer; Payment, FutureValue: Extended; PaymentTime: TPaymentTime ): Extended;
Модуль: Math

Функция определяет значение вклада в указанный период времени.
Payment - первоначальная сумма вклада.
NPeriods - срок вклада.
Rate - процентная ставка.
FutureValue - значение, которого могут достигнуть инвестиции в определенный период.
Параметр PaymentTime указывает, как происходят платежи: в начале (PtStartOfPeriod) или в конце (ptEndOfPeriod) платежного периода.

Пример

var
Value : Extended;
begin
...
Value:= PresentValue(0.1, 1, -100, 0, ptEndOfPeriod);
{ Value:= 90,9090909090909 }
...
end;




Функция SLNDepreciation( Cost, Salvage: Extended; Life: Integer ): Extended;
Модуль: Math

Функция вычисляет сумму амортизационных отчислений за единицу периода времени по методу линейной (равномерной) амортизации.

Cost - первоначальную стоимость оборудования.
Salvage - конечная стоимость оборудования.
Life - срок эксплуатации.

Для вычисления амортизации по ускоренному методу используйте функцию SYDDepreciation.

Пример

var
Amort : Extended;
begin
...
Amort:= SLNDepreciation(1000, 200, 5); { Amort:= 160 }
...
end;




Функция SYDDepreciation( Cost, Salvage: Extended; Life, Period: Integer ): Extended;
Модуль: Math

Описание
Функция вычисляет сумму амортизационных отчислений на заданном этапе по методу ускоренной амортизации.

Cost - первоначальная стоимость оборудования.
Salvage - конечная стоимость.
Life - срок эксплуатации.
Period - номер этапа, для которого определяется сумма амортизационных отчислений.

Для вычислений по методу равномерной амортизации используйте функцию SLNDepreciation.

Пример

var
Amort : Extended;
begin
...
Amort:= SYDDepreciation(1000, 100, 5, 1); {Amort:=300}
...
end;


Copyright ©   "Мастера DELPHI"   E-mail:   delphi@mastak.com  http://www.delphimaster.ru
Источник получения информации: http://www.delphimaster.ru
Hosted by uCoz