我对金融一无所知,但对我来说,如果你想知道 6 个月内的收益率,它应该是等于年收益率的收益率。如果您想知道 3 个月的利率,它应该是等于 4 次复合后的年利率等的利率。这意味着从年收益率转换为任意时期的利率与计算根密切相关. 如果将年收益率表示为原始金额的比例(即 20% 收益率表示为 1.2,100% 收益率表示为 2.0 等),那么您可以通过取该数字的平方根得到 6 个月的收益率.
Ruby 有一种非常方便的方法来计算各种复杂的根:幂运算符,**
.
n ** 0.5 # square root
n ** (1.0/3.0) # 3rd root
...等等。
因此,我认为您应该能够通过以下方式将任意时期的年收益率转换为:
yearly_return ** (days.to_f / 365)
同样转换每日、每周或每月费率或返回到年费率:
yearly_return = daily_return ** 365
yearly_return = weekly_return ** 52
yearly_return = monthly_return ** 12
...等等。
据我所知(通过阅读维基百科文章),IRR 计算实际上并不依赖于所使用的时间段。如果您将一系列年度现金流量作为输入,您将获得年利率。如果您将一系列每日现金流量作为输入,您将获得每日利率,依此类推。
我建议您使用您链接到的解决方案之一来计算每日或每周现金流的 IRR(无论方便),并使用指数将其转换为年利率。您必须将 1 添加到irr()
方法的输出(这样 10% 的回报将是 1.1 而不是 0.1,等等)。
使用您给出的示例的每日现金流量,您可以这样做以获得每日 IRR:
irr([-30000,0,0,0,-15000,0,11000,0,0,0,0,0,0,0,0,0,0,14000,0,21000])