Keith Schacht - 2 years ago 161
Ruby Question

# Calculating IRR in ruby

Can anyone help me with a method that calculates the IRR of a series of stock trades?

Let's say the scenario is:

``````\$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%)
``````

This should be helpful: http://www.rubyquiz.com/quiz156.html

But I couldn't figure out how to adapt any of the solutions since they assume the period of each return is over a consistent period (1 year).

I finally found exactly what I was looking for: http://rubydoc.info/gems/finance/1.1.0/Finance/Cashflow

``````gem install finance
``````

To solve the scenario I posted originally:

``````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)
``````

I also found this simple method: https://gist.github.com/1364990

However, it gave me some trouble. I tried a half dozen different test cases and one of them would raise an exception that I was never able to debug. But the xirr() method in this Finance gem worked for every test case I could throw at it.

Recommended from our users: Dynamic Network Monitoring from WhatsUp Gold from IPSwitch. Free Download