Interest Rates & Compounding
Interest rate mathematics translates nominal rates into time value of money discount factors and compound factors.
Compounding Conventions
Given annual interest rate and year fraction :
1. Compounded ( times per year)
2. Continuous Compounding
3. Simple Compounding
4. Simple Then Compounded
Used for money market discount instruments with stub periods: simple interest for , compounded thereafter.
Equivalent Rate Conversions
To convert a rate with frequency to an equivalent rate with frequency such that their discount factors match:
Rust Code Example
use sabiquant::core::rates::{InterestRate, Compounding};use sabiquant::core::Frequency;
fn main() -> Result<(), Box<dyn std::error::Error>> { // 5.0% semi-annually compounded rate let rate = InterestRate::new(0.05, Compounding::Compounded, Frequency::SemiAnnual);
let time = 2.5; // 2.5 years
// Compound and discount factors let compound_factor = rate.compound_factor(time); let discount_factor = rate.discount_factor(time);
println!("Compound Factor (2.5Y): {:.6}", compound_factor); println!("Discount Factor (2.5Y): {:.6}", discount_factor);
// Convert to equivalent continuously compounded rate let continuous_rate = rate.equivalent_rate(Compounding::Continuous, Frequency::Annual, time)?; println!("Continuous Equivalent: {:.5}%", continuous_rate.rate() * 100.0);
// Convert to quarterly compounded rate let quarterly_rate = rate.equivalent_rate(Compounding::Compounded, Frequency::Quarterly, time)?; println!("Quarterly Equivalent: {:.5}%", quarterly_rate.rate() * 100.0);
Ok(())}