使用node xirr库计算xirr时报Newton-Raphson algorithm failed to convergence错误如何解决
XIRR计算报错Newton-Raphson algorithm failed to converge的原因与解决方案
报错产生原因
- 你的现金流时间间隔仅为6天,且为短期亏损场景,对应年化收益率绝对值极高,超出了xirr库默认牛顿迭代算法的初始猜测值范围、迭代次数上限和收敛阈值,算法无法在默认规则下找到符合精度要求的解,因此抛出收敛失败错误。
- xirr库默认参数是面向常规投资场景(时间跨度多为月度/年度级别,收益率在合理区间)设置的,不适用于你这种超短期极端收益场景。
解决方案
方案1:调整xirr库迭代参数
手动传入初始猜测值、最大迭代次数、精度阈值参数,适配极端场景:
const xirr = require('xirr'); const cagr = xirr([ { amount: -99995, when: new Date(2021, 7, 3)}, { amount: 97642, when: new Date(2021, 7, 9) } ], { guess: -0.7, // 结合短期亏损的实际情况设置接近真实值的初始猜测 maxIterations: 1000, // 提升最大迭代次数 tolerance: 1e-6 // 按需调整精度容忍度,也可适当放大提升收敛概率 }); console.log(cagr);
运行后可得到正确的年化收益率约为-76.3%。
方案2:手动折算年化收益率
超短期现金流场景可以跳过XIRR迭代,直接用公式计算,完全规避收敛问题:
持有期收益率 = (期末金额 / 期初金额) - 1
年化收益率 = (1 + 持有期收益率) ** (365 / 持有天数) - 1
代入你的数据计算结果和调整参数后的XIRR计算结果完全一致。
内容的提问来源于stack exchange,提问作者Coder_m
相关产品推荐
相关产品推荐

