A go port of numpy-financial functions and more.

Overview

go-financial

This package is a go native port of the numpy-financial package with some additional helper
functions.

The functions in this package are a scalar version of their vectorised counterparts in
the numpy-financial library.

unit-tests status Go Report Card codecov GoDoc Release PRs Welcome

Currently, only some functions are ported,
which are as follows:

numpy-financial function go 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

Index

While the numpy-financial package contains a set of elementary financial functions, this pkg also contains some helper functions on top of it. Their usage and description can be found below:

Detailed documentation is available at godoc.

Amortisation(Generate Table)

To generate the schedule for a loan of 20 lakhs over 15years at 12%p.a., you can do the following:

package main

import (
	"time"

	financial "github.com/razorpay/go-financial"
	"github.com/razorpay/go-financial/enums/frequency"
	"github.com/razorpay/go-financial/enums/interesttype"
	"github.com/razorpay/go-financial/enums/paymentperiod"
)

func main() {
	loc, err := time.LoadLocation("Asia/Kolkata")
	if err != nil {
		panic("location loading error")
	}
	currentDate := time.Now().In(loc)

	config := financial.Config{
                // start date is inclusive
		StartDate:      currentDate,
                // end date is inclusive
		EndDate:        currentDate.AddDate(15, 0, 0).AddDate(0, 0, -1), 
		Frequency:      frequency.ANNUALLY,
                // AmountBorrowed is in paisa
		AmountBorrowed: 200000000,
                // InterestType can be flat or reducing.
		InterestType:   interesttype.REDUCING,
                // interest is in basis points
		Interest:       1200, 
		PaymentPeriod:  paymentperiod.ENDING,
		Round:          true,
	}
	amortization, err := financial.NewAmortization(&config)
	if err != nil {
		panic(err)
	}

	rows, err := amortization.GenerateTable()
	if err != nil {
		panic(err)
	}
	// Generates json output of the data
	financial.PrintRows(rows)
	// Generates a html file with plots of the given data.
	financial.PlotRows(rows, "20lakh-loan-repayment-schedule")
} 
  

Generated plot

Fv

func Fv(rate float64, nper int64, pmt float64, pv float64, when paymentperiod.Type) float64  

Params:

 pv   : a present value 
rate  : an interest rate compounded once per period 
nper  : total number of periods 
pmt   : a (fixed) payment, paid either at the beginning (when =  1)
        or the end (when = 0) of each period 
when  : specification of whether payment is made at the beginning (when = 1)
        or the end (when = 0) of each period  

Fv computes future value at the end of some periods(nper).

Example(Fv)

If an investment has a 6% p.a. rate of return, compounded annually, and you are investing ₹ 10,000 at the end of each year with initial investment of ₹ 10,000, how much amount will you get at the end of 10 years ?

package main

import (
	"fmt"
	gofinancial "github.com/razorpay/go-financial"
	"github.com/razorpay/go-financial/enums/paymentperiod"
	"math"
)

func main() {
	rate := 0.06
	nper := int64(10)
	payment := float64(-10000)
	pv := float64(-10000)
	when := paymentperiod.ENDING

	fv := gofinancial.Fv(rate, nper, payment, pv, when)
	fmt.Printf("fv:%v", math.Round(fv))
        // Output:
        // fv:149716a
}

Run on go-playground

Pv

func Pv(rate float64, nper int64, pmt float64, fv float64, when paymentperiod.Type) float64 

Params:

 fv	: a future value
 rate	: an interest rate compounded once per period
 nper	: total number of periods
 pmt	: a (fixed) payment, paid either
	  at the beginning (when =  1) or the end (when = 0) of each period
 when	: specification of whether payment is made
	  at the beginning (when = 1) or the end
	  (when = 0) of each period

Pv computes present value some periods(nper) before the future value.

Example(Pv)

If an investment has a 6% p.a. rate of return, compounded annually, and you wish to possess ₹ 1,49,716 at the end of 10 peroids while providing ₹ 10,000 per period, how much should you put as your initial deposit ?

package main

import (
	"fmt"
	gofinancial "github.com/razorpay/go-financial"
	"github.com/razorpay/go-financial/enums/paymentperiod"
	"math"
)

