跳到主要内容
跳到主要内容

财务函数

注意

以下文档是基于 system.functions 系统表生成的

financialInternalRateOfReturn

自 v25.7 引入

计算在固定时间间隔发生的一系列现金流的内部收益率(IRR)。 IRR 是使净现值(NPV)等于零的折现率。

IRR 通过求解下列方程得到:

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

语法

financialInternalRateOfReturn(现金流[, 估计值])

参数

  • cashflows — 现金流数组。每个值表示一笔付款(负值)或收入(正值)。Array(Int8/16/32/64)Array(Float*)
  • [, guess] — 可选的内部收益率初始猜测值(常量,默认 0.1)。Float*

返回值

返回内部收益率。如果计算无法收敛、输入数组为空或只有一个元素、所有现金流为零,或出现其他计算错误,则返回 NaNFloat64

示例

simple_example

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

simple_example_with_guess

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

financialInternalRateOfReturnExtended

引入版本:v25.7

计算不规则时间间隔发生的一系列现金流的扩展内部收益率(XIRR)。XIRR 是使所有现金流的净现值(NPV)等于零的贴现率。

XIRR 尝试求解以下方程(以 ACT_365F 为例):

i=0ncashflowi(1+rate)(dateidate0)/365=0\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' - 实际天数/365 固定:使用日期之间的实际天数除以 365
  • 'ACT_365_25' - 实际天数/365.25:使用日期之间的实际天数除以 365.25 String

返回值

返回 XIRR 值。如果无法执行计算,则返回 NaN。Float64

示例

简单示例

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

带猜测值的简单示例

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

日计数简单示例

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

在假设各期现金流之间时间间隔相等的前提下,计算一系列现金流的净现值(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

计算在不规则时间间隔发生的一系列现金流的扩展净现值(XNPV)。XNPV 在计算现值时会考虑每笔现金流的具体时间点。

ACT_365F 的 XNPV 公式:

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

数组应按日期升序排序。日期必须唯一。

语法

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

参数

  • rate — 应用的贴现率。Float*
  • cashflows — 现金流数组。每个值表示一笔支付(负值)或收入(正值)。必须至少包含一个正值和一个负值。Array(Int8/16/32/64)Array(Float*)
  • dates — 与每笔现金流对应的日期数组。必须与 cashflows 数组大小相同。Array(Date)Array(Date32)
  • [, daycount] — 可选的日计数惯例。支持的值:'ACT_365F'(默认)— 实际天数/365 固定法,'ACT_365_25' — 实际天数/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