# Apy

Various helpers for calculating interest

## TODO

  • Amortization

  • Update method signatures to only use day counts

  • Comprehensive examples w/ tests

  • Setup ci

## Installation

Add this line to your application’s Gemfile:

“‘ruby gem “apy” “`

And then execute:

$ bundle install

Or install it yourself as:

$ gem install apy

## Usage

  • [As a module](#as-a-module)

    • [Method: ‘weighted_harmonic_mean`](#weighted-harmonic-mean)

    • [Method: ‘compound`](#compound)

  • [Interest class](#interest)

  • [Loan class](#loan)

### As a Module ‘Apy::Calculable` is the base module with the most exposed utility. Simply include it in a class which needs the functionality.

#### ‘weighted_harmonic_mean` [Link](www.investopedia.com/terms/h/harmonicaverage.asp#mntl-sc-block_1-0-9)

Given a series of invested amounts, this can be used to effectively calculate the average share price, or DCA (dollar cost average) price of a position.

Given the following: | Amount invested | Share price | | — | — | | 1000 | 156.23 | | 1000 | 156.30 | | 1000 | 173.15 | | 1000 | 188.72 | | 1000 | 204.61 | | 1000 | 178.23 |

Investing a total of 6000 with the above share prices results in ‘174.57` for the average price paid per share.

Given the following: | Amount invested | Share price | | — | — | | 500 | 200.00 | | 1000 | 100.00 |

Investing a total of 1500 with the above share prices results in ‘100.00` for the average price paid per share.

The module method accepts a matrix, with each array in the set having the following signature ‘[invested_amount, share_price]`: “`ruby dca = [

[1000, 156.23],
[1000, 156.30],
[1000, 173.15],
[1000, 188.72],
[1000, 204.61],
[1000, 178.23]

] weighted_harmonic_mean(dca) == 174.5655590168175 “‘

#### ‘compound` [Link](www.thecalculatorsite.com/articles/finance/compound-interest-formula.php)

Simple compound interest formula. Variable names correspond to the following:

  • ‘principal` The base amount before interest

  • ‘rate` The expected interest rate

  • ‘times` The number of times interest is calculated per term

  • ‘terms` The number of terms to allow the principal accrue interest

Example: 1200@10% over 1y, interest paid monthly “‘ruby compound(1200, rate: 0.1, times: 12, terms: 1) == 1325.66 “`

#### ‘dca_compound` A variant of `#compound`, wherein an amount is continually invested at varying interest rates. Similar to `weighted_harmonic_mean`, this method also accepts a matrix. The size of the matrix corresponds to the number of `terms` all funds will accrue.

Example: 1200@10% over 2y, interest paid monthly “‘ruby dca = [

[1200, 0.1],
[1200, 0.1]

] dca_compound(dca, times: 12) == 2790.125 “‘

### Interest todo

### Loan todo

## Development

After checking out the repo, run ‘bin/setup` to install dependencies. Then, run `rake test` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.

To install this gem onto your local machine, run ‘bundle exec rake install`. To release a new version, update the version number in `version.rb`, and then run `bundle exec rake release`, which will create a git tag for the version, push git commits and the created tag, and push the `.gem` file to [rubygems.org](rubygems.org).

## Contributing

Bug reports and pull requests are welcome on GitHub at github.com/fire-pls/apy.

## License

The gem is available as open source under the terms of the [MIT License](opensource.org/licenses/MIT).