Проценты

Базовые термины и понятия

Процент (от новолат. 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 $$


Изменено January 1, 0001