Bond Price with YTM/zerocurve & NPV, IRR, annuities
Project description
Overview
This package provides bond pricing functions as well as basic NPV/IRR functions. Bond valuation can be done using an yield to maturity or using a zero yield curve. There is a convenience function to construct a zero yield curve from a few points on the par bond or zero yield curve or from Nelson Siegel parameters.
The documentation is available at https://bondpricing.readthedocs.io/
The bond valuation functions can be used in two modes:

The first mode is similar to spreadsheet bond pricing functions. The settlement date and maturity date are given as dates and the software calculates the time to maturity and to each coupon payment date from these dates. For any
daycount
other than simple counting of days (ACT/365 in ISDA terminology), this packages relies on theisda_daycounters
module that can be downloaded from https://github.com/miradulo/isda_daycounters 
Maturity can be given in years (the
settle
parameter is set toNone
and is assumed to be time 0) and there are no dates at all. This mode is particularly convenient to price par bonds or price other bonds on issue date or coupon dates. For example, finding the price of a 7 year 3.5% coupon bond if the prevailing yield is 3.65% is easier in this mode as the maturity is simply given as 7.0 instead of providing a maturity date and specifying today's date. Using this mode between coupon dates is not so easy as the user has to basically compute the day count and year fraction and provide the maturity as say 6.7 years. 
Bond Valuation
 Bond price using YTM (
bond_price
) or using zero yield curve (zero_curve_bond_price
)  Accrued interest and dirty bond prices using YTM (
bond_price_breakup
) or using zero yield curve (zero_curve_bond_price_breakup
)  Duration using YTM (
bond_duration
)  Yield to maturity (
bond_yield
).
 Bond price using YTM (

Zero curve construction
 bootstrap zero yields from par yields (
par_yld_to_zero
) or vice versa (zero_to_par
)  compute zero rates from Nelson Siegel parameters (
nelson_siegel_zero_rate
)  construct zero prices from par or zero yields at selected knot points using a cubic spline or assuming a flat yield curve (
make_zero_price_fun
)
 bootstrap zero yields from par yields (

Present Value functions
 Net Present Value (
npv
)  Internal Rate of Return (
irr
)  Duration (
duration
). These functions allow different compounding frequencies: for example, the cash flows may be monthly while the interest rate is semiannually compounded. The functionequiv_rate
converts between different compounding frequencies.
 Net Present Value (

Annuity functions
 Annuity present value (
annuity_pv
)  Future value (
annuity_fv
)  Implied interest rate (
annuity_rate
)  Number of periods to achieve given present value or terminal value (
annuity_periods
).  Periodic instalment to achieve given present value or terminal value (
annuity_instalment
).  Breakup of instalment into principal and interest (
annuity_instalment_breakup
)
In these functions also, the cash flow frequency may be different from the compounding frequency.
 Annuity present value (
Reducing Dependencies
This module requires numpy
, pandas
and scipy
. In some environments, installing scipy
may be difficult, and only a couple of functions (the newton
root finder and CubicSpline
interpolation) are actually needed from the huge scipy
package. So a provision has been made to avoid scipy
with some loss of functionality (the newton
root finder is replaced by a less sophisticated root bracketing and bisection algorithm and CubicSpline
interpolation is replaced by the much cruder linear interpolation). At run time, the module checks for the availability of scipy
and uses the cruder methods (with a suitable warning) if scipy
is not available.
To install this package without pulling in scipy
as a dependency, do the following:
git clone https://github.com/jrvarma/bond_pricing.git
export no_scipy=1
pip install bond_pricing
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Hashes for bond_pricing0.7.1py3noneany.whl
Algorithm  Hash digest  

SHA256  f8cd92ef9328f6edbed7225f5552bb1e4b3331b1439a35132b4ea5a2d67b9823 

MD5  036c3d34716811abf1a8fa07106f647a 

BLAKE2b256  870034099062de3c3f59f940c41137a2d8114ab4ec67f9286ef07d87c2a5b58e 