繁体   English   中英

在SQL中计算XIRR

[英]Calculating XIRR in SQL

我一直在尝试找到一种在SQL(TSQL)中计算XIRR的解决方案。 理想情况下,这些值应与Excel使用相同输入数据计算的值匹配。 我在网上找到了一些建议的解决方案,但似乎都存在某种缺陷。 下面是我们一直在使用的几乎在所有情况下都有效的示例。

CREATE FUNCTION [dbo].[CalcXIRR]
(
    @Sample XIRRTable READONLY,
    @Rate DECIMAL(19, 9) = 0.1
)
RETURNS DECIMAL(38, 9)
AS
BEGIN
    DECLARE @X DECIMAL(19, 9) = 0.0,
    @X0 DECIMAL(19, 9) = 0.1,
    @f DECIMAL(19, 9) = 0.0,
    @fbar DECIMAL(19, 9) = 0.0,
    @i TINYINT = 0,
    @found TINYINT = 0

IF @Rate IS NULL
    SET @Rate = 0.1

SET @X0 = @Rate

WHILE @i < 100
    BEGIN
        SELECT  @f = 0.0,
            @fbar = 0.0

        SELECT      @f = @f + value * POWER(1 + @X0, (-theDelta / 365.0E)),
        @fbar = @fbar - theDelta / 365.0E * value * POWER(1 + @X0, (-theDelta / 365.0E - 1))
        FROM    (
                SELECT  Value,
                    DATEDIFF(DAY, MIN(date) OVER (), date) AS theDelta
                FROM    @Sample
            ) AS d

        SET @X = @X0 - @f / @fbar

        If ABS(@X - @X0) < 0.00000001
        BEGIN
           SET @found = 1
           BREAK;
        END

        SET @X0 = @X
        SET @i += 1
   END

 If @found = 1
    RETURN  @X

RETURN NULL
END

GO

但是,根据以下数据,

在此处输入图片说明

我们遇到错误

An invalid floating point operation occurred.

这正在发生

SELECT @f = @f + value * POWER(1 + @X0, (-theDelta / 365.0E))

它实质上取决于特定的计算

POWER(-0.635634780,-0.0849315)

可能是有些简单的语法调整可以解决此错误,或者函数本身不起作用? Excel似乎可以毫无问题地处理此计算。

这只是我尝试使用的许多示例之一。 如果需要,我可以分解另一个示例。 我可以编辑该帖子,使其在指导下适合Stack Overflow的标准。 我发现非常罕见的是,没有关于如何在SQL中计算XIRR的明确讨论。 每个解决方案似乎都有问题,但Excel毫不费力地吐出了值。

假设图像在左上角的A1中。 无法解决您的SQL,但希望对您有所帮助:

首先,我的Excel也返回-0.6719218

其次,在XIRR函数中详细介绍了Excel的计算,其中包括:

XIRR公式

但是,这是针对一系列现金流量的,Excel使用其进行迭代,并且您的特定示例只是一对成对的条目,其可溶方程式可以表示为:

=10^(LOG(-A2/A1)*365/(B2-B1))

这部分: 365/(B2-B1)是您的0.0849315的倒数,因此可能值得更仔细地研究您的0.635634780 (我不清楚您是如何得出的)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM