Logo
Fully annotated reference manual - version 1.8.12
Loading...
Searching...
No Matches
Public Member Functions | Protected Attributes | List of all members
SingleBarrierOptionWrapper Class Reference

#include <ored/portfolio/barrieroptionwrapper.hpp>

+ Inheritance diagram for SingleBarrierOptionWrapper:
+ Collaboration diagram for SingleBarrierOptionWrapper:

Public Member Functions

 SingleBarrierOptionWrapper (const QuantLib::ext::shared_ptr< QuantLib::Instrument > &inst, const bool isLongOption, const QuantLib::Date &exerciseDate, const bool isPhysicalDelivery, const QuantLib::ext::shared_ptr< QuantLib::Instrument > &undInst, Barrier::Type barrierType, Handle< Quote > spot, Real barrier, Real rebate, const QuantLib::Currency ccy, const QuantLib::Date &startDate, const QuantLib::ext::shared_ptr< QuantLib::Index > &index, const QuantLib::Calendar &calendar, const Real multiplier=1.0, const Real undMultiplier=1.0, const std::vector< QuantLib::ext::shared_ptr< QuantLib::Instrument > > &additionalInstruments=std::vector< QuantLib::ext::shared_ptr< QuantLib::Instrument > >(), const std::vector< Real > &additionalMultipliers=std::vector< Real >())
 
bool checkBarrier (Real spot, bool isTouchingOnly) const override
 
bool exercise () const override
 
- Public Member Functions inherited from BarrierOptionWrapper
 BarrierOptionWrapper (const QuantLib::ext::shared_ptr< QuantLib::Instrument > &inst, const bool isLongOption, const QuantLib::Date &exerciseDate, const bool isPhysicalDelivery, const QuantLib::ext::shared_ptr< QuantLib::Instrument > &undInst, Barrier::Type barrierType, Handle< Quote > spot, Real rebate, const QuantLib::Currency ccy, const QuantLib::Date &startDate, const QuantLib::ext::shared_ptr< QuantLib::Index > &index, const QuantLib::Calendar &calendar, const Real multiplier=1.0, const Real undMultiplier=1.0, const std::vector< QuantLib::ext::shared_ptr< QuantLib::Instrument > > &additionalInstruments=std::vector< QuantLib::ext::shared_ptr< QuantLib::Instrument > >(), const std::vector< Real > &additionalMultipliers=std::vector< Real >())
 
const std::map< std::string, boost::any > & additionalResults () const override
 Return the additional results of this instrument. More...
 
virtual bool checkBarrier (Real, bool) const =0
 
- Public Member Functions inherited from OptionWrapper
 OptionWrapper (const QuantLib::ext::shared_ptr< QuantLib::Instrument > &inst, const bool isLongOption, const std::vector< QuantLib::Date > &exerciseDate, const bool isPhysicalDelivery, const std::vector< QuantLib::ext::shared_ptr< QuantLib::Instrument > > &undInst, const Real multiplier=1.0, const Real undMultiplier=1.0, const std::vector< QuantLib::ext::shared_ptr< QuantLib::Instrument > > &additionalInstruments=std::vector< QuantLib::ext::shared_ptr< QuantLib::Instrument > >(), const std::vector< Real > &additionalMultipliers=std::vector< Real >())
 Constructor. More...
 
void initialise (const std::vector< QuantLib::Date > &dates) override
 Initialise with the given date grid. More...
 
void reset () override
 reset is called every time a new path is about to be priced. More...
 
QuantLib::Real NPV () const override
 Return the NPV of this instrument. More...
 
Real multiplier2 () const override
 
const std::map< std::string, boost::any > & additionalResults () const override
 Return the additional results of this instrument. More...
 
void updateQlInstruments () override
 call update on enclosed instrument(s) More...
 
bool isOption () override
 is it an Option? More...
 
const std::vector< QuantLib::ext::shared_ptr< QuantLib::Instrument > > & underlyingInstruments () const
 return the underlying instruments More...
 
const QuantLib::ext::shared_ptr< QuantLib::Instrument > & activeUnderlyingInstrument (const bool calculate=false) const
 
bool isLong () const
 return true if option is long, false if option is short More...
 
bool isExercised () const
 return true if option is exercised More...
 
bool isPhysicalDelivery () const
 return true for physical delivery, false for cash settlement More...
 
Real underlyingMultiplier () const
 the underlying multiplier More...
 
const QuantLib::Date & exerciseDate () const
 the (actual) date the option was exercised More...
 
void enableExercise ()
 disable exercise decisions More...
 
void disableExercise ()
 enable exercise decisions More...
 
- Public Member Functions inherited from InstrumentWrapper
 InstrumentWrapper ()
 
 InstrumentWrapper (const QuantLib::ext::shared_ptr< QuantLib::Instrument > &inst, const Real multiplier=1.0, const std::vector< QuantLib::ext::shared_ptr< QuantLib::Instrument > > &additionalInstruments=std::vector< QuantLib::ext::shared_ptr< QuantLib::Instrument > >(), const std::vector< Real > &additionalMultipliers=std::vector< Real >())
 
