Skip to content
ClickHouse Docs
ClickHouse DocsClickHouse Docs

Финансовые функции

financialInternalRateOfReturn

Добавленный в: v25.7.0

Вычисляет внутреннюю норму доходности (IRR) для серии денежных потоков, возникающих через равные промежутки времени. IRR — это ставка дисконтирования, при которой чистая приведённая стоимость (NPV) равна нулю.

IRR находится из следующего уравнения:

\sum_{i=0}^n \frac{cashflow_i}{(1 + irr)^i} = 0

Синтаксис

financialInternalRateOfReturn(cashflows[, guess])

Аргументы

  • cashflows — Массив денежных потоков. Каждое значение представляет собой выплату (отрицательное значение) или поступление (положительное значение). Array(Int8/16/32/64) или Array(Float*)
  • [, guess] — Необязательное начальное приближение (постоянное значение) для внутренней нормы доходности (по умолчанию 0.1). Float*

Возвращаемое значение

Возвращает внутреннюю норму доходности или NaN, если вычисление не сходится, входной массив пуст или содержит только один элемент, все денежные потоки равны нулю или возникают другие ошибки вычисления. Float64

Примеры

simple_example

SELECT financialInternalRateOfReturn([-100, 39, 59, 55, 20])
0.2809484211599611

простой_пример_с_подбором

SELECT financialInternalRateOfReturn([-100, 39, 59, 55, 20], 0.1)
0.2809484211599611

financialInternalRateOfReturnExtended

Добавленный в: v25.7.0

Вычисляет расширенную внутреннюю норму доходности (XIRR) для серии денежных потоков, возникающих через нерегулярные интервалы. XIRR — это ставка дисконтирования, при которой чистая приведённая стоимость (NPV) всех денежных потоков равна нулю.

XIRR решает следующее уравнение (пример для ACT_365F):

\sum_{i=0}^n \frac{cashflow_i}{(1 + rate)^{(date_i - date_0)/365}} = 0

Массивы должны быть отсортированы по дате в порядке возрастания. Даты должны быть уникальными.

Синтаксис

financialInternalRateOfReturnExtended(cashflow, date [, guess, daycount])

Аргументы

  • cashflow — Массив денежных потоков, соответствующих датам во втором параметре. Array(Int8/16/32/64) или Array(Float*)
  • date — Отсортированный массив уникальных дат, соответствующих денежным потокам. Array(Date) или Array(Date32)
  • [, guess] — Необязательный. Начальное приближение (константное значение) для вычисления XIRR. Float*
  • [, daycount] — Необязательное соглашение о подсчёте дней (по умолчанию ‘ACT_365F’). Поддерживаемые значения:
  • ‘ACT_365F’ - Actual/365 Fixed: фактическое количество дней между датами, делённое на 365
  • ‘ACT_365_25’ - Actual/365.25: фактическое количество дней между датами, делённое на 365.25 String

Возвращаемое значение

Возвращает значение XIRR. Если вычисление невозможно выполнить, возвращает NaN. Float64

Примеры

simple_example

SELECT financialInternalRateOfReturnExtended([-10000, 5750, 4250, 3250], [toDate('2020-01-01'), toDate('2020-03-01'), toDate('2020-10-30'), toDate('2021-02-15')])
0.6342972615260243

simple_example_with_guess

SELECT financialInternalRateOfReturnExtended([-10000, 5750, 4250, 3250], [toDate('2020-01-01'), toDate('2020-03-01'), toDate('2020-10-30'), toDate('2021-02-15')], 0.5)
0.6342972615260243

simple_example_daycount

SELECT round(financialInternalRateOfReturnExtended([100000, -110000], [toDate('2020-01-01'), toDate('2021-01-01')], 0.1, 'ACT_365_25'), 6) AS xirr_365_25
0.099785

financialNetPresentValue

Добавленный в: v25.7.0

Вычисляет чистую приведённую стоимость (NPV) серии денежных потоков, предполагая равные временные интервалы между денежными потоками.

Вариант по умолчанию (start_from_zero = true):

\sum_{i=0}^{N-1} \frac{values_i}{(1 + rate)^i}

Вариант, совместимый с Excel (start_from_zero = false):

\sum_{i=1}^{N} \frac{values_i}{(1 + rate)^i}

Синтаксис

financialNetPresentValue(rate, cashflows[, start_from_zero])

Аргументы

  • rate — Ставка дисконтирования, которую нужно применить. Float*
  • cashflows — Массив денежных потоков. Каждое значение представляет собой выплату (отрицательное значение) или доход (положительное значение). Array(Int8/16/32/64) или Array(Float*)
  • [, start_from_zero] — Необязательный логический параметр, указывающий, следует ли начинать вычисление NPV с периода 0 (true) или с периода 1 (false, совместимо с Excel). По умолчанию: true. Bool

Возвращаемое значение

Возвращает чистую приведенную стоимость в виде значения Float64. Float64

Примеры

default_calculation

SELECT financialNetPresentValue(0.08, [-40000., 5000., 8000., 12000., 30000.])
3065.2226681795255

excel_compatible_calculation

SELECT financialNetPresentValue(0.08, [-40000., 5000., 8000., 12000., 30000.], false)
2838.1691372032656

financialNetPresentValueExtended

Добавленный в: v25.7.0

Вычисляет расширенную чистую приведённую стоимость (XNPV) для серии денежных потоков, возникающих через нерегулярные интервалы. XNPV учитывает конкретное время каждого денежного потока при вычислении приведённой стоимости.

XNPV equation for ACT_365F:

XNPV=\sum_{i=1}^n \frac{cashflow_i}{(1 + rate)^{(date_i - date_0)/365}}

Массивы должны быть отсортированы по дате в порядке возрастания. Даты должны быть уникальными.

Syntax

financialNetPresentValueExtended(rate, cashflows, dates[, daycount])

Аргументы

  • rate — Ставка дисконтирования. Float*
  • cashflows — Массив денежных потоков. Каждое значение представляет платёж (отрицательное значение) или доход (положительное значение). Должен содержать хотя бы одно положительное и одно отрицательное значение. Array(Int8/16/32/64) или Array(Float*)
  • dates — Массив дат, соответствующих каждому денежному потоку. Должен иметь тот же размер, что и массив cashflows. Array(Date) или Array(Date32)
  • [, daycount] — Необязательное соглашение о подсчёте дней. Поддерживаемые значения: 'ACT_365F' (по умолчанию) — Actual/365 Fixed, 'ACT_365_25' — Actual/365.25. String

Возвращаемое значение

Возвращает чистую приведённую стоимость в виде значения Float64. Float64

Примеры

Базовое использование

SELECT financialNetPresentValueExtended(0.1, [-10000., 5750., 4250., 3250.], [toDate('2020-01-01'), toDate('2020-03-01'), toDate('2020-10-30'), toDate('2021-02-15')])
2506.579458169746

Использование другого соглашения о подсчёте дней

SELECT financialNetPresentValueExtended(0.1, [-10000., 5750., 4250., 3250.], [toDate('2020-01-01'), toDate('2020-03-01'), toDate('2020-10-30'), toDate('2021-02-15')], 'ACT_365_25')
2507.067268742502
Navigation