Struct CallableBond
pub struct CallableBond {
pub bond: FixedRateBond,
pub schedule: Vec<Callability>,
pub collateral: CollateralSpec,
pub issuer: Option<CreditCurveId>,
pub security_spread: Option<String>,
pub american: bool,
}Expand description
A callable (or puttable) bond: a bullet host plus a schedule of exercise rights. Every field is passive contract data; an empty schedule is the bullet bond, and prices identically to it.
Fields§
§bond: FixedRateBondThe bullet host.
schedule: Vec<Callability>The exercise schedule, possibly empty.
collateral: CollateralSpecThe discounting key the bond is priced under.
issuer: Option<CreditCurveId>The issuer, when the bond is valued risky: every promised flow is weighted by the entity’s survival and a recovery-of-face leg is added. Credit belongs on the bullet — a tagged bond with an exercisable schedule is refused rather than priced on the lattice.
security_spread: Option<String>A security-spread key composed onto the discounting, independent of (and stacking with) the survival weighting.
american: boolWhether each right runs continuously from its date to the next
entry’s: see with_american_exercise.
Implementations§
§impl CallableBond
impl CallableBond
pub fn new(bond: FixedRateBond, schedule: Vec<Callability>) -> Self
pub fn new(bond: FixedRateBond, schedule: Vec<Callability>) -> Self
A callable bond discounted on its own currency’s cash collateral.
pub fn with_american_exercise(self) -> Self
pub fn with_american_exercise(self) -> Self
This bond exercising American: each entry’s right runs from its date up to the slice before the next entry’s, exercisable on every lattice slice at the entry’s price plus that day’s accrued when the price is clean, and the last entry on its date alone. The default exercises on the dates alone.
pub fn issued_by(self, issuer: CreditCurveId) -> Self
pub fn issued_by(self, issuer: CreditCurveId) -> Self
Tags the bond to issuer’s credit.
§impl CallableBond
impl CallableBond
pub fn yield_to_call(
&self,
dirty: f64,
entry: &Callability,
settlement: NaiveDate,
basis: YieldBasis,
) -> Result<f64, CallYieldError>
pub fn yield_to_call( &self, dirty: f64, entry: &Callability, settlement: NaiveDate, basis: YieldBasis, ) -> Result<f64, CallYieldError>
The yield to one exercise entry: the yield repricing the scenario
that redeems on the entry’s date at its price, over basis.
§Errors
CallYieldError for a make-whole or past entry, or an unbracketable
price.
pub fn yield_to_maturity_scenario(
&self,
dirty: f64,
settlement: NaiveDate,
basis: YieldBasis,
) -> Result<f64, YieldSolveError>
pub fn yield_to_maturity_scenario( &self, dirty: f64, settlement: NaiveDate, basis: YieldBasis, ) -> Result<f64, YieldSolveError>
The yield of the redemption-at-par-on-maturity scenario over basis.
§Errors
YieldSolveError where the price cannot be bracketed.
pub fn yield_to_worst(
&self,
dirty: f64,
settlement: NaiveDate,
basis: YieldBasis,
) -> Result<(NaiveDate, f64), YieldSolveError>
pub fn yield_to_worst( &self, dirty: f64, settlement: NaiveDate, basis: YieldBasis, ) -> Result<(NaiveDate, f64), YieldSolveError>
The lowest yield over the maturity scenario and every exercise strictly
after settlement, with the date attaining it.
§Errors
YieldSolveError where a scenario’s price cannot be bracketed.
§impl CallableBond
impl CallableBond
pub fn effective_risk(
&self,
market: &MarketContext,
oas: f64,
) -> Result<LatticeMoments, PricingError>
pub fn effective_risk( &self, market: &MarketContext, oas: f64, ) -> Result<LatticeMoments, PricingError>
The price and its first two sensitivities to a parallel continuous
shift of the discounting at oas, from one lattice pass — effective
duration, convexity and DV01 read off one LatticeMoments.
§Errors
PricingError where the market lacks the bond’s curves or the
Hull-White parameters.
fn has_exercisable(&self, cut: NaiveDate) -> bool
fn has_exercisable(&self, cut: NaiveDate) -> bool
Whether any entry can actually exercise before maturity after cut —
make-whole entries cannot, and neither can entries on or past maturity.
fn lattice_grid(
&self,
valuation: NaiveDate,
flows: &[(NaiveDate, f64)],
) -> Result<TimeGrid, PricingError>
fn lattice_grid( &self, valuation: NaiveDate, flows: &[(NaiveDate, f64)], ) -> Result<TimeGrid, PricingError>
The grid every callable valuation runs on: the bond’s own flow dates and exercisable call dates as exact slices, at the default density.
flows are the bond’s remaining dated flows after valuation, built
once by the caller and shared with assemble.
The grid runs to the last mandatory date, not to the maturity. Under
a payment calendar the final payment can roll past the maturity — a
bond maturing on a Saturday pays on the Monday — and
TimeGrid::build_with_mandatory keeps only the anchors strictly
inside its horizon, so a horizon at the maturity would drop that payment
and assemble would then fail to find its slice. Where nothing rolls
the last mandatory date is the maturity, so this changes no grid that
was already being built.
Trait Implementations§
§impl Clone for CallableBond
impl Clone for CallableBond
§fn clone(&self) -> CallableBond
fn clone(&self) -> CallableBond
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read more§impl Debug for CallableBond
impl Debug for CallableBond
§impl PartialEq for CallableBond
impl PartialEq for CallableBond
§impl<R: Scalar> Priceable<R> for CallableBond
impl<R: Scalar> Priceable<R> for CallableBond
§fn npv(&self, view: &PricingView<'_, R>) -> Result<R, PricingError>
fn npv(&self, view: &PricingView<'_, R>) -> Result<R, PricingError>
§fn par_rate(&self, _view: &PricingView<'_, R>) -> Result<R, PricingError>
fn par_rate(&self, _view: &PricingView<'_, R>) -> Result<R, PricingError>
§fn par_spread(&self, _view: &PricingView<'_, R>) -> Result<R, PricingError>
fn par_spread(&self, _view: &PricingView<'_, R>) -> Result<R, PricingError>
§impl PricingRiskFactors for CallableBond
impl PricingRiskFactors for CallableBond
§fn risk_factors(&self) -> Result<RiskFactors<'_>, PricingError>
fn risk_factors(&self) -> Result<RiskFactors<'_>, PricingError>
§impl Product for CallableBond
impl Product for CallableBond
§fn currency(&self) -> Currency
fn currency(&self) -> Currency
§fn contract_dates(&self) -> Vec<(&'static str, NaiveDate)>
fn contract_dates(&self) -> Vec<(&'static str, NaiveDate)>
(name, date) pairs —
exactly the dates its stated constructor takes, so a product built
through a derived form can be read back and rebuilt through the stated
one. Empty for a product with no stated form. No default: every
product states which it is — see AnyInstrument::contract_dates.§fn legs(&self) -> Option<Vec<&Leg>>
fn legs(&self) -> Option<Vec<&Leg>>
None
for a product that holds none — see AnyInstrument::legs. No
default: every product states which it is.§fn final_payment_date(&self) -> Option<NaiveDate>
fn final_payment_date(&self) -> Option<NaiveDate>
None for a product no ladder is built from.§fn restruck_at_rate(&self, _rate: f64) -> Option<AnyInstrument>
fn restruck_at_rate(&self, _rate: f64) -> Option<AnyInstrument>
rate — the scalar a par
calibration rung on it is quoted in — or None for a product that
carries no such scalar. What a quote scenario moves a rung to.§fn restruck_at_spread(&self, _spread: f64) -> Option<AnyInstrument>
fn restruck_at_spread(&self, _spread: f64) -> Option<AnyInstrument>
spread on its spread
leg, or None for a product that quotes none.