virtual ~InstrumentWrapper ()
 
virtual void initialise (const std::vector< QuantLib::Date > &dates)=0
 Initialise with the given date grid. More...
 
virtual void reset ()=0
 reset is called every time a new path is about to be priced. More...
 
virtual QuantLib::Real NPV () const =0
 Return the NPV of this instrument. More...
 
virtual const std::map< std::string, boost::any > & additionalResults () const =0
 Return the additional results of this instrument. More...
 
QuantLib::Real additionalInstrumentsNPV () const
 
virtual void updateQlInstruments ()
 call update on enclosed instrument(s) More...
 
virtual bool isOption ()
 is it an Option? More...
 
QuantLib::ext::shared_ptr< QuantLib::Instrument > qlInstrument (const bool calculate=false) const
 Inspectors. More...
 
Real multiplier () const
 
virtual Real multiplier2 () const
 
const std::vector< QuantLib::ext::shared_ptr< QuantLib::Instrument > > & additionalInstruments () const
 
const std::vector< Real > & additionalMultipliers () const
 
boost::timer::nanosecond_type getCumulativePricingTime () const
 Get cumulative timing spent on pricing. More...
 
std::size_t getNumberOfPricings () const
 Get number of pricings. More...
 
void resetPricingStats () const
 Reset pricing statistics. More...
 

Protected Attributes

Real barrier_
 
- Protected Attributes inherited from BarrierOptionWrapper
Handle< Quote > spot_
 
Barrier::Type barrierType_
 
Real rebate_
 
const QuantLib::Currency ccy_
 
const QuantLib::Date startDate_
 
QuantLib::ext::shared_ptr< QuantLib::Index > index_
 
QuantLib::Calendar calendar_
 
- Protected Attributes inherited from OptionWrapper
bool isLong_
 
bool isPhysicalDelivery_
 
std::vector< QuantLib::Date > contractExerciseDates_
 
std::vector< QuantLib::Date > effectiveExerciseDates_
 
std::vector< QuantLib::ext::shared_ptr< QuantLib::Instrument > > underlyingInstruments_
 
QuantLib::ext::shared_ptr< QuantLib::Instrument > activeUnderlyingInstrument_
 
Real undMultiplier_
 
bool exercised_
 
bool exercisable_
 
QuantLib::Date exerciseDate_
 
- Protected Attributes inherited from InstrumentWrapper
QuantLib::ext::shared_ptr< QuantLib::Instrument > instrument_
 
Real multiplier_
 
std::vector< QuantLib::ext::shared_ptr< QuantLib::Instrument > > additionalInstruments_
 
std::vector< Real > additionalMultipliers_
 
std::size_t numberOfPricings_ = 0
 
boost::timer::nanosecond_type cumulativePricingTime_ = 0
 

Additional Inherited Members

- Protected Member Functions inherited from BarrierOptionWrapper
QuantLib::Real NPV () const override
 Return the NPV of this instrument. More...
 
- Protected Member Functions inherited from InstrumentWrapper
Real getTimedNPV (const QuantLib::ext::shared_ptr< QuantLib::Instrument > &instr) const
 

Detailed Description

Definition at line 77 of file barrieroptionwrapper.hpp.

Constructor & Destructor Documentation

◆ SingleBarrierOptionWrapper()

SingleBarrierOptionWrapper ( const QuantLib::ext::shared_ptr< QuantLib::Instrument > &  inst,
const bool  isLongOption,
const QuantLib::Date &  exerciseDate,
const bool  isPhysicalDelivery,
const QuantLib::ext::shared_ptr< QuantLib::Instrument > &  undInst,
Barrier::Type  barrierType,
Handle< Quote >  spot,
Real  barrier,
Real  rebate,
const QuantLib::Currency  ccy,
const QuantLib::Date &  startDate,
const QuantLib::ext::shared_ptr< QuantLib::Index > &  index,
const QuantLib::Calendar &  calendar,
const Real  multiplier = 1.0,
const Real  undMultiplier = 1.0,
const std::vector< QuantLib::ext::shared_ptr< QuantLib::Instrument > > &  additionalInstruments = std::vector<QuantLib::ext::shared_ptr<QuantLib::Instrument>>(),
const std::vector< Real > &  additionalMultipliers = std::vector<Real>() 
)

Definition at line 79 of file barrieroptionwrapper.hpp.

