Skip to content

daneski13/rust-finprim

Repository files navigation

Financial Calculation Primitives (FinPrim)

This is a minimal library providing various primitive functions to perform financial calculations.

Most functions with Excel and Google Sheets counterparts mimic their behavior and arguments.

Functionality

Type Agnostic

This library is designed to be type-agnostic, allowing you to use any type that implements the FloatLike trait.

Default implementations:

  • f32
  • f64
  • Decimal from rust_decimal (via rust_decimal feature)

You can implement the FloatLike trait for your own types or wrap any decimal-like / floating-point type providing crate for use with this library. Allowing you to choose a type that best fits your precision and performance requirements.

Time Value of Money (TVM) Calculations

rust_finprim::tvm module.

  • Present Value
    • Common Uses: Bond Pricing, Discounted Cash Flow, Annuities, etc.
  • Future Value
    • Common Uses: Compound Interest/Growth, Annuities etc.
  • Net Present Value (NPV)
    • Common Uses: Capital Budgeting, Investment Analysis, etc.
  • Net Present Value with differing discount rates
  • Net Present Value for irregular cash flows (XNPV)
  • Payment (PMT)
    • Common Uses: Bonds, Loan/Mortgage Payments, Annuities, etc.

Rate Calculations

rust_finprim::rate module.

  • APR (Annual Percentage Rate) and EAR (Effective Annual Rate) conversions
  • IRR (Internal Rate of Return)
    • Common Uses: Investment Analysis, Capital Budgeting, Bond Yields (YTM, YTC), etc.
  • Internal Rate of Return for irregular cash flows (XIRR)
  • MIRR (Modified Internal Rate of Return)
  • Modified Internal Rate of Return for irregular cash flows (XMIRR)
  • Time Weighted Return
    • Common Uses: Performance Measurement, Portfolio Analysis, Due Diligence, etc.
  • Percentage Change

Amortization, Depreciation, and Tax Calculations

rust_finprim::amort_dep_tax module.

  • Amortization Schedule
    • Common Uses: Loan/Mortgage Amortization
  • Depreciation Schedules for various methods
    • Straight line
    • Declining balance (e.g. double declining balance)
    • Sum of years digits
    • MACRS (Modified Accelerated Cost Recovery System) for US tax purposes
  • Progressive Income Tax

Derivatives

rust_finprim::derivatives module.

  • 1st and 2nd derivative of present value with respect to interest rate

    • Useful for calculating duration, convexity and various optimization problems
  • 1st and 2nd derivative of WACC (Weighted Average Cost of Capital) with respect to the debt/equity ratio

Features

  • std - Enabled by default. You can use the library in a no_std environment with default-features = false and enabling no_std feature (no_std depends on the libm crate for the core float types).
  • serde - Enables serialization and deserialization of the provided structs using serde.
  • rust_decimal - Enables support for the Decimal type from the rust_decimal crate.

Installation

Add the following to your Cargo.toml:

[dependencies]
rust_finprim = "0.5.1"

Or

cargo add rust_finprim

Enable everything:

cargo add rust_finprim --features "serde rust_decimal"

Disable std and enable no_std:

cargo add rust_finprim --no-default-features --features "no_std"

About

Primitive Financial Calculations Implemented in Rust

Topics

Resources

License

Stars

Watchers

Forks

Packages

No packages published