Forward Class Referenceabstract
Financial instruments

Abstract base forward class. More...

`#include <ql/instruments/forward.hpp>`

Inheritance diagram for Forward:
[legend]

## Public Member Functions

Inspectors
virtual Date | settlementDate () const
const Calendar & | calendar () const
BusinessDayConvention | businessDayConvention () const
const DayCounter & | dayCounter () const
Handle< YieldTermStructure > | discountCurve () const
| term structure relevant to the contract (e.g. repo curve)
Handle< YieldTermStructure > | incomeDiscountCurve () const
| term structure that discounts the underlying's income cash flows
bool | isExpired () const
| 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 Date & | valuationDate () const
| returns the date the net present value refers to.
template<typename T >
T | result (const std::string &tag) const
| returns any additional result returned by the pricing engine.
const std::map< std::string, boost::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. More...
virtual void | setupArguments (PricingEngine::arguments *) const
virtual void | fetchResults (const PricingEngine::results *) const
Public Member Functions inherited from LazyObject
void | update ()
void | recalculate ()
void | freeze ()
void | unfreeze ()
void | alwaysForwardNotifications ()
Public Member Functions inherited from Observable
| Observable (const Observable &)
Observable & | operator= (const Observable &)
void | notifyObservers ()
Public Member Functions inherited from Observer
| Observer (const Observer &)
Observer & | operator= (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< Payoff > | payoff_
Date | valueDate_
Date | maturityDate_
| maturityDate of the forward contract or delivery date of underlying
Handle< YieldTermStructure > | discountCurve_
Handle< YieldTermStructure > | incomeDiscountCurve_
virtual Real | forwardValue () const
| forward value/price of underlying, discounting income/dividends More...
InterestRate | impliedYield (Real underlyingSpotValue, Real forwardValue, Date settlementDate, Compounding compoundingConvention, const DayCounter &dayCounter)
| Forward (const DayCounter &dayCounter, const Calendar &calendar, BusinessDayConvention businessDayConvention, Natural settlementDays, const ext::shared_ptr< Payoff > &payoff, const Date &valueDate, const Date &maturityDate, const Handle< YieldTermStructure > &discountCurve=Handle< YieldTermStructure >())
void | performCalculations () const

## Additional Inherited Members

Public Types inherited from Observer
typedef boost::unordered_set< ext::shared_ptr< Observable > > | set_type
typedef set_type::iterator | iterator
Protected Member Functions inherited from Instrument
void | calculate () const
virtual void | setupExpired () const
Protected Member Functions inherited from LazyObject
Protected Attributes inherited from Instrument
Real | NPV_
Real | errorEstimate_
Date | valuationDate_
std::map< std::string, boost::any > | additionalResults_
ext::shared_ptr< PricingEngine > | engine_
Protected Attributes inherited from LazyObject
bool | calculated_
bool | frozen_
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

## 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_;

## performCalculations()

void performCalculations | ( |  | ) | const

protected virtual

In case a pricing engine is not used, this method must be overridden to perform the actual calculations and set any needed results. In case a pricing engine is used, the default implementation can be used.

Reimplemented from Instrument.

Reimplemented in ForwardRateAgreement.

## Member Data Documentation

## underlyingIncome_

Real underlyingIncome_

mutable protected

derived classes must set this, typically via spotIncome()

## underlyingSpotValue_

Real underlyingSpotValue_

mutable protected

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