92 : BarrierOptionWrapper(inst, isLongOption, exerciseDate, isPhysicalDelivery, undInst, barrierType, spot, rebate,
93 ccy, startDate, index, calendar, multiplier, undMultiplier, additionalInstruments, additionalMultipliers),
94 barrier_(barrier) {}
BarrierOptionWrapper(const QuantLib::ext::shared_ptr< QuantLib::Instrument > &inst, const bool isLongOption, const QuantLib::Date &exerciseDate, const bool isPhysicalDelivery, const QuantLib::ext::shared_ptr< QuantLib::Instrument > &undInst, Barrier::Type barrierType, Handle< Quote > spot, Real rebate, const QuantLib::Currency ccy, const QuantLib::Date &startDate, const QuantLib::ext::shared_ptr< QuantLib::Index > &index, const QuantLib::Calendar &calendar, const Real multiplier=1.0, const Real undMultiplier=1.0, const std::vector< QuantLib::ext::shared_ptr< QuantLib::Instrument > > &additionalInstruments=std::vector< QuantLib::ext::shared_ptr< QuantLib::Instrument > >(), const std::vector< Real > &additionalMultipliers=std::vector< Real >())
const std::vector< Real > & additionalMultipliers() const
const std::vector< QuantLib::ext::shared_ptr< QuantLib::Instrument > > & additionalInstruments() const
const QuantLib::Date & exerciseDate() const
the (actual) date the option was exercised
bool isPhysicalDelivery() const
return true for physical delivery, false for cash settlement
Calendar calendar
Definition: utilities.cpp:441

Member Function Documentation

◆ checkBarrier()

bool checkBarrier ( Real  spot,
bool  isTouchingOnly 
) const
overridevirtual

Implements BarrierOptionWrapper.

Definition at line 104 of file barrieroptionwrapper.cpp.

104 {
105 if (isTouchingOnly)
106 return close_enough(spot, barrier_);
107 else {
108 switch (barrierType_) {
109 case Barrier::DownIn:
110 case Barrier::DownOut:
111 return spot <= barrier_;
112 case Barrier::UpIn:
113 case Barrier::UpOut:
114 return spot >= barrier_;
115 default:
116 QL_FAIL("unknown barrier type " << barrierType_);
117 }
118 }
119}
Filter close_enough(const RandomVariable &x, const RandomVariable &y)
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ exercise()

bool exercise ( ) const
overridevirtual

Implements OptionWrapper.

Definition at line 121 of file barrieroptionwrapper.cpp.

121 {
122 bool trigger = false;
123 Date today = Settings::instance().evaluationDate();
124
125 // check historical fixings - only check if the instrument is not calculated
126 // really only needs to be checked if evaluation date changed
127 if (!instrument_->isCalculated()) {
128 if (startDate_ != Date() && startDate_ < today) {
129 QL_REQUIRE(index_, "no index provided");
130 QL_REQUIRE(calendar_ != Calendar(), "no calendar provided");
131
132 QuantLib::ext::shared_ptr<QuantExt::EqFxIndexBase> eqfxIndex =
133 QuantLib::ext::dynamic_pointer_cast<QuantExt::EqFxIndexBase>(index_);
134
135 if (eqfxIndex) {
136 Date d = calendar_.adjust(startDate_);
137 while (d < today && !trigger) {
138 Real fixing = eqfxIndex->pastFixing(d);
139 if (fixing == Null<Real>()) {
140 StructuredMessage(
142 "Missing fixing for index " + index_->name() + " on " + ore::data::to_string(d) +
143 ", Skipping this date, assuming no trigger",
144 std::map<std::string, std::string>({{"exceptionType", "Invalid or missing fixings"}}))
145 .log();
146 } else {
147 // This is so we can use pastIndex and not fail on a missing fixing to be
148 // consistent with previous implemention, however maybe we should use fixing
149 // and be strict on needed fixings being present
150 auto fxInd = QuantLib::ext::dynamic_pointer_cast<QuantExt::FxIndex>(eqfxIndex);
151 const bool isTouchingOnly = false;
152 trigger = checkBarrier(fixing, isTouchingOnly);
153 if (trigger)
154 exerciseDate_ = d;
155 }
156 d = calendar_.advance(d, 1, Days);
157 }
158 }
159 }
160 }
161
162 // check todays spot, if triggered today set the exerciseDate, may have to pay a rebate
163 if (!trigger) {
164 const bool isTouchingOnly = false;
165 trigger = checkBarrier(spot_->value(), isTouchingOnly);
166 if (trigger)
167 exerciseDate_ = today;
168 }
169
170 exercised_ = trigger;
171 return trigger;
172}
QuantLib::ext::shared_ptr< QuantLib::Index > index_
QuantLib::ext::shared_ptr< QuantLib::Instrument > instrument_
QuantLib::Date exerciseDate_
bool checkBarrier(Real spot, bool isTouchingOnly) const override
std::string to_string(const LocationInfo &l)
Definition: ast.cpp:28
+ Here is the call graph for this function:

Member Data Documentation

◆ barrier_

Real barrier_
protected

Definition at line 100 of file barrieroptionwrapper.hpp.