func main() {
	rate := 0.06
	nper := int64(10)
	payment := float64(-10000)
	fv := float64(149716)
	when := paymentperiod.ENDING

	pv := gofinancial.Pv(rate, nper, payment, fv, when)
	fmt.Printf("pv:%v", math.Round(pv))	
	// Output:
	// pv:-10000
}

Run on go-playground

Npv

func Npv(rate float64, values []float64) float64 

Params:

 rate	: a discount rate compounded once per period
 values	: the value of the cash flow for that time period. Values provided here must be an array of float64

Npv computes net present value based on the discount rate and the values of cash flow over the course of the cash flow period

Example(Npv)

Given a rate of 0.281 per period and initial deposit of 100 followed by withdrawls of 39, 59, 55, 20. What is the net present value of the cash flow ?

package main

import (
	"fmt"
	gofinancial "github.com/razorpay/go-financial"	
	"math"
)

func main() {
	rate := 0.281
	values := []float64{-100, 39, 59, 55, 20}
	npv := gofinancial.Npv(rate, values)
	fmt.Printf("npv:%v", math.Round(npv))
	// Output:
	// npv: -0.008478591638455768
}

Run on go-playground

Pmt

func Pmt(rate float64, nper int64, pv float64, fv float64, when paymentperiod.Type) float64  

Params:

rate  : rate of interest compounded once per period 
nper  : total number of periods to be compounded for 
pv    : present value (e.g., an amount borrowed) 
fv    : future value (e.g., 0) 
when  : specification of whether payment is made at the
        beginning (when = 1) or the end (when = 0) of each period  

Pmt compute the fixed payment(principal + interest) against a loan amount ( fv = 0).
It can also be used to calculate the recurring payments needed to achieve a certain future value given an initial deposit, a fixed periodically compounded interest rate, and the total number of periods.

Example(Pmt-Loan)

If you have a loan of 1,00,000 to be paid after 2 years, with 18% p.a. compounded annually, how much total payment will you have to do each month? This example generates the total monthly payment(principal plus interest) needed for a loan of 1,00,000 over 2 years with 18% rate of interest compounded monthly

package main

import (
	"fmt"
	gofinancial "github.com/razorpay/go-financial"
	"github.com/razorpay/go-financial/enums/paymentperiod"
	"math"
)

func main() {
	rate := 0.18 / 12
	nper := int64(12 * 2)
	pv := float64(100000)
	fv := float64(0)
	when := paymentperiod.ENDING
	pmt := gofinancial.Pmt(rate, nper, pv, fv, when)
	fmt.Printf("payment:%v", math.Round(pmt))
        // Output:
        // payment:-4992
}

Run on go-playground

Example(Pmt-Investment)

If an investment gives 6% rate of return compounded annually, how much amount should you invest each month to get 10,00,000 amount after 10 years?

package main

import (
	"fmt"
	gofinancial "github.com/razorpay/go-financial"
	"github.com/razorpay/go-financial/enums/paymentperiod"
	"math"
)

func main() {
	rate := 0.06
	nper := int64(10)
	pv := float64(0)
	fv := float64(1000000)
	when := paymentperiod.BEGINNING
	pmt := gofinancial.Pmt(rate, nper, pv, fv, when)
	fmt.Printf("payment each year:%v", math.Round(pmt))
        // Output:
        // payment each year:-71574
}

Run on go-playground

IPmt

func IPmt(rate float64, per int64, nper int64, pv float64, fv float64, when paymentperiod.Type) float64  

IPmt computes interest payment for a loan under a given period.

Params:

rate  : rate of interest compounded once per period 
per   : period under consideration 
nper  : total number of periods to be compounded for 
pv    : present value (e.g., an amount borrowed) 
fv    : future value (e.g., 0) 
when  : specification of whether payment is made at the
        beginning (when = 1) or the end (when = 0) of each period  

Example(IPmt-Loan)

If you have a loan of 1,00,000 to be paid after 2 years, with 18% p.a. compounded annually, how much of the total payment done each month will be interest ?

package main

import (
	"fmt"
	gofinancial "github.com/razorpay/go-financial"
	"github.com/razorpay/go-financial/enums/paymentperiod"
	"math"
)

