Skip to main content

FixedRateBond

Struct FixedRateBond 

Source
pub struct FixedRateBond { /* private fields */ }
Expand description

A fixed-rate bond: a nominal, a coupon rate, and the schedule that says when interest accrues and when it is paid.

The coupon of a period is face_value * coupon_rate * yearFraction(period) under the bond’s own day count. That is the convention itself doing the work rather than a fixed rate / frequency amount: under 30/360 both give the same number, while under an actual day count a 184-day half-year pays more than a 181-day one, as it should. Accrued interest uses the same expression over the part of the period already elapsed, so accrual and coupon can never disagree.

Discounting uses the payment dates — money moves then — while accrual uses the unadjusted period boundaries; see CouponSchedule.

Implementations§

Source§

impl FixedRateBond

Source

pub fn new( face_value: f64, coupon_rate: f64, frequency: u32, schedule: CouponSchedule, day_count: DayCountConvention, ) -> Result<Self, FinanceError>

Source

pub fn schedule(&self) -> &CouponSchedule

Source

pub fn face_value(&self) -> f64

Source

pub fn coupon_amount(&self, index: usize) -> Option<f64>

Coupon paid for period index, from the day count over that period.

Source

pub fn accrued_interest(&self, settlement: Date) -> f64

Interest earned but not yet paid at settlement.

Zero when settlement falls on a period boundary — the coupon for the period that just ended has been paid, and the new one has not started accruing. Zero as well outside the schedule entirely.

Source

pub fn cashflows(&self, settlement: Date) -> Vec<Cashflow>

Every payment still outstanding after settlement, in order: the remaining coupons, with the nominal added to the last one.

A coupon whose payment date equals settlement is not outstanding — it is paid that day, which is also why accrued interest is zero there.

Source

pub fn price( &self, settlement: Date, ytm: f64, ) -> Result<BondPricingResult, FinanceError>

Prices the bond at settlement for a given yield, compounded at the coupon frequency.

Every figure comes from the same cashflows: dirty price is their present value, clean price is that minus accrued interest, Macaulay duration their present-value-weighted time, and DV01 follows from dirty price and modified duration.

Source

pub fn yield_to_maturity( &self, settlement: Date, clean_price: f64, ) -> Result<f64, FinanceError>

Inverts FixedRateBond::price: the yield at which the bond’s clean price equals clean_price.

Trait Implementations§

Source§

impl Clone for FixedRateBond

Source§

fn clone(&self) -> FixedRateBond

Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for FixedRateBond

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl<'de> Deserialize<'de> for FixedRateBond

Source§

fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>
where __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more
Source§

impl PartialEq for FixedRateBond

Source§

fn eq(&self, other: &FixedRateBond) -> bool

Equality operator ==. Read more
1.0.0 (const: unstable) · Source§

fn ne(&self, other: &Rhs) -> bool

Inequality operator !=. Read more
Source§

impl Serialize for FixedRateBond

Source§

fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>
where __S: Serializer,

Serialize this value into the given Serde serializer. Read more
Source§

impl StructuralPartialEq for FixedRateBond

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> DeserializeOwned for T
where T: for<'de> Deserialize<'de>,

Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = !

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, !>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.