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
impl FixedRateBond
pub fn new( face_value: f64, coupon_rate: f64, frequency: u32, schedule: CouponSchedule, day_count: DayCountConvention, ) -> Result<Self, FinanceError>
pub fn schedule(&self) -> &CouponSchedule
pub fn face_value(&self) -> f64
Sourcepub fn coupon_amount(&self, index: usize) -> Option<f64>
pub fn coupon_amount(&self, index: usize) -> Option<f64>
Coupon paid for period index, from the day count over that period.
Sourcepub fn accrued_interest(&self, settlement: Date) -> f64
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.
Sourcepub fn cashflows(&self, settlement: Date) -> Vec<Cashflow>
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.
Sourcepub fn price(
&self,
settlement: Date,
ytm: f64,
) -> Result<BondPricingResult, FinanceError>
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.
Sourcepub fn yield_to_maturity(
&self,
settlement: Date,
clean_price: f64,
) -> Result<f64, FinanceError>
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
impl Clone for FixedRateBond
Source§fn clone(&self) -> FixedRateBond
fn clone(&self) -> FixedRateBond
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read more