计算红宝石的IRR

Kei*_*cht 2 ruby finance stocks quantitative-finance

任何人都可以帮我一个计算一系列股票交易的内部收益率的方法吗?

让我们说场景是:

$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%)
Run Code Online (Sandbox Code Playgroud)

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

但我无法弄清楚如何调整任何解决方案,因为他们假设每次回报的时间段都是一致的时期(1年).

Kei*_*cht 8

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

gem install finance
Run Code Online (Sandbox Code Playgroud)

要解决我最初发布的场景:

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)
Run Code Online (Sandbox Code Playgroud)

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

但是,它给了我一些麻烦.我尝试了六个不同的测试用例,其中一个会引发一个我无法调试的异常.但是这个Finance gem中的xirr()方法适用于我可以抛出的每个测试用例.