func main() {
	rate := 0.18 / 12
	nper := int64(12 * 2)
	pv := float64(100000)
	fv := float64(0)
	when := paymentperiod.ENDING

	for i := int64(0); i < nper; i++ {
		pmt := gofinancial.IPmt(rate, i+1, nper, pv, fv, when)
		fmt.Printf("period:%d interest:%v\n", i+1, math.Round(pmt))
	}
	// Output:
	// period:1 interest:-1500
	// period:2 interest:-1448
	// period:3 interest:-1394
	// period:4 interest:-1340
	// period:5 interest:-1286
	// period:6 interest:-1230
	// period:7 interest:-1174
	// period:8 interest:-1116
	// period:9 interest:-1058
	// period:10 interest:-999
	// period:11 interest:-939
	// period:12 interest:-879
	// period:13 interest:-817
	// period:14 interest:-754
	// period:15 interest:-691
	// period:16 interest:-626
	// period:17 interest:-561
	// period:18 interest:-494
	// period:19 interest:-427
	// period:20 interest:-358
	// period:21 interest:-289
	// period:22 interest:-218
	// period:23 interest:-146
	// period:24 interest:-74
}

Run on go-playground

Example(IPmt-Investment)

If an investment gives 6% rate of return compounded annually, how much interest will you earn each year against your yearly payments(71574) to get 10,00,000 amount after 10 years

package main

import (
	"fmt"
	gofinancial "github.com/razorpay/go-financial"
	"github.com/razorpay/go-financial/enums/paymentperiod"
	"math"
)

func main() {
	rate := 0.06
	nper := int64(10)
	pv := float64(0)
	fv := float64(1000000)
	when := paymentperiod.BEGINNING

	for i := int64(1); i < nper+1; i++ {
		pmt := gofinancial.IPmt(rate, i+1, nper, pv, fv, when)
		fmt.Printf("period:%d interest earned:%v\n", i, math.Round(pmt))
	}
	// Output:
	// period:1 interest earned:4294
	// period:2 interest earned:8846
	// period:3 interest earned:13672
	// period:4 interest earned:18786
	// period:5 interest earned:24208
	// period:6 interest earned:29955
	// period:7 interest earned:36047
	// period:8 interest earned:42504
	// period:9 interest earned:49348
	// period:10 interest earned:56604
}

Run on go-playground

PPmt

func PPmt(rate float64, per int64, nper int64, pv float64, fv float64, when paymentperiod.Type, round bool) float64  

PPmt computes principal payment for a loan under a given period.

Params:

rate  : rate of interest compounded once per period 
per   : period under consideration 
nper  : total number of periods to be compounded for 
pv    : present value (e.g., an amount borrowed) 
fv    : future value (e.g., 0) 
when  : specification of whether payment is made at 
        the beginning (when = 1) or the end (when = 0) of each period  

Example(PPmt-Loan)

If you have a loan of 1,00,000 to be paid after 2 years, with 18% p.a. compounded annually, how much total payment done each month will be principal ?

package main

import (
	"fmt"
	gofinancial "github.com/razorpay/go-financial"
	"github.com/razorpay/go-financial/enums/paymentperiod"
	"math"
)

func main() {
	rate := 0.18 / 12
	nper := int64(12 * 2)
	pv := float64(100000)
	fv := float64(0)
	when := paymentperiod.ENDING

	for i := int64(0); i < nper; i++ {
		pmt := gofinancial.PPmt(rate, i+1, nper, pv, fv, when, true)
		fmt.Printf("period:%d principal:%v\n", i+1, math.Round(pmt))
	}
	// Output:
	// period:1 principal:-3492
	// period:2 principal:-3544
	// period:3 principal:-3598
	// period:4 principal:-3652
	// period:5 principal:-3706
	// period:6 principal:-3762
	// period:7 principal:-3818
	// period:8 principal:-3876
	// period:9 principal:-3934
	// period:10 principal:-3993
	// period:11 principal:-4053
	// period:12 principal:-4113
	// period:13 principal:-4175
	// period:14 principal:-4238
	// period:15 principal:-4301
	// period:16 principal:-4366
	// period:17 principal:-4431
	// period:18 principal:-4498
	// period:19 principal:-4565
	// period:20 principal:-4634
	// period:21 principal:-4703
	// period:22 principal:-4774
	// period:23 principal:-4846
	// period:24 principal:-4918
}

