Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/wowinter13/finance_rb
A ruby port of numpy-financial functions and more.
https://github.com/wowinter13/finance_rb
finance financial gem ruby rubygem
Last synced: 24 days ago
JSON representation
A ruby port of numpy-financial functions and more.
- Host: GitHub
- URL: https://github.com/wowinter13/finance_rb
- Owner: wowinter13
- License: mit
- Created: 2021-02-27T21:41:34.000Z (over 3 years ago)
- Default Branch: master
- Last Pushed: 2023-10-12T00:10:27.000Z (about 1 year ago)
- Last Synced: 2024-10-14T10:16:09.424Z (about 1 month ago)
- Topics: finance, financial, gem, ruby, rubygem
- Language: Ruby
- Homepage: https://rubygems.org/gems/finance_rb
- Size: 42 KB
- Stars: 18
- Watchers: 4
- Forks: 3
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- License: LICENSE.txt
- Code of conduct: CODE_OF_CONDUCT.md
Awesome Lists containing this project
README
# finance_rb
This package is a ruby native port of the numpy-financial package with some helpful additional functions.
The functions in this package are a scalar version of their vectorised counterparts in the [numpy-financial](https://github.com/numpy/numpy-financial) library.
![tests](https://github.com/wowinter13/finance_rb/actions/workflows/tests.yml/badge.svg) [![Release](https://img.shields.io/github/v/release/wowinter13/finance_rb.svg?style=flat-square)](https://github.com/wowinter13/finance_rb/releases) [![PRs Welcome](https://img.shields.io/badge/PRs-welcome-brightgreen.svg?style=flat-square)](http://makeapullrequest.com) [![Maintainability](https://api.codeclimate.com/v1/badges/bbca82ad7815794c6718/maintainability)](https://codeclimate.com/github/wowinter13/finance_rb/maintainability)
[![Buy Me A Coffee](https://cdn.buymeacoffee.com/buttons/v2/default-blue.png)](https://www.buymeacoffee.com/wowinter13)
Currently, only some functions are ported,
which are as follows:| numpy-financial function | ruby native function ported? | info|
|:------------------------: |:------------------: | :------------------|
| fv | ✅ | Computes the future value|
| ipmt | ✅ | Computes interest payment for a loan|
| pmt | ✅ | Computes the fixed periodic payment(principal + interest) made against a loan amount|
| ppmt | ✅ | Computes principal payment for a loan|
| nper | ✅ | Computes the number of periodic payments|
| pv | ✅ | Computes the present value of a payment|
| rate | ✅ | Computes the rate of interest per period|
| irr | ✅ | Computes the internal rate of return|
| npv | ✅ | Computes the net present value of a series of cash flow|
| mirr | ✅ | Computes the modified internal rate of return|**Things to be done:**
1. Xirr
2. More specs for edge cases
3. Fee, currency protection and other cool stuff for advanced usage
4. Better errors
5. A detailed documentation for all methods## Documentation
Detailed documentation is available at [rubydoc](https://rubydoc.info/gems/finance_rb).
### Basic usage
There is no need to create a loan class to calculate some basic functions, such as `npv`, `irr`, or `mirr`. Simply call a needed method with required arguments using calculations class.
1. **IRR** (Internal Rate of Return)
```ruby
Finance::Calculations.irr([-4000,1200,1410,1875,1050])
=> 0.14299344106053188
```2. **MIRR** (Modified Internal Rate of Return)
```ruby
Finance::Calculations.mirr([100, 200, -50, 300, -200], 0.05, 0.06)
=> 0.3428233878421769
```3. **NPV** (Net Present Value)
```ruby
Finance::Calculations.net_present_value(0.1, [-100, 6, 6, 6])
=> -85.07888805409468
```### Advanced Usage
Create a loan instance, and pass available parameters for nominal annual rate, duration (in months), and amount of loan.
```ruby
loan = Finance::Loan.new(nominal_rate: 0.1, duration: 12, amount: 1000)
loan.pmt # => -87.9158872300099
```Available methods: `pmt`, `ipmt`, `ppmt`, `nper`, `pv`, `fv`, `rate`.
## Installation
finance_rb is available as a gem, to install it just install the gem:
gem install finance_rb
If you're using Bundler, add the gem to Gemfile.
gem 'finance_rb'
Run `bundle install`.
## Running tests
bundle exec rspec spec/
## Available Functions** Simple financial functions **
- fv(rate, nper, pmt, pv[, when]) Compute the future value.
- pv(rate, nper, pmt[, fv, when]) Compute the present value.
- npv(rate, values) Returns the NPV (Net Present Value) of a cash flow series.
- pmt(rate, nper, pv[, fv, when]) Compute the payment against loan principal plus interest.
- ppmt(rate, per, nper, pv[, fv, when]) Compute the payment against loan principal.
- ipmt(rate, per, nper, pv[, fv, when]) Compute the interest portion of a payment.
- irr(values) Return the Internal Rate of Return (IRR).
- mirr(values, finance_rate, reinvest_rate) Modified internal rate of return.
- nper(rate, pmt, pv[, fv, when]) Compute the number of periodic payments.
- nrate(nper, pmt, pv, fv[, when, guess, tol, …]) Compute the rate of interest per period.## Contributing
1. Fork it ( https://github.com/wowinter13/finance_rb/fork )
2. Create your feature branch (`git checkout -b my-new-feature`)
3. Commit your changes (`git commit -am 'Add some feature'`)
4. Push to the branch (`git push origin my-new-feature`)
5. Create a new Pull Request## License
MIT License. See LICENSE for details.