Struct StructuredNote
pub struct StructuredNote {
pub currency: Currency,
pub collateral: CollateralSpec,
pub face: f64,
pub maturity: NaiveDate,
pub coupons: Leg,
pub issuer: Option<CreditCurveId>,
pub security_spread: Option<String>,
indices: Vec<String>,
}Expand description
A note paying a received leg of composed coupons and redeeming its face on the last payment date, discounted on its collateral.
Fields§
§currency: CurrencyThe note’s currency, its coupons’.
collateral: CollateralSpecThe discounting key.
face: f64The face redeemed at maturity.
maturity: NaiveDateThe maturity: the leg’s last payment date, where the face is redeemed.
coupons: LegThe coupons and the redemption, received.
issuer: Option<CreditCurveId>The issuer, when the note is valued risky: each flow weighted by its survival, recovery on the face paid within each coupon period.
security_spread: Option<String>A security-spread key composed onto the discounting — never onto the projection.
indices: Vec<String>Every index the coupons read, each once in the order read: the first two declared in the projection slots, the rest in the basket.
Implementations§
§impl StructuredNote
impl StructuredNote
pub fn new(
coupons: &Leg,
face: f64,
collateral: CollateralSpec,
) -> Result<Self, StructuredNoteError>
pub fn new( coupons: &Leg, face: f64, collateral: CollateralSpec, ) -> Result<Self, StructuredNoteError>
A note paying coupons and redeeming face on their last payment
date, discounted on collateral.
§Errors
StructuredNoteError for an empty, paid or accumulating leg, or a
face that is not positive.
pub fn issued_by(self, issuer: CreditCurveId) -> Self
pub fn issued_by(self, issuer: CreditCurveId) -> Self
Tags the note to issuer’s credit: each promised flow pays only if
the issuer survives to its date, and a default within a coupon period
pays the market’s recovery on the face at the period’s midpoint.
pub fn spread_by(self, key: impl Into<String>) -> Self
pub fn spread_by(self, key: impl Into<String>) -> Self
Composes the security spread under key onto the note’s discounting.
The coupons still project off the risk-free curves: the spread marks
what the issuer’s promise is worth, not where its indices fix.
fn default_from(&self, as_of: NaiveDate) -> NaiveDate
fn default_from(&self, as_of: NaiveDate) -> NaiveDate
Where the note’s default walk begins: the valuation date, or the first accrual start of a note that has not yet begun accruing.
fn projected_flows<R: Scalar>(
&self,
curves: &PricingView<'_, R>,
as_of: NaiveDate,
) -> Result<Vec<(NaiveDate, R)>, PricingError>
fn projected_flows<R: Scalar>( &self, curves: &PricingView<'_, R>, as_of: NaiveDate, ) -> Result<Vec<(NaiveDate, R)>, PricingError>
Each unpaid flow, the redemption among them, projected through
curves: the amount the leg walk would discount, collar and CMS
convexity included.
fn risky_npv<R: Scalar>(
&self,
view: &PricingView<'_, R>,
curves: &PricingView<'_, R>,
) -> Result<R, PricingError>
fn risky_npv<R: Scalar>( &self, view: &PricingView<'_, R>, curves: &PricingView<'_, R>, ) -> Result<R, PricingError>
The survival-weighted value: the flows at S(t)·DF(t), and recovery on
the face over each coupon period [d₀, d₁] at
R·F·(S(d₀) − S(d₁))·DF(midpoint), the first period starting at
default_from.
pub fn dirty_price_with<R: Scalar>(
&self,
view: &PricingView<'_, R>,
) -> Result<R, PricingError>
pub fn dirty_price_with<R: Scalar>( &self, view: &PricingView<'_, R>, ) -> Result<R, PricingError>
Trait Implementations§
§impl Clone for StructuredNote
impl Clone for StructuredNote
§fn clone(&self) -> StructuredNote
fn clone(&self) -> StructuredNote
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 StructuredNote
impl Debug for StructuredNote
§impl PartialEq for StructuredNote
impl PartialEq for StructuredNote
§impl<R: Scalar> Priceable<R> for StructuredNote
impl<R: Scalar> Priceable<R> for StructuredNote
§fn npv(&self, view: &PricingView<'_, R>) -> Result<R, PricingError>
fn npv(&self, view: &PricingView<'_, R>) -> Result<R, PricingError>
The leg, the redemption among its coupons, each coupon read through the view: its own index’s curve, and the vols its payoff reads. A spread-marked note discounts on the spread-composed curve and projects through the spread-free view; a tagged one is survival-weighted with recovery of face.
§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 StructuredNote
impl PricingRiskFactors for StructuredNote
§fn risk_factors(&self) -> Result<RiskFactors<'_>, PricingError>
fn risk_factors(&self) -> Result<RiskFactors<'_>, PricingError>
Read off the coupons: the discount curve; every projection they read, the first two in their slots and the rest in the basket; the cap vols an optioned IBOR or overnight coupon or a range accrual reads; the swaption vols a CMS coupon reads, and the correlation of a CMS spread coupon on the market’s mark; the price index a CPI coupon reads.
§impl Product for StructuredNote
impl Product for StructuredNote
§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.