finrb

CI CodeQL RuboCop

Ruby gem for financial calculations/modeling.

finrb forked from the ruby finance gem.

Overview

Features

Currently implemented features include:

  • Uses the flt gem to ensure precision decimal arithmetic in all calculations.

  • Fixed-rate mortgage amortization (30/360).

  • Interest rates

  • Various cash flow computations, such as NPV and IRR.

  • Adjustable rate mortgage amortization.

  • Payment modifications (i.e., how does paying an additional $75 per month affect the amortization?)

  • Utils class provides basic financial calculation utilities (ported from R's FinCal library):

  • Basic Earnings Per Share

  • Bond-equivalent yield (BEY), 2 x the semiannual discount rate

  • Calculate the net increase in common shares from the potential exercise of stock options or warrants

  • Calculate weighted average shares - weighted average number of common shares

  • Cash ratio - Liquidity ratios measure the firm's ability to satisfy its short-term obligations as they come due.

  • Computing Coefficient of variation

  • Computing HPR, the holding period return

  • Computing IRR, the internal rate of return

  • Computing NPV, the PV of the cash flows less the initial (time = 0) outlay

  • Computing Roy's safety-first ratio

  • Computing Sampling error

  • Computing Sharpe Ratio

  • Computing TWRR, the time-weighted rate of return

  • Computing bank discount yield (BDY) for a T-bill

  • Computing money market yield (MMY) for a T-bill

  • Computing the future value of an uneven cash flow series

  • Computing the present value of an uneven cash flow series

  • Computing the rate of return for each period

  • Convert a given continuous compounded rate to a norminal rate

  • Convert a given norminal rate to a continuous compounded rate

  • Convert holding period return to the effective annual rate

  • Convert stated annual rate to the effective annual rate (with continuous compounding)

  • Cost of goods sold and ending inventory under three methods (FIFO,LIFO,Weighted average)

  • Current ratio - Liquidity ratios measure the firm's ability to satisfy its short-term obligations as they come due.

  • Debt ratio - Solvency ratios measure the firm's ability to satisfy its long-term obligations.

  • Depreciation Expense Recognition - Straight-line depreciation (SL) allocates an equal amount of depreciation each year over the asset's useful life

  • Depreciation Expense Recognition - double-declining balance (DDB), the most common declining balance method, which applies two times the straight-line rate to the declining balance.

  • Diluted Earnings Per Share

  • Equivalent/proportional Interest Rates

  • Estimate future value (fv) (of a single sum)

  • Estimate future value of an annuity

  • Estimate period payment

  • Estimate present value (pv) (of a single sum) (of an annuity)

  • Estimate present value of a perpetuity

  • Estimate the number of periods

  • Financial leverage - Solvency ratios measure the firm's ability to satisfy its long-term obligations.

  • Geometric mean return

  • Gross profit margin - Evaluate a company's financial performance

  • Harmonic mean, average price

  • Long-term debt-to-equity - Solvency ratios measure the firm's ability to satisfy its long-term obligations.

  • Net profit margin - Evaluate a company's financial performance

  • Quick ratio - Liquidity ratios measure the firm's ability to satisfy its short-term obligations as they come due.

  • Rate of return for a perpetuity

  • Total debt-to-equity - Solvency ratios measure the firm's ability to satisfy its long-term obligations.

  • Weighted mean as a portfolio return

Configuration

In config/initializers/finrb.rb Finrb allows to set tolerance (eps) and default guess for IRR and XIRR calculations, such as:

Finrb.configure do |config|
  config.eps = '1.0e-12'
  config.guess = 0.5
  config.business_days = false # only relevant when using Transaction object, skips weekends
  config.periodic_compound = false # only relevant when using Transaction object
end

API and examples

See api.md

Resources

Acknowledgements

  • Martin Bjeldbak Madsen (@martinbjeldbak), Bill Kranec (@wkranec) - original finance gem maintainers.
  • Yanhui Fan (@felixfan) - maintainer of FinCal library.

License

See COPYING and COPYING.LESSER