Run on go-playground

Comments
  • Pv and Npv functions along with respective tests

    Pv and Npv functions along with respective tests

    This PR is regarding the addition of Pv and Npv functions. Test cases regarding the same have been added.

    Npv takes the second parameter as an array of float as opposed to using variadic functions. This was done as testing variadic functions is cumbersome at present ( javascript handles this using the spread syntax so any array can be unpacked and passed accordingly).

    Kindly review my code for improvements.

    opened by thsubaku9 6
  • replace float

    replace float

    After the post on reddit, we got some really good feedback on not using float for this project. There were quite a few good options which came up in the discussion, they were as follows:

    1. Use arbitrary-precision fixed-point decimal https://github.com/shopspring/decimal

    2. Use decimal.Big: https://gist.github.com/teepark/35e19b359ae670ebcf715d16c8f40282 This uses github.com/ericlagergren/decimal, which is another arbitrary precision pkg in go.

    3. Use golang's math/big.Int https://golang.org/pkg/math/big/

    4. Use golang's math/big.Rat https://golang.org/pkg/math/big/

    We are going forward with 1st approach because of its simpler API when compared to 3.

    opened by gyanesh-m 3
  • added danger js to put validation on PR size

    added danger js to put validation on PR size

    | Details | Description |------------------------------| --- | Desc | Added danger file and CI to restrict PR size | Reference | https://razorpay.slack.com/archives/CMM97TZQQ/p1657687676950489 | Spec | Now PR will fail and merge will be blocked, if PR size is more than 400 lines, excluding test files also If files changes is more than 15 excluding test files | Related PRs and Dependencies | Once this merge, need to raise PR in narayan repo to make ci step required

    opened by jaydeepRadadiya 1
  • Bump github.com/shopspring/decimal from 1.2.0 to 1.3.0

    Bump github.com/shopspring/decimal from 1.2.0 to 1.3.0

    Bumps github.com/shopspring/decimal from 1.2.0 to 1.3.0.

    Release notes

    Sourced from github.com/shopspring/decimal's releases.

    v1.3.0

    Full Changelog can be found in CHANGELOG.md

    New Contributors

    Changelog

    Sourced from github.com/shopspring/decimal's changelog.

    Decimal v1.3.0

    FEATURES

    • Add NewFromFormattedString initializer #184
    • Add NewNullDecimal initializer #234
    • Add implementation of natural exponent function (Taylor, Hull-Abraham) #229
    • Add RoundUp, RoundDown, RoundCeil, RoundFloor methods #196 #202 #220
    • Add XML support for NullDecimal #192
    • Add IsInteger method #179
    • Add Copy helper method #123
    • Add InexactFloat64 helper method #205
    • Add CoefficientInt64 helper method #244

    ENHANCEMENTS

    • Performance optimization of NewFromString init method #198
    • Performance optimization of Abs and Round methods #240
    • Additional tests (CI) for ppc64le architecture #188

    BUGFIXES

    • Fix rounding in FormatFloat fallback path (roundShortest method, fix taken from Go main repository) #161
    • Add slice range checks to UnmarshalBinary method #232
    Commits

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    dependencies 
    opened by dependabot[bot] 1
  • Bump github.com/smartystreets/assertions from 1.2.0 to 1.2.1

    Bump github.com/smartystreets/assertions from 1.2.0 to 1.2.1

    Bumps github.com/smartystreets/assertions from 1.2.0 to 1.2.1.

    Commits
    • c7d96ae Go 1.17
    • a2ad282 It's a SoFunc.
    • cf8b944 Exported AssertFunc for convenience.
    • 3913d37 fmt
    • c36c57e Appease go vet.
    • c5c2a8e Updated tests according to change introduced in PR #39.
    • 23e1c44 Merge pull request #39 from hatstand/patch-1
    • ff0f82a Fix grammar in shouldHaveHadLength message
    • d32cab8 ShouldPanicWith now uses errors.Is to correctly identify wrapped errors.
    • b63c46a New assertion: should.WrapError
    • Additional commits viewable in compare view

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    dependencies 
    opened by dependabot[bot] 1
  • Pmt returns NaN when rate is zero

    Pmt returns NaN when rate is zero

    The Pmt function returns NaN when rate is zero, but it should return a value.

    package main
    
    import (
    	"fmt"
    	gof "github.com/razorpay/go-financial"
    )
    
    func main() {
    	pmt := gof.Pmt(0, 120, 0, 120, 1)
    	fmt.Printf("pmt is %f\n", pmt)
    	// Should return -10
    	// e.g. from numpy:
    	// >>> numpy.pmt(0, 120, 0, 1200, 1)
            // -10.0
    }
    

    Note that numpy_financial handles the zero-rate case explicitly: https://github.com/numpy/numpy-financial/blob/master/numpy_financial/_financial.py#L239

    opened by bstpierre 1
  • Bump github.com/shopspring/decimal from 1.2.0 to 1.3.1

    Bump github.com/shopspring/decimal from 1.2.0 to 1.3.1

    Bumps github.com/shopspring/decimal from 1.2.0 to 1.3.1.

    Release notes

    Sourced from github.com/shopspring/decimal's releases.

    v1.3.1

    Full Changelog can be found in CHANGELOG.md

    New Contributors

    v1.3.0

    Full Changelog can be found in CHANGELOG.md

    New Contributors

    Changelog

    Sourced from github.com/shopspring/decimal's changelog.

    Decimal v1.3.1

    ENHANCEMENTS

    • Reduce memory allocation in case of initialization from big.Int #252

    BUGFIXES

    • Fix binary marshalling of decimal zero value #253

    Decimal v1.3.0

    FEATURES

    • Add NewFromFormattedString initializer #184
    • Add NewNullDecimal initializer #234
    • Add implementation of natural exponent function (Taylor, Hull-Abraham) #229
    • Add RoundUp, RoundDown, RoundCeil, RoundFloor methods #196 #202 #220
    • Add XML support for NullDecimal #192
    • Add IsInteger method #179
    • Add Copy helper method #123
    • Add InexactFloat64 helper method #205
    • Add CoefficientInt64 helper method #244

    ENHANCEMENTS

    • Performance optimization of NewFromString init method #198
    • Performance optimization of Abs and Round methods #240
    • Additional tests (CI) for ppc64le architecture #188

    BUGFIXES

    • Fix rounding in FormatFloat fallback path (roundShortest method, fix taken from Go main repository) #161
    • Add slice range checks to UnmarshalBinary method #232
    Commits

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    dependencies 
    opened by dependabot[bot] 0
  • Bump github.com/go-echarts/go-echarts/v2 from 2.2.3 to 2.2.4

    Bump github.com/go-echarts/go-echarts/v2 from 2.2.3 to 2.2.4

    Bumps github.com/go-echarts/go-echarts/v2 from 2.2.3 to 2.2.4.

    Commits

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    dependencies 
    opened by dependabot[bot] 0
  • Bump github.com/smartystreets/assertions from 1.2.1 to 1.13.0

    Bump github.com/smartystreets/assertions from 1.2.1 to 1.13.0

    Bumps github.com/smartystreets/assertions from 1.2.1 to 1.13.0.

    Commits

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    dependencies 
    opened by dependabot[bot] 0
  • Financial Functions enhancement

    Financial Functions enhancement

    There exist various other financial functions (XIRR, Declining Balance, Slope, etc.) that are currently not mentioned in go-financials (these do not exist on numpy_financial either). Any plans on bringing some of the excel financial functions to go ?

    opened by thsubaku9 3
