Crate bonds_rs

source ·
Expand description

Bonds_rs Crate

This crate provides structures and methods for evaluating and dealing with various corporate bonds.

Bond Trait

The Bond trait defines the behavior of a financial bond.

Methods

  • fn coupon_payment(&self) -> f64: Computes the total coupon payments over the bond’s lifespan.
  • fn present_value(&self) -> f64: Calculates the present value of the bond.
  • fn holding_period_return(&self) -> f64: Computes the holding period return of the bond.
  • fn yeild_to_maturity(&self) -> f64: Calculates the yield to maturity of the bond.

CorporateBond Struct

The CorporateBond struct represents a corporate bond, implementing the Bond trait.

Fields

  • coupon_rate: The annual coupon rate of the bond.
  • discount_rate: The annual discount rate (interest rate) used in bond valuation.
  • maturity: The maturity period of the bond in years.
  • face_value: The nominal value of the bond.
  • compounding_freq: The frequency at which interest is compounded (e.g., Annual, Semiannual, etc.).
  • buying_price: The buying price of the bond (optional).
  • current_selling_price: The current selling price of the bond (optional).
  • effective_annual_rate: The effective annual rate based on the compounding frequency.

Methods

  • fn new(...) (constructor): Creates a new CorporateBond instance with the specified parameters.
  • fn coupon_payment(&self) -> f64: Computes the total coupon payments over the bond’s lifespan.
  • fn present_value(&self) -> f64: Calculates the present value of the bond.
  • fn holding_period_return(&self) -> f64: Computes the holding period return of the bond.
  • fn yeild_to_maturity(&self) -> f64: Calculates the yield to maturity of the bond.

CompoundingFreq Enum

The CompoundingFreq enum represents the compounding frequency of interest rates for a bond.

Variants

  • Annual: Interest is compounded annually.
  • Semiannual: Interest is compounded semiannually.
  • Quarterly: Interest is compounded quarterly.
  • Monthly: Interest is compounded monthly.

Examples

use bonds_rs::{CorporateBond, CompoundingFreq, Bond};

fn main() {
    let bond = CorporateBond::new(
        5.0, //coupon rate (in %)
        3.0, //discount rate (in %)
        2,   //maturity (in years)
        1000.0, //face value
        CompoundingFreq::Biannual,
        Some(1000.0), //buying price
        Some(942.1843778588191), //current selling price
    );

    assert_eq!(bond.coupon_payment(), 96.35961618879344);
    assert_eq!(bond.present_value(), 1038.543846475518);
    assert_eq!(bond.yeild_to_maturity(), 3.022491931915283);
    assert_eq!(bond.holding_period_return(), 3.854399404761266);
    }

Structs

Enums

Traits