DigitalCoupon Class Reference

Digital-payoff coupon. More...

#include <ql/cashflows/digitalcoupon.hpp>

Inheritance diagram for DigitalCoupon:

Public Member Functions

Constructors
 DigitalCoupon (const boost::shared_ptr< FloatingRateCoupon > &underlying, Rate callStrike=Null< Rate >(), Position::Type callPosition=Position::Long, bool isCallITMIncluded=false, Rate callDigitalPayoff=Null< Rate >(), Rate putStrike=Null< Rate >(), Position::Type putPosition=Position::Long, bool isPutITMIncluded=false, Rate putDigitalPayoff=Null< Rate >(), const boost::shared_ptr< DigitalReplication > &replication=boost::shared_ptr< DigitalReplication >())
 general constructor
 
Coupon interface
Rate rate () const
 accrued rate
 
Rate convexityAdjustment () const
 convexity adjustment
 
Digital inspectors
Rate callStrike () const
 
Rate putStrike () const
 
Rate callDigitalPayoff () const
 
Rate putDigitalPayoff () const
 
bool hasPut () const
 
bool hasCall () const
 
bool hasCollar () const
 
bool isLongPut () const
 
bool isLongCall () const
 
boost::shared_ptr
< FloatingRateCoupon
underlying () const
 
Rate callOptionRate () const
 
Rate putOptionRate () const
 
Observer interface
void update ()
 
Visitability
virtual void accept (AcyclicVisitor &)
 
void setPricer (const boost::shared_ptr< FloatingRateCouponPricer > &pricer)
 
- Public Member Functions inherited from FloatingRateCoupon
 FloatingRateCoupon (const Date &paymentDate, Real nominal, const Date &startDate, const Date &endDate, Natural fixingDays, const boost::shared_ptr< InterestRateIndex > &index, Real gearing=1.0, Spread spread=0.0, const Date &refPeriodStart=Date(), const Date &refPeriodEnd=Date(), const DayCounter &dayCounter=DayCounter(), bool isInArrears=false)
 
void setPricer (const boost::shared_ptr< FloatingRateCouponPricer > &)
 
boost::shared_ptr
< FloatingRateCouponPricer
pricer () const
 
Real amount () const
 returns the amount of the cash flow More...
 
Rate rate () const
 accrued rate
 
Real price (const Handle< YieldTermStructure > &discountingCurve) const
 
DayCounter dayCounter () const
 day counter for accrual calculation
 
Real accruedAmount (const Date &) const
 accrued amount at the given date
 
const boost::shared_ptr
< InterestRateIndex > & 
index () const
 floating index
 
Natural fixingDays () const
 fixing days
 
virtual Date fixingDate () const
 fixing date
 
Real gearing () const
 index gearing, i.e. multiplicative coefficient for the index
 
Spread spread () const
 spread paid over the fixing of the underlying index
 
virtual Rate indexFixing () const
 fixing of the underlying index
 
virtual Rate adjustedFixing () const
 convexity-adjusted fixing
 
bool isInArrears () const
 whether or not the coupon fixes in arrears
 
void update ()
 
- Public Member Functions inherited from Coupon
 Coupon (const Date &paymentDate, Real nominal, const Date &accrualStartDate, const Date &accrualEndDate, const Date &refPeriodStart=Date(), const Date &refPeriodEnd=Date())
 
Date date () const
 
Real nominal () const
 
const DateaccrualStartDate () const
 start of the accrual period
 
const DateaccrualEndDate () const
 end of the accrual period
 
const DatereferencePeriodStart () const
 start date of the reference period
 
const DatereferencePeriodEnd () const
 end date of the reference period
 
Time accrualPeriod () const
 accrual period as fraction of year
 
BigInteger accrualDays () const
 accrual period in days
 
Time accruedPeriod (const Date &) const
 accrued period as fraction of year at the given date
 
BigInteger accruedDays (const Date &) const
 accrued days at the given date
 
- Public Member Functions inherited from CashFlow
bool hasOccurred (const Date &refDate=Date(), boost::optional< bool > includeRefDate=boost::none) const
 returns true if an event has already occurred before a date More...
 
Event interface
Visitability
- Public Member Functions inherited from Observable
 Observable (const Observable &)
 
Observableoperator= (const Observable &)
 
void notifyObservers ()
 
