【问题标题】:Calculate XIRR for mutual fund transactions in Python在 Python 中计算共同基金交易的 XIRR
【发布时间】:2020-02-13 10:54:00
【问题描述】:

我知道我的问题在这里得到了回答..financial python library that has xirr and xnpv function?..

def xirr(transactions):
    years = [(ta[0] - transactions[0][0]).days / 365.0 for ta in transactions]
    residual = 1
    step = 0.05
    guess = 0.05
    epsilon = 0.0001
    limit = 10000
    while abs(residual) > epsilon and limit > 0:
        limit -= 1
        residual = 0.0
        for i, ta in enumerate(transactions):
            residual += ta[1] / pow(guess, years[i])
        if abs(residual) > epsilon:
            if residual > 0:
                guess += step
            else:
                guess -= step
                step /= 2.0
    return guess-1

当我为资金交易执行上述代码时,我在第一次迭代中得到负残差。 猜测=0.5-0.5=0 因此,我在下一次迭代中得到 zerodivisionerror。 为什么我得到负残差..如何处理这个?/ 提前致谢

【问题讨论】:

    标签: python xirr


    【解决方案1】:

    我通过以下方式解决了这个问题:在 pow 函数中使用了guess+1,并从结果中删除了-1 部分:

    def xirr(...):
        while ...:
            for ...:
                residual += ta[1] / pow(guess+1, years[i])
        ...
        return guess
    

    我也遇到了性能问题,因为这段代码是用纯 python 编写的。所以我使用引擎盖下的锈迹创建了faster version。它的运行速度比 python 实现快 100 倍以上。

    【讨论】:

      猜你喜欢
      • 2018-08-19
      • 1970-01-01
      • 2014-01-25
      • 2021-10-03
      • 1970-01-01
      • 2022-11-12
      • 2015-02-01
      • 1970-01-01
      • 2016-10-02
      相关资源
      最近更新 更多