Проценты
Базовые термины и понятия
Процент (от новолат. per centum «на сотню; сотая») — сотая доля числа, принимаемого за целое (обозначается знаком %).
Простой процент (в финансовых и банковских операциях) представляет собой начисление процентов только на первоначально инвестированную сумму.
Сложный процент учитывает реинвестирование полученной прибыли.
Период начисления/наращения — промежуток времени за который начисляются проценты.
Капитализация процентов — прибавление начисленных за период процентов к основной сумме вклада и последующее начисление дохода на сумму вклада и сумму прибавленных к нему процентов. Иными словами — начисление процентов на проценты.
Период капитализации — промежуток времени за который начисленные проценты прибавляются к сумме депозита. Период капитализации может не совпадать с периодом начисления.
Номинальная процентная ставка — ставка, по которой рассчитывается вознаграждение за период времени.
Эффективная процентная ставка — ставка сложных процентов, которая дает тот же результат, что и разовое начисление простых процентов за тот же период времени. Она характеризуется учетом капитализации процентов и всегда превышает показатели номинальной ставки. Это объясняется тем, что проценты по капитализации рассчитываются с учетом заданной периодичности и прибавляются к телу депозита.
Коэффициент наращения — безразмерная величина, показывающая насколько увеличилась сумма вклада за период времени.
Формулы для расчетов
Для расчета актуального баланса мы будем использовать формулу суммы сложных процентов:
$$ P(t) = P_0 \times \left( 1+\frac{r_{ном}}{n}\right)^{n \times t} $$
P0 - Первоначальный депозит.
t - Число периодов начисления.
n - Число периодов капитализации.
rном - Номинальная процентная ставка. Выражается в виде десятичной дроби: 5% = 0,05.
Так как в формуле используется номинальная процентная ставка, воспользуемся формулой приведения эффективной процентной ставки к номинальной:
$$ r_{ном} = n \times \left( \left(1 + r_{эфф}\right)^\frac{1}{n} – 1\right) $$
rэфф - Эффективная процентная ставка.
n - Количество периодов капитализации.
В итоге получим следующую формулу:
$$ P(t) = P_0 \times \left( 1+\frac{n \times \left( \left(1 + r_{эфф}\right)^\frac{1}{n} – 1\right)}{n}\right)^{n \times t} $$
Данную формулу можно сократить:
$$ P(t) = P_0 \times \left( \left(1 + r_{эфф}\right)^\frac{1}{n}\right)^{n \times t} $$
P0 - Первоначальный депозит.
t - Число периодов начисления.
n - Число периодов капитализации.
rэфф - Эффективная процентная ставка. Выражается в виде десятичной дроби: 5% = 0,05
В случае, если период капитализации совпадает с периодом начисления процентов, формула приобретает вид:
$$ P(t) = P_0 \times \left( \left(1 + r_{эфф}\right)^\frac{1}{n}\right)^t $$
P0 - Первоначальный депозит.
t - Число периодов начисления.
n - Число периодов капитализации.
rэфф - Эффективная процентная ставка: 5% = 0,05
Оптимизация
Для рассчетов баланса в динамике удобнее использовать коэффициент наращения:
$$ i = \left(1 + r_{эфф}\right)^\frac{1}{n} $$ $$ P(t) = P_0 \times i^t $$
P0 - Первоначальный депозит.
t - Число периодов начисления.
n - Число периодов капитализации.
i - Коэффициент наращения.
rэфф - Эффективная процентная ставка: 5% = 0,05
Как UMI считает баланс
Рассчет баланса в простом случае
Для вклада в 1000 монет под 10% в месяц получаем следующую формулу:
$$ P_0 = 100000$$ $$ r_{эфф} = 1000 $$ $$ n = 30 \times 24 \times 60 \times 60 = 2592000 $$ $$ P(t) = \lfloor 100000 \times \left( \left(1 + \frac{1000}{10000}\right)^\frac{1}{2592000}\right)^t \rfloor $$
P0 – сумма первоначального вклада в UMI-центах: 1 UMI = 100.
rэфф – эффективная месячная процентная ставка в сотых долях процента: 10% = 1000.
n – количество секунд в месяце.
t – количество секунд, прошедших с момента создания вклада.
Баланс через 1 секунду:
$$ P(1) = \lfloor 100000 \times \left( \left(1 + 0.1\right)^\frac{1}{2592000}\right)^{1} \rfloor = \lfloor 100000.004 \rfloor = 100000 $$
Баланс через 5 минут (300 секунд):
$$ P(300) = \lfloor 100000 \times \left( \left(1 + 0.1\right)^\frac{1}{2592000}\right)^{300} \rfloor = \lfloor 100001.1 \rfloor = 100001 $$
Баланс через сутки (86400 секунд):
$$ P(86400) = \lfloor 100000 \times \left( \left(1 + 0.1\right)^\frac{1}{2592000}\right)^{86400} \rfloor = 100318 $$
Баланс через месяц (30 дней = 2592000 секунд):
$$ P(2592000) = \lfloor 100000 \times \left( \left(1 + 0.1\right)^\frac{1}{2592000}\right)^{2592000} \rfloor = 110000 $$
Рассчет баланса в случае, если процентная ставка менялась
В случае, если процентная ставка менялась несколько раз, необходимо рассчитать баланс в каждый момент времени, когда происходили изменения:
$$ P_1 = \lfloor P_0 \times \left( \left(1 + r_0\right)^\frac{1}{2592000}\right)^{t_0} \rfloor $$ $$ P_n = \lfloor P_{n-1} \times \left( \left(1 + r_{n-1}\right)^\frac{1}{2592000}\right)^{t_{n-1}} \rfloor $$ $$ P({t_n}) = \lfloor P_n \times \left( \left(1 + r_n\right)^\frac{1}{2592000}\right)^{t_n} \rfloor $$
P0 – сумма первоначального вклада.
P1 – баланс в момент первого изменения процентной ставки.
Pn – баланс в момент n-го изменения процентной ставки.
r0 – эффективная месячная процентная ставка на момент создания депозита.
rn – эффективная месячная процентная ставка в момент n.
t0 – количество секунд, прошедших с момента создания вклада до момента первого изменения процентной ставки.
tn – количество секунд, прошедших с момента последнего изменения процентной ставки.
Процент в 1/10 секунды
Рассчет коэффициента наращения
const effective_interest = 1000 // 10%
const periods = 30 * 24 * 60 * 60 * 10 // sec per month * 10
const coefficient = (1 + (effective_interest / 10000)) ** (1 / periods)
console.log(coefficient) // 1.0000000036770902
Рассчитаем коэффициент наращения для периода капитализации в 1/10 секунды при эффективной месячной ставке 10%:
$$ \left(1 + \frac{10}{100}\right)^\frac{1}{30 * 24 * 60 * 60 * 10} \approx 1.0000000036771 $$
Рассчет баланса
const deposit = 100000 // 1000.00 UMI
const time_delta = 15 // 1.5 sec
const value = deposit * (coefficient ** time_delta)
console.log((value / 100).toFixed(15)) // 1000.000055156353937
Рассчитаем баланс через 1,5 секунды (1.5 * 10 = 15 децесекунд) при первоначальном депозите в 1000 монет:
$$ i = \left(1 + \frac{10}{100}\right)^\frac{1}{25920000} $$ $$ 1000 \times i^{15} \approx 1000.0000551563539 $$
Пример рассчёта баланса в динамике
const start = new Date()
setInterval(function () {
let time_delta = new Date() - start
let value = deposit * (coefficient ** (time_delta / 100))
console.log((value / 100).toFixed(6))
}, 100);
Первоначальный депозит: | |
Секунд с момента пополнения: | |
Актуальный баланс: |
Процент в секунду
Рассчет процентной ставки
const effective_interest = 15
const periods = 30 * 24 * 60 * 60 // sec per month
const interest = (((1 + (effective_interest / 100)) ** (1 / periods)) - 1) * 100
console.log(interest.toFixed(15)) // 0.000005392050384
Рассчитаем процентную ставку для периода капитализации в 1 секунду при эффективной месячной ставке 15%:
$$ \left( \left(1 + \frac{15}{100}\right)^\frac{1}{30 * 24 * 60 * 60} – 1\right) \times 100 \approx 0.00000539205% $$
Рассчет коэффициента наращения
const effective_interest = 15
const periods = 30 * 24 * 60 * 60 // sec per month
const coefficient = (1 + (effective_interest / 100)) ** (1 / periods)
console.log(coefficient) // 1.0000000539205038
Рассчитаем коэффициент наращения для периода капитализации в 1 секунду при эффективной месячной ставке 15%:
$$ \left(1 + \frac{15}{100}\right)^\frac{1}{30 * 24 * 60 * 60} \approx 1.0000000539205038 $$
Рассчет баланса
const effective_interest = 15
const periods = 30 * 24 * 60 * 60 // sec per month
const coefficient = (1 + (effective_interest / 100)) ** (1 / periods)
const deposit = 1000
const time_delta = 30 * 24 * 60 * 60 // sec per month
const value = deposit * (coefficient ** time_delta)
console.log(value) // 1149.9999997806578
Рассчитаем баланс через 30 дней (30 * 24 * 60 * 60 = 2592000 секунд) при первоначальном депозите в 1000 монет:
$$ i = \left(1 + \frac{15}{100}\right)^\frac{1}{25920000} $$ $$ 1000 \times i^{25920000} \approx 1149.9999997807 \approx 1150 $$
Процент в минуту
Рассчет процентной ставки
const effective_interest = 18
const periods = 30 * 24 * 60 // min per month
const interest = (((1 + (effective_interest / 100)) ** (1 / periods)) - 1) * 100
console.log(interest) // 0.0003831360082084956
Рассчитаем процентную ставку для периода капитализации в 1 минуту при эффективной месячной ставке 18%:
$$ \left( \left(1 + \frac{18}{100}\right)^\frac{1}{30 * 24 * 60} – 1\right) \times 100 \approx 0.000383136% $$
Рассчет баланса
const effective_interest = 18
const periods = 30 * 24 * 60 // min per month
const coefficient = (1 + (effective_interest / 100)) ** (1 / periods)
const deposit = 1000
const time_delta = 30 * 24 * 60 // min per month
const value = deposit * (coefficient ** time_delta)
console.log(value) // 1179.9999999952715
Рассчитаем баланс через 30 дней при первоначальном депозите в 1000 монет:
$$ 1000 \times \left( \left(1 + \frac{18}{100}\right)^\frac{1}{43200}\right)^{43200} \approx 1179.9999999953 \approx 1180 $$
Процент в день
Рассчет процентной ставки
const effective_interest = 10
const periods = 30 // days per month
const interest = (((1 + (effective_interest / 100)) ** (1 / periods)) - 1) * 100
console.log(interest) // 0.31820580257142517
Рассчитаем процентную ставку для периода капитализации в 1 день при эффективной месячной ставке 10%:
$$ \left( \left(1 + \frac{10}{100}\right)^\frac{1}{30} – 1 \right) \times 100 \approx 0.31820580257% $$
Рассчет баланса
const effective_interest = 10
const periods = 30 // days per month
const coefficient = (1 + (effective_interest / 100)) ** (1 / periods)
const deposit = 1000
const value = deposit * (coefficient ** 30)
console.log(value.toFixed(2)) // 1100.00
Рассчитаем баланс через 30 дней при первоначальном депозите в 1000 монет:
$$ 1000 \times \left( \left(1 + \frac{10}{100}\right)^\frac{1}{30}\right)^{30} = 1100 $$
Процент в месяц
Рассчет процентной ставки
const effective_interest = 10
const periods = 1 // months per month
const interest = (((1 + (effective_interest / 100)) ** (1 / periods)) - 1) * 100
console.log(interest.toFixed(2)) // 10.00
Рассчитаем процентную ставку для периода капитализации в 1 месяц (30 дней) при эффективной месячной ставке 10%:
$$ \left( \left(1 + \frac{10}{100}\right)^{1} – 1\right) \times 100 = 10% $$
Рассчет баланса
const effective_interest = 10
const coefficient = 1 + (effective_interest / 100)
const deposit = 1000
let value = deposit * (coefficient ** 1)
console.log(value.toFixed(2)) // 1100.00
value = deposit * (coefficient ** 2)
console.log(value.toFixed(2)) // 1210.00
Рассчитаем баланс через 1 месяц (30 дней) при первоначальном депозите в 1000 монет:
$$ 1000 \times \left(1 + \frac{10}{100}\right) = 1100 $$
Рассчитаем баланс через 2 месяца (60 дней) при первоначальном депозите в 1000 монет:
$$ 1000 \times \left(1 + \frac{10}{100}\right)^{2} = 1210 $$
Процент в год
Рассчет процентной ставки
const effective_interest = 10
const periods = 1 / 12 // years per month
const interest = (((1 + (effective_interest / 100)) ** (1 / periods)) - 1) * 100
console.log(interest) // 213.8428376721003
Рассчитаем процентную ставку для периода капитализации в 1 год при эффективной месячной ставке 10%:
$$ \left( \left(1 + \frac{10}{100}\right)^{12} – 1 \right) \times 100 \approx 213.8428376721% $$
Рассчет баланса
const effective_interest = 10
const periods = 1 / 12 // years per month
const coefficient = (1 + (effective_interest / 100)) ** (1 / periods)
const deposit = 1000
let value = deposit * coefficient
console.log(value.toFixed(6)) // 3138.428377
value = deposit * (coefficient ** 2)
console.log(value.toFixed(6)) // 9849.732676
Рассчитаем баланс через 1 год (360 дней) при первоначальном депозите в 1000 монет:
$$ 1000 \times \left(1 + \frac{10}{100}\right)^{12} \approx 3138.43 $$
Рассчитаем баланс через 2 года (720 дней) при первоначальном депозите в 1000 монет:
$$ 1000 \times \left( \left(1 + \frac{10}{100}\right)^{12}\right)^{2} \approx 9849.73 $$