QuantLib: a free/open-source library for quantitative finance
Reference manual - version 1.40
Loading...
Searching...
No Matches
BondForward Class Reference

Forward contract on a bond More...

#include <ql/instruments/bondforward.hpp>

Inheritance diagram for BondForward:

Public Member Functions

Constructors
 BondForward (const Date &valueDate, const Date &maturityDate, Position::Type type, Real strike, Natural settlementDays, const DayCounter &dayCounter, const Calendar &calendar, BusinessDayConvention businessDayConvention, const ext::shared_ptr< Bond > &bond, const Handle< YieldTermStructure > &discountCurve=Handle< YieldTermStructure >(), const Handle< YieldTermStructure > &incomeDiscountCurve=Handle< YieldTermStructure >())
Public Member Functions inherited from Forward
virtual Date settlementDate () const
const Calendarcalendar () const
BusinessDayConvention businessDayConvention () const
const DayCounterdayCounter () const
Handle< YieldTermStructurediscountCurve () const
 term structure relevant to the contract (e.g. repo curve)
Handle< YieldTermStructureincomeDiscountCurve () const
 term structure that discounts the underlying's income cash flows
bool isExpired () const override
 returns whether the instrument is still tradable.
virtual Real forwardValue () const
 forward value/price of underlying, discounting income/dividends
InterestRate impliedYield (Real underlyingSpotValue, Real forwardValue, Date settlementDate, Compounding compoundingConvention, const DayCounter &dayCounter)
Public Member Functions inherited from Instrument
Real NPV () const
 returns the net present value of the instrument.
Real errorEstimate () const
 returns the error estimate on the NPV when available.
const DatevaluationDate () const
 returns the date the net present value refers to.
template<typename T>
result (const std::string &tag) const
 returns any additional result returned by the pricing engine.
const std::map< std::string, ext::any > & additionalResults () const
 returns all additional result returned by the pricing engine.
void setPricingEngine (const ext::shared_ptr< PricingEngine > &)
 set the pricing engine to be used.
virtual void setupArguments (PricingEngine::arguments *) const
virtual void fetchResults (const PricingEngine::results *) const
Public Member Functions inherited from LazyObject
void update () override
bool isCalculated () const
void forwardFirstNotificationOnly ()
void alwaysForwardNotifications ()
void recalculate ()
void freeze ()
void unfreeze ()
Public Member Functions inherited from Observable
 Observable (const Observable &)
Observableoperator= (const Observable &)
 Observable (Observable &&)=delete
Observableoperator= (Observable &&)=delete
void notifyObservers ()
Public Member Functions inherited from Observer
 Observer (const Observer &)
Observeroperator= (const Observer &)
std::pair< iterator, bool > registerWith (const ext::shared_ptr< Observable > &)
void registerWithObservables (const ext::shared_ptr< Observer > &)
Size unregisterWith (const ext::shared_ptr< Observable > &)
void unregisterWithAll ()
virtual void deepUpdate ()

Calculations

ext::shared_ptr< Bondbond_
Real forwardPrice () const
 (dirty) forward bond price
Real cleanForwardPrice () const
 (dirty) forward bond price minus accrued on bond at delivery
Real spotIncome (const Handle< YieldTermStructure > &incomeDiscountCurve) const override
 NPV of bond coupons discounted using incomeDiscountCurve.
Real spotValue () const override
 NPV of underlying bond.
void performCalculations () const override

Additional Inherited Members

Public Types inherited from Observer
typedef set_type::iterator iterator
 Forward (DayCounter dayCounter, Calendar calendar, BusinessDayConvention businessDayConvention, Natural settlementDays, ext::shared_ptr< Payoff > payoff, const Date &valueDate, const Date &maturityDate, Handle< YieldTermStructure > discountCurve=Handle< YieldTermStructure >())
void performCalculations () const override
Protected Member Functions inherited from Instrument
void calculate () const override
virtual void setupExpired () const
void performCalculations () const override
Real underlyingIncome_
Real underlyingSpotValue_
DayCounter dayCounter_
Calendar calendar_
BusinessDayConvention businessDayConvention_
Natural settlementDays_
ext::shared_ptr< Payoffpayoff_
Date valueDate_
Date maturityDate_
 maturityDate of the forward contract or delivery date of underlying
Handle< YieldTermStructurediscountCurve_
Handle< YieldTermStructureincomeDiscountCurve_
Protected Attributes inherited from Instrument
Real NPV_
Real errorEstimate_
Date valuationDate_
std::map< std::string, ext::any > additionalResults_
ext::shared_ptr< PricingEngineengine_
bool calculated_ = false
bool frozen_ = false
bool alwaysForward_

Detailed Description

Forward contract on a bond

  1. valueDate refers to the settlement date of the bond forward contract. maturityDate is the delivery (or repurchase) date for the underlying bond (not the bond's maturity date).
  2. Relevant formulas used in the calculations ( \(P\) refers to a price):

    a. \( P_{CleanFwd}(t) = P_{DirtyFwd}(t) - AI(t=deliveryDate) \) where \( AI \) refers to the accrued interest on the underlying bond.

    b. \( P_{DirtyFwd}(t) = \frac{P_{DirtySpot}(t) - SpotIncome(t)} {discountCurve->discount(t=deliveryDate)} \)

    c. \( SpotIncome(t) = \sum_i \left( CF_i \times incomeDiscountCurve->discount(t_i) \right) \) where \( CF_i \) represents the ith bond cash flow (coupon payment) associated with the underlying bond falling between the settlementDate and the deliveryDate. (Note the two different discount curves used in b. and c.)

    Warning
    This class still needs to be rigorously tested
Examples
Repo.cpp.

Constructor & Destructor Documentation

◆ BondForward()

BondForward ( const Date & valueDate,
const Date & maturityDate,
Position::Type type,
Real strike,
Natural settlementDays,
const DayCounter & dayCounter,
const Calendar & calendar,
BusinessDayConvention businessDayConvention,
const ext::shared_ptr< Bond > & bond,
const Handle< YieldTermStructure > & discountCurve = HandleYieldTermStructure >(),
const Handle< YieldTermStructure > & incomeDiscountCurve = HandleYieldTermStructure >() )

If strike is given in the constructor, can calculate the NPV of the contract via NPV().

If strike/forward price is desired, it can be obtained via forwardPrice(). In this case, the strike variable in the constructor is irrelevant and will be ignored.

Member Function Documentation

◆ spotIncome()

Real spotIncome ( const Handle< YieldTermStructure > & incomeDiscountCurve) const
overridevirtual

NPV of bond coupons discounted using incomeDiscountCurve.

Here only coupons between max(evaluation date,settlement date) and maturity date of bond forward contract are considered income.

Implements Forward.

Examples
Repo.cpp.

◆ spotValue()

Real spotValue ( ) const
overridevirtual

NPV of underlying bond.

Implements Forward.

◆ performCalculations()

void performCalculations ( ) const
overrideprotectedvirtual

This method must implement any calculations which must be (re)done in order to calculate the desired results.

Implements LazyObject.