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

Abstract base forward class. More...

#include <ql/instruments/forward.hpp>

Inheritance diagram for Forward:

Public Member Functions

Inspectors
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 spotValue () const =0
 returns spot value/price of an underlying financial instrument
virtual Real spotIncome (const Handle< YieldTermStructure > &incomeDiscountCurve) const =0
 NPV of income/dividends/storage-costs etc. of underlying instrument.
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

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_
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)
 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

Additional Inherited Members

Public Types inherited from Observer
typedef set_type::iterator iterator
Protected Member Functions inherited from Instrument
void calculate () const override
virtual void setupExpired () const
void performCalculations () const override
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

Abstract base forward class.

Derived classes must implement the virtual functions spotValue() (NPV or spot price) and spotIncome() associated with the specific relevant underlying (e.g. bond, stock, commodity, loan/deposit). These functions must be used to set the protected member variables underlyingSpotValue_ and underlyingIncome_ within performCalculations() in the derived class before the base-class implementation is called.

spotIncome() refers generically to the present value of coupons, dividends or storage costs.

discountCurve_ is the curve used to discount forward contract cash flows back to the evaluation day, as well as to obtain forward values for spot values/prices.

incomeDiscountCurve_, which for generality is not automatically set to the discountCurve_, is the curve used to discount future income/dividends/storage-costs etc back to the evaluation date.

Warning
This class still needs to be rigorously tested

Member Function Documentation

◆ isExpired()

bool isExpired ( ) const
overridevirtual

returns whether the instrument is still tradable.

Implements Instrument.

◆ spotValue()

virtual Real spotValue ( ) const
pure virtual

returns spot value/price of an underlying financial instrument

Implemented in BondForward.

◆ spotIncome()

virtual Real spotIncome ( const Handle< YieldTermStructure > & incomeDiscountCurve) const
pure virtual

NPV of income/dividends/storage-costs etc. of underlying instrument.

Implemented in BondForward.

◆ forwardValue()

virtual Real forwardValue ( ) const
virtual

forward value/price of underlying, discounting income/dividends

Note
if this is a bond forward price, is must be a dirty forward price.

◆ impliedYield()

InterestRate impliedYield ( Real underlyingSpotValue,
Real forwardValue,
Date settlementDate,
Compounding compoundingConvention,
const DayCounter & dayCounter )

Simple yield calculation based on underlying spot and forward values, taking into account underlying income. When \( t>0 \), call with: underlyingSpotValue=spotValue(t), forwardValue=strikePrice, to get current yield. For a repo, if \( t=0 \), impliedYield should reproduce the spot repo rate. For FRA's, this should reproduce the relevant zero rate at the FRA's maturityDate_;

Examples
Repo.cpp.

◆ 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.

Member Data Documentation

◆ underlyingIncome_

Real underlyingIncome_
mutableprotected

derived classes must set this, typically via spotIncome()

◆ underlyingSpotValue_

Real underlyingSpotValue_
mutableprotected

derived classes must set this, typically via spotValue()

◆ valueDate_

Date valueDate_
protected

valueDate = settlement date (date the fwd contract starts accruing)

◆ incomeDiscountCurve_

Handle<YieldTermStructure> incomeDiscountCurve_
protected

must set this in derived classes, based on particular underlying