首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >计算拼音格式的IRR

计算拼音格式的IRR
EN

Stack Overflow用户
提问于 2012-02-05 08:59:26
回答 6查看 3.7K关注 0票数 2

有没有人能帮我找出计算一系列股票交易的内部收益率的方法?

假设场景是这样的:

代码语言:javascript
复制
$10,000 of stock #1 purchased 1/1 and sold 1/7 for $11,000 (+10%)
$20,000 of stock #2 purchased 1/1 and sold 1/20 for $21,000 (+5%)
$15,000 of stock #3 purchased on 1/5 and sold 1/18 for $14,000 (-6.7%)

这应该是有帮助的:http://www.rubyquiz.com/quiz156.html

但我不知道如何调整任何解决方案,因为它们假设每次收益的周期都在一个一致的周期内(1年)。

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2012-02-10 12:05:19

我终于找到了我正在寻找的东西:http://rubydoc.info/gems/finance/1.1.0/Finance/Cashflow

代码语言:javascript
复制
gem install finance

为了解决我最初发布的场景:

代码语言:javascript
复制
include Finance
trans = []
trans << Transaction.new( -10000, date: Time.new(2012,1,1) )
trans << Transaction.new( 11000, date: Time.new(2012,1,7) )
trans << Transaction.new( -20000, date: Time.new(2012,1,1) )
trans << Transaction.new( 21000, date: Time.new(2012,1,20) )
trans << Transaction.new( -15000, date: Time.new(2012,1,5) )
trans << Transaction.new( 14000, date: Time.new(2012,1,18) )

trans.xirr.apr.to_f.round(2)

我还发现了这个简单的方法:https://gist.github.com/1364990

然而,它给我带来了一些麻烦。我尝试了半打不同的测试用例,其中一个会引发我永远无法调试的异常。但是这个Finance gem中的xirr()方法适用于我所能使用的所有测试用例。

票数 9
EN

Stack Overflow用户

发布于 2012-02-09 19:05:33

对于具有初始值和终值的投资,例如您的示例数据,包括购买价格、销售价格和持有期,您只需找到持有期收益率。

持有期收益率的计算方法是持有期收益率减去1

代码语言:javascript
复制
HPY = HPR - 1
HPR = final value/initial value
HPY = 11,000/10,000 - 1 = 1.1 - 1 = 0.10 = 10%
HPY = 21,000/20,000 - 1 = 1.05 - 1 = 0.05 = 5%
HPY = 14,000/15,000 - 1 = 0.9333 - 1 = -0.0667 = -6.7%

本文解释了holding period return and yield

你也可以使用下面的公式AHPR = HPR^(1/n) AHPY = AHPR -1年化持有期收益和持有期收益率

上述公式仅适用于只有一个期间回报的情况,就像您的股票买卖示例一样。

然而,如果你有多个回报,例如,你以1/1的价格购买了一只股票A,它在接下来的一周内收盘价攀升并跌至98,103,101,100,99,104

然后,你将不得不着眼于HPR和HPY之外的多个回报。在这种情况下,您可以计算ARR和GRR。试试这些用于arithmetic rate of returngeometric rate of return的在线计算器。

但是,如果你对你的投资有一个日期计划,那么这些都不适用。然后,你将不得不求助于寻找不规则现金流的内部收益率。内部收益率是定期现金流的内部收益率。对于不规则的现金流,例如股票交易,使用术语XIRR。XIRR是一个Excel函数,用于计算不规则现金流的内部收益率。要找到XIRR,您需要一系列现金流和现金流的日期计划。

与您在RubyQuiz和Wiki上引用的文章相比,Finance.ThinkAndDone.com对IRR的解释要详细得多。Think & Done上的IRR文章解释了使用设置为0的NPV方程或设置为1的盈利指数方程,使用牛顿·拉夫森方法和割线方法计算IRR。该网站还提供了在线IRR和XIRR计算器

票数 2
EN

Stack Overflow用户

发布于 2012-02-05 23:33:01

我对金融一无所知,但对我来说,如果你想知道6个月的收益率,它应该是等于两次复利后的年收益率。如果你想知道3个月的利率,它应该是当复合4倍时等于年利率的利率,等等。这意味着从年回报率转换为任意时期的利率与计算根密切相关。如果您将年收益率表示为原始金额的一部分(即,将20%的收益率表示为1.2,将100%的收益率表示为2.0,等等),则可以通过取该数字的平方根来获得6个月的收益率。

Ruby有一种非常方便的方法来计算各种复数的根:求幂运算符**

代码语言:javascript
复制
n ** 0.5       # square root
n ** (1.0/3.0) # 3rd root

...and等等。

因此,我认为你应该能够将任意时期的年回报率转换为1,方法是:

代码语言:javascript
复制
yearly_return ** (days.to_f / 365)

同样地,将每日、每周或每月的汇率转换为年利率:

代码语言:javascript
复制
yearly_return = daily_return ** 365
yearly_return = weekly_return ** 52
yearly_return = monthly_return ** 12

...and等等。

据我所知(通过阅读维基百科的文章),IRR的计算实际上并不依赖于所用的时间段。如果你给出一系列的年度现金流作为投入,你就会得到一个年利率。如果你给出一系列的每日现金流作为输入,你就会得到一个每日利率,依此类推。

我建议您使用您链接的解决方案之一来计算每日或每周现金流的IRR (只要方便),并使用指数将其转换为年率。您必须在irr()方法的输出中添加1(这样10%的返回值将是1.1而不是0.1,依此类推)。

使用您给出的示例的每日现金流,您可以执行以下操作来获得每日IRR:

代码语言:javascript
复制
irr([-30000,0,0,0,-15000,0,11000,0,0,0,0,0,0,0,0,0,0,14000,0,21000])
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9146030

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档