Finance Module
The finance module provides financial mathematics tools including interest theory, yield curves, and duration/convexity calculations.
Finance Module
Interest theory, yield curve construction, duration, and convexity measures.
This module provides tools for: - Interest rate calculations - Yield curve construction and analysis - Duration and convexity measures - Present value calculations - Bond pricing and analysis
- class actuneo.finance.DurationConvexity(yield_curve: YieldCurve | None = None)[source]
Bases:
objectA class for calculating duration and convexity measures for bonds and fixed income portfolios.
- __init__(yield_curve: YieldCurve | None = None)[source]
Initialize DurationConvexity calculator.
- Parameters:
yield_curve – YieldCurve instance for spot rate calculations
- bond_convexity(face_value: float, coupon_rate: float, maturity: float, yield_rate: float, frequency: int = 2) float[source]
Calculate convexity for a standard bond.
- Parameters:
face_value – Face value of the bond
coupon_rate – Annual coupon rate (decimal)
maturity – Time to maturity in years
yield_rate – Yield to maturity (decimal)
frequency – Coupon payment frequency per year
- Returns:
Convexity
- bond_duration(face_value: float, coupon_rate: float, maturity: float, yield_rate: float, frequency: int = 2) float[source]
Calculate Macaulay duration for a standard bond.
- Parameters:
face_value – Face value of the bond
coupon_rate – Annual coupon rate (decimal)
maturity – Time to maturity in years
yield_rate – Yield to maturity (decimal)
frequency – Coupon payment frequency per year
- Returns:
Macaulay duration
- convexity(cash_flows: List[float], times: List[float], yield_rate: float) float[source]
Calculate convexity.
- Parameters:
cash_flows – List of cash flow amounts
times – List of times when cash flows occur
yield_rate – Yield rate (decimal)
- Returns:
Convexity measure
- key_rate_duration(cash_flows: List[float], times: List[float], key_rates: List[float], yield_curve: YieldCurve) dict[source]
Calculate key rate durations.
- Parameters:
cash_flows – List of cash flow amounts
times – List of times when cash flows occur
key_rates – List of key rate maturities
yield_curve – YieldCurve instance
- Returns:
Dictionary of key rate durations
- macaulay_duration(cash_flows: List[float], times: List[float], yield_rate: float) float[source]
Calculate Macaulay duration.
- Parameters:
cash_flows – List of cash flow amounts
times – List of times when cash flows occur
yield_rate – Yield rate (decimal)
- Returns:
Macaulay duration
- modified_duration(cash_flows: List[float], times: List[float], yield_rate: float) float[source]
Calculate modified duration.
- Parameters:
cash_flows – List of cash flow amounts
times – List of times when cash flows occur
yield_rate – Yield rate (decimal)
- Returns:
Modified duration
- portfolio_duration(positions: List[dict], yield_rate: float | None = None) float[source]
Calculate portfolio duration.
- Parameters:
positions – List of position dictionaries with keys: ‘cash_flows’, ‘times’, ‘weight’ or ‘market_value’
yield_rate – Common yield rate for all positions
- Returns:
Portfolio duration (modified duration)
- price_change_approximation(duration: float, convexity: float, yield_change: float, current_price: float) float[source]
Approximate price change using duration-convexity approximation.
- Parameters:
duration – Modified duration
convexity – Convexity measure
yield_change – Change in yield (decimal)
current_price – Current bond price
- Returns:
Approximate price change
- class actuneo.finance.InterestTheory(interest_rate: float = 0.05, compounding_frequency: int = 1)[source]
Bases:
objectA class for performing various interest rate calculations and time value of money computations.
- __init__(interest_rate: float = 0.05, compounding_frequency: int = 1)[source]
Initialize InterestTheory with interest rate and compounding frequency.
- Parameters:
interest_rate – Annual interest rate (decimal)
compounding_frequency – Compounding frequency per year (1=annual, 2=semi-annual, etc.)
- annuity_future_value(payment: float, periods: int, interest_rate: float | None = None, immediate: bool = True) float[source]
Calculate future value of an annuity.
- Parameters:
payment – Periodic payment amount
periods – Number of periods
interest_rate – Override default interest rate
immediate – True for immediate annuity, False for annuity-due
- Returns:
Future value of annuity
- annuity_present_value(payment: float, periods: int, interest_rate: float | None = None, immediate: bool = True) float[source]
Calculate present value of an annuity.
- Parameters:
payment – Periodic payment amount
periods – Number of periods
interest_rate – Override default interest rate
immediate – True for immediate annuity, False for annuity-due
- Returns:
Present value of annuity
- effective_annual_rate(nominal_rate: float, compounding_freq: int) float[source]
Convert nominal rate to effective annual rate.
- Parameters:
nominal_rate – Nominal annual interest rate
compounding_freq – Compounding frequency per year
- Returns:
Effective annual rate
- future_value(present_value: float, periods: int | float, interest_rate: float | None = None) float[source]
Calculate future value of a present amount.
- Parameters:
present_value – Present value amount
periods – Number of periods
interest_rate – Override default interest rate
- Returns:
Future value
- inflation_adjusted_value(nominal_value: float, inflation_rate: float, periods: int | float) float[source]
Calculate inflation-adjusted (real) value.
- Parameters:
nominal_value – Nominal value
inflation_rate – Annual inflation rate
periods – Number of periods
- Returns:
Real value adjusted for inflation
- loan_balance(principal: float, periods: int, payments_made: int, interest_rate: float | None = None) float[source]
Calculate remaining loan balance after certain number of payments.
- Parameters:
principal – Original loan principal
periods – Total number of periods
payments_made – Number of payments already made
interest_rate – Override default interest rate
- Returns:
Remaining balance
- loan_payment(principal: float, periods: int, interest_rate: float | None = None) float[source]
Calculate periodic loan payment amount.
- Parameters:
principal – Loan principal amount
periods – Number of periods
interest_rate – Override default interest rate
- Returns:
Periodic payment amount
- nominal_rate(effective_rate: float, compounding_freq: int) float[source]
Convert effective annual rate to nominal rate.
- Parameters:
effective_rate – Effective annual interest rate
compounding_freq – Compounding frequency per year
- Returns:
Nominal annual rate
- class actuneo.finance.YieldCurve(maturities: List[float] | ndarray, yields: List[float] | ndarray, interpolation_method: str = 'linear')[source]
Bases:
objectA class for constructing and analyzing yield curves.
Supports various interpolation methods and provides tools for spot rates, forward rates, and yield curve analysis.
- __init__(maturities: List[float] | ndarray, yields: List[float] | ndarray, interpolation_method: str = 'linear')[source]
Initialize YieldCurve with maturity and yield data.
- Parameters:
maturities – Time to maturity (in years)
yields – Yield rates (decimal)
interpolation_method – Method for interpolation (‘linear’, ‘cubic’, ‘nelson_siegel’)
- bootstrap_spot_rates() Dict[float, float][source]
Bootstrap spot rates from coupon bond prices. This is a simplified version assuming the yields are already spot rates.
- Returns:
Dictionary of maturity -> spot rate
- classmethod from_par_rates(maturities: List[float], par_rates: List[float], coupon_freq: int = 2) YieldCurve[source]
Create YieldCurve from par bond yields.
- Parameters:
maturities – Time to maturity
par_rates – Par bond yields
coupon_freq – Coupon payment frequency per year
- Returns:
YieldCurve instance
- classmethod from_zero_rates(maturities: List[float], zero_rates: List[float]) YieldCurve[source]
Create YieldCurve from zero rates.
- Parameters:
maturities – Time to maturity
zero_rates – Zero coupon rates
- Returns:
YieldCurve instance
- get_discount_factor(maturity: float) float[source]
Calculate discount factor for a given maturity.
- Parameters:
maturity – Time to maturity in years
- Returns:
Discount factor
- get_forward_rate(start_time: float, end_time: float) float[source]
Calculate forward rate between two time periods.
- Parameters:
start_time – Start time in years
end_time – End time in years
- Returns:
Forward rate from start_time to end_time
- get_spot_rate(maturity: float) float[source]
Get spot rate for a specific maturity. For simplicity, assumes spot rate equals yield for same maturity.
- Parameters:
maturity – Time to maturity in years
- Returns:
Spot rate
InterestTheory
- class actuneo.finance.InterestTheory(interest_rate: float = 0.05, compounding_frequency: int = 1)[source]
Bases:
objectA class for performing various interest rate calculations and time value of money computations.
- __init__(interest_rate: float = 0.05, compounding_frequency: int = 1)[source]
Initialize InterestTheory with interest rate and compounding frequency.
- Parameters:
interest_rate – Annual interest rate (decimal)
compounding_frequency – Compounding frequency per year (1=annual, 2=semi-annual, etc.)
- annuity_future_value(payment: float, periods: int, interest_rate: float | None = None, immediate: bool = True) float[source]
Calculate future value of an annuity.
- Parameters:
payment – Periodic payment amount
periods – Number of periods
interest_rate – Override default interest rate
immediate – True for immediate annuity, False for annuity-due
- Returns:
Future value of annuity
- annuity_present_value(payment: float, periods: int, interest_rate: float | None = None, immediate: bool = True) float[source]
Calculate present value of an annuity.
- Parameters:
payment – Periodic payment amount
periods – Number of periods
interest_rate – Override default interest rate
immediate – True for immediate annuity, False for annuity-due
- Returns:
Present value of annuity
- effective_annual_rate(nominal_rate: float, compounding_freq: int) float[source]
Convert nominal rate to effective annual rate.
- Parameters:
nominal_rate – Nominal annual interest rate
compounding_freq – Compounding frequency per year
- Returns:
Effective annual rate
- future_value(present_value: float, periods: int | float, interest_rate: float | None = None) float[source]
Calculate future value of a present amount.
- Parameters:
present_value – Present value amount
periods – Number of periods
interest_rate – Override default interest rate
- Returns:
Future value
- inflation_adjusted_value(nominal_value: float, inflation_rate: float, periods: int | float) float[source]
Calculate inflation-adjusted (real) value.
- Parameters:
nominal_value – Nominal value
inflation_rate – Annual inflation rate
periods – Number of periods
- Returns:
Real value adjusted for inflation
- loan_balance(principal: float, periods: int, payments_made: int, interest_rate: float | None = None) float[source]
Calculate remaining loan balance after certain number of payments.
- Parameters:
principal – Original loan principal
periods – Total number of periods
payments_made – Number of payments already made
interest_rate – Override default interest rate
- Returns:
Remaining balance
- loan_payment(principal: float, periods: int, interest_rate: float | None = None) float[source]
Calculate periodic loan payment amount.
- Parameters:
principal – Loan principal amount
periods – Number of periods
interest_rate – Override default interest rate
- Returns:
Periodic payment amount
- nominal_rate(effective_rate: float, compounding_freq: int) float[source]
Convert effective annual rate to nominal rate.
- Parameters:
effective_rate – Effective annual interest rate
compounding_freq – Compounding frequency per year
- Returns:
Nominal annual rate
YieldCurve
- class actuneo.finance.YieldCurve(maturities: List[float] | ndarray, yields: List[float] | ndarray, interpolation_method: str = 'linear')[source]
Bases:
objectA class for constructing and analyzing yield curves.
Supports various interpolation methods and provides tools for spot rates, forward rates, and yield curve analysis.
- __init__(maturities: List[float] | ndarray, yields: List[float] | ndarray, interpolation_method: str = 'linear')[source]
Initialize YieldCurve with maturity and yield data.
- Parameters:
maturities – Time to maturity (in years)
yields – Yield rates (decimal)
interpolation_method – Method for interpolation (‘linear’, ‘cubic’, ‘nelson_siegel’)
- bootstrap_spot_rates() Dict[float, float][source]
Bootstrap spot rates from coupon bond prices. This is a simplified version assuming the yields are already spot rates.
- Returns:
Dictionary of maturity -> spot rate
- classmethod from_par_rates(maturities: List[float], par_rates: List[float], coupon_freq: int = 2) YieldCurve[source]
Create YieldCurve from par bond yields.
- Parameters:
maturities – Time to maturity
par_rates – Par bond yields
coupon_freq – Coupon payment frequency per year
- Returns:
YieldCurve instance
- classmethod from_zero_rates(maturities: List[float], zero_rates: List[float]) YieldCurve[source]
Create YieldCurve from zero rates.
- Parameters:
maturities – Time to maturity
zero_rates – Zero coupon rates
- Returns:
YieldCurve instance
- get_discount_factor(maturity: float) float[source]
Calculate discount factor for a given maturity.
- Parameters:
maturity – Time to maturity in years
- Returns:
Discount factor
- get_forward_rate(start_time: float, end_time: float) float[source]
Calculate forward rate between two time periods.
- Parameters:
start_time – Start time in years
end_time – End time in years
- Returns:
Forward rate from start_time to end_time
- get_spot_rate(maturity: float) float[source]
Get spot rate for a specific maturity. For simplicity, assumes spot rate equals yield for same maturity.
- Parameters:
maturity – Time to maturity in years
- Returns:
Spot rate
DurationConvexity
- class actuneo.finance.DurationConvexity(yield_curve: YieldCurve | None = None)[source]
Bases:
objectA class for calculating duration and convexity measures for bonds and fixed income portfolios.
- __init__(yield_curve: YieldCurve | None = None)[source]
Initialize DurationConvexity calculator.
- Parameters:
yield_curve – YieldCurve instance for spot rate calculations
- bond_convexity(face_value: float, coupon_rate: float, maturity: float, yield_rate: float, frequency: int = 2) float[source]
Calculate convexity for a standard bond.
- Parameters:
face_value – Face value of the bond
coupon_rate – Annual coupon rate (decimal)
maturity – Time to maturity in years
yield_rate – Yield to maturity (decimal)
frequency – Coupon payment frequency per year
- Returns:
Convexity
- bond_duration(face_value: float, coupon_rate: float, maturity: float, yield_rate: float, frequency: int = 2) float[source]
Calculate Macaulay duration for a standard bond.
- Parameters:
face_value – Face value of the bond
coupon_rate – Annual coupon rate (decimal)
maturity – Time to maturity in years
yield_rate – Yield to maturity (decimal)
frequency – Coupon payment frequency per year
- Returns:
Macaulay duration
- convexity(cash_flows: List[float], times: List[float], yield_rate: float) float[source]
Calculate convexity.
- Parameters:
cash_flows – List of cash flow amounts
times – List of times when cash flows occur
yield_rate – Yield rate (decimal)
- Returns:
Convexity measure
- key_rate_duration(cash_flows: List[float], times: List[float], key_rates: List[float], yield_curve: YieldCurve) dict[source]
Calculate key rate durations.
- Parameters:
cash_flows – List of cash flow amounts
times – List of times when cash flows occur
key_rates – List of key rate maturities
yield_curve – YieldCurve instance
- Returns:
Dictionary of key rate durations
- macaulay_duration(cash_flows: List[float], times: List[float], yield_rate: float) float[source]
Calculate Macaulay duration.
- Parameters:
cash_flows – List of cash flow amounts
times – List of times when cash flows occur
yield_rate – Yield rate (decimal)
- Returns:
Macaulay duration
- modified_duration(cash_flows: List[float], times: List[float], yield_rate: float) float[source]
Calculate modified duration.
- Parameters:
cash_flows – List of cash flow amounts
times – List of times when cash flows occur
yield_rate – Yield rate (decimal)
- Returns:
Modified duration
- portfolio_duration(positions: List[dict], yield_rate: float | None = None) float[source]
Calculate portfolio duration.
- Parameters:
positions – List of position dictionaries with keys: ‘cash_flows’, ‘times’, ‘weight’ or ‘market_value’
yield_rate – Common yield rate for all positions
- Returns:
Portfolio duration (modified duration)
- price_change_approximation(duration: float, convexity: float, yield_change: float, current_price: float) float[source]
Approximate price change using duration-convexity approximation.
- Parameters:
duration – Modified duration
convexity – Convexity measure
yield_change – Change in yield (decimal)
current_price – Current bond price
- Returns:
Approximate price change