- Public Member Functions inherited from Observer
 Observer (const Observer &)
 
Observeroperator= (const Observer &)
 
std::pair< std::set
< boost::shared_ptr
< Observable > >::iterator,
bool > 
registerWith (const boost::shared_ptr< Observable > &)
 
Size unregisterWith (const boost::shared_ptr< Observable > &)
 
void unregisterWithAll ()
 

Protected Attributes

Data members
boost::shared_ptr
< FloatingRateCoupon
underlying_
 
Rate callStrike_
 strike rate for the the call option
 
Rate putStrike_
 strike rate for the the put option
 
Real callCsi_
 multiplicative factor of call payoff
 
Real putCsi_
 multiplicative factor of put payoff
 
bool isCallATMIncluded_
 inclusion flag og the call payoff if the call option ends at-the-money
 
bool isPutATMIncluded_
 inclusion flag og the put payoff if the put option ends at-the-money
 
bool isCallCashOrNothing_
 digital call option type: if true, cash-or-nothing, if false asset-or-nothing
 
bool isPutCashOrNothing_
 digital put option type: if true, cash-or-nothing, if false asset-or-nothing
 
Rate callDigitalPayoff_
 digital call option payoff rate, if any
 
Rate putDigitalPayoff_
 digital put option payoff rate, if any
 
Real callLeftEps_
 the left and right gaps applied in payoff replication for call
 
Real callRightEps_
 
Real putLeftEps_
 the left and right gaps applied in payoff replication for puf
 
Real putRightEps_
 
bool hasPutStrike_
 
bool hasCallStrike_
 
Replication::Type replicationType_
 Type of replication.
 
- Protected Attributes inherited from FloatingRateCoupon
boost::shared_ptr
< InterestRateIndex
index_
 
DayCounter dayCounter_
 
Natural fixingDays_
 
Real gearing_
 
Spread spread_
 
bool isInArrears_
 
boost::shared_ptr
< FloatingRateCouponPricer
pricer_
 
- Protected Attributes inherited from Coupon
Date paymentDate_
 
Real nominal_
 
Date accrualStartDate_
 
Date accrualEndDate_
 
Date refPeriodStart_
 
Date refPeriodEnd_
 

Additional Inherited Members

- Protected Member Functions inherited from FloatingRateCoupon
Rate convexityAdjustmentImpl (Rate fixing) const
 convexity adjustment for the given index fixing
 

Detailed Description

Digital-payoff coupon.

Implementation of a floating-rate coupon with digital call/put option. Payoffs:

  • Coupon with cash-or-nothing Digital Call rate + csi * payoffRate * Heaviside(rate-strike)
  • Coupon with cash-or-nothing Digital Put rate + csi * payoffRate * Heaviside(strike-rate) where csi=+1 or csi=-1.
  • Coupon with asset-or-nothing Digital Call rate + csi * rate * Heaviside(rate-strike)
  • Coupon with asset-or-nothing Digital Put rate + csi * rate * Heaviside(strike-rate) where csi=+1 or csi=-1. The evaluation of the coupon is made using the call/put spread replication method.
Tests:
  • the correctness of the returned value in case of Asset-or-nothing embedded option is tested by pricing the digital option with Cox-Rubinstein formula.
  • the correctness of the returned value in case of deep-in-the-money Asset-or-nothing embedded option is tested vs the expected values of coupon and option.
  • the correctness of the returned value in case of deep-out-of-the-money Asset-or-nothing embedded option is tested vs the expected values of coupon and option.
  • the correctness of the returned value in case of Cash-or-nothing embedded option is tested by pricing the digital option with Reiner-Rubinstein formula.
  • the correctness of the returned value in case of deep-in-the-money Cash-or-nothing embedded option is tested vs the expected values of coupon and option.
  • the correctness of the returned value in case of deep-out-of-the-money Cash-or-nothing embedded option is tested vs the expected values of coupon and option.
  • the correctness of the returned value is tested checking the correctness of the call-put parity relation.
  • the correctness of the returned value is tested by the relationship between prices in case of different replication types.

Member Function Documentation

Rate callOptionRate ( ) const

Returns the call option rate (multiplied by: nominal*accrualperiod*discount is the NPV of the option)

Rate putOptionRate ( ) const

Returns the put option rate (multiplied by: nominal*accrualperiod*discount is the NPV of the option)