Releases(v1.1.0)
Owner
Razorpay
Neobanking for Businesses
Razorpay
Go library containing a collection of financial functions for time value of money (annuities), cash flow, interest rate conversions, bonds and depreciation calculations.

go-finance Go library containing a collection of financial functions for time value of money (annuities), cash flow, interest rate conversions, bonds

Alejandro Pedraza 142 Sep 19, 2022
Simple and easy to use client for stock market, forex and crypto data from finnhub.io written in Go. Access real-time financial market data from 60+ stock exchanges, 10 forex brokers, and 15+ crypto exchanges

go-finnhub Simple and easy to use client for stock, forex and crpyto data from finnhub.io written in Go. Access real-time market data from 60+ stock e

Miles Croxford 76 Sep 26, 2022
money and currency formatting for golang

accounting - money and currency formatting for golang accounting is a library for money and currency formatting. (inspired by accounting.js) Quick Sta

Kyoung-chan Lee 765 Sep 13, 2022
Golang library for querying and parsing OFX

OFXGo OFXGo is a library for querying OFX servers and/or parsing the responses. It also provides an example command-line client to demonstrate the use

Aaron Lindsay 110 Sep 26, 2022
This is a backend of wallet app for personal spending and income management.

wallet-ap-graphql this is a backend of wallet app for personal spending and income management. technologies used: golang, graphql, postgres, redis, jw

Jamshid Ismoilov 0 Jan 12, 2022
🏛 A scriptable financial ledger, designed to make it easy to model complex financial transactions

Numary Ledger Numary is a programmable financial ledger that wants to make building financial apps safe, fun and cheap. Building financial software is

Numary 434 Sep 16, 2022
Go library containing a collection of financial functions for time value of money (annuities), cash flow, interest rate conversions, bonds and depreciation calculations.

go-finance Go library containing a collection of financial functions for time value of money (annuities), cash flow, interest rate conversions, bonds

Alejandro Pedraza 142 Sep 19, 2022
Simple and easy to use client for stock market, forex and crypto data from finnhub.io written in Go. Access real-time financial market data from 60+ stock exchanges, 10 forex brokers, and 15+ crypto exchanges

go-finnhub Simple and easy to use client for stock, forex and crpyto data from finnhub.io written in Go. Access real-time market data from 60+ stock e

Miles Croxford 76 Sep 26, 2022
The official container networking plugin for both OECP of Alibaba Cloud and SOFAStack of Ant Financial Co.

Rama What is Rama? Rama is an open source container networking solution, integrated with Kubernetes and used officially by following well-known PaaS p

null 146 Sep 20, 2022
A distributed, proof of stake blockchain designed for the financial services industry.

Provenance Blockchain Provenance is a distributed, proof of stake blockchain designed for the financial services industry.

Provenance Blockchain, Inc. 59 Aug 9, 2022
LINE Financial Blockchain forked from gaia

LFB(LINE Financial Blockchain) This repository hosts LFB(LINE Financial Blockchain). This repository is forked from gaia at 2021-03-15. LFB is a mainn

LINE 31 Aug 4, 2022
Websocket API Gateway that allows to subscribe on notifications about price changes of financial instruments

websocket-api-gateway Websocket API Gateway that allows to subscribe on notifications about price changes of financial instruments To test connection

null 1 Dec 5, 2021
Global Financial Transaction Network Services

Global Financial Transaction Network Services This code was developed at IBM during 2017-2020, and contributed to open source in September 2021. Overv

null 15 Aug 11, 2022
Desenvolvendo-Sistema-Planejamento-Financeiro-GoLang - Developing a Financial Planning System with Golang

dio-expert-session-finance Pré Desenvolvimento Vamos criar um projeto no Github

hugoportela 1 Jan 27, 2022
Diamauroa2.13.0 - Creating equitable access to the global financial system

Creating equitable access to the global financial system Diamnet Go Monorepo Thi

Java Developer 0 Feb 1, 2022
A little websocket TCP proxy to let browsers talk to a fixed port on arbitrary hosts. Built for Gemini (gemini://, port 1965)

Kepler A little websocket TCP proxy built to let Amfora talk to Gemini servers when running in a browser. Usage $ git clone https://github.com/awfulco

mooff 1 May 27, 2022
Port-proxy - Temporary expose port for remote connections

Port proxy util Temporary expose port for remote connections. E.g. database/wind

Vadym S 1 Jan 27, 2022
Package iter provides generic, lazy iterators, functions for producing them from primitive types, as well as functions and methods for transforming and consuming them.

iter Package iter provides generic, lazy iterators, functions for producing them from primitive types, as well as functions and methods for transformi

Matthew Toohey 25 Aug 19, 2022
YoMo 45 Aug 25, 2022