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

Serializable FX Double One-Touch/No-Touch Option. More...

#include <ored/portfolio/fxdoubletouchoption.hpp>

+ Inheritance diagram for FxDoubleTouchOption:
+ Collaboration diagram for FxDoubleTouchOption:

Public Member Functions

 FxDoubleTouchOption ()
 Default constructor. More...
 
 FxDoubleTouchOption (Envelope &env, OptionData option, BarrierData barrier, string foreignCurrency, string domesticCurrency, string payoffCurrency, double payoffAmount, string startDate="", string calendar="", string fxIndex="")
 Constructor. More...
 
void build (const QuantLib::ext::shared_ptr< EngineFactory > &) override
 Build QuantLib/QuantExt instrument, link pricing engine. More...
 
Inspectors
const OptionDataoption () const
 
const BarrierDatabarrier () const
 
double payoffAmount () const
 
const string & type () const
 
const string & payoffCurrency () const
 
const string & startDate () const
 
const string & calendar () const
 
const string & fxIndex () const
 
- Public Member Functions inherited from FxSingleAssetDerivative
const std::string & boughtCurrency () const
 
const std::string & soldCurrency () const
 
const std::string & foreignCurrency () const
 
const std::string & domesticCurrency () const
 
- Public Member Functions inherited from Trade
 Trade ()
 Default constructor. More...
 
 Trade (const string &tradeType, const Envelope &env=Envelope(), const TradeActions &ta=TradeActions())
 Base class constructor. More...
 
virtual ~Trade ()
 Default destructor. More...
 
virtual void build (const QuantLib::ext::shared_ptr< EngineFactory > &)=0
 
virtual std::map< std::string, RequiredFixings::FixingDatesfixings (const QuantLib::Date &settlementDate=QuantLib::Date()) const
 
const RequiredFixingsrequiredFixings () const
 
virtual std::map< AssetClass, std::set< std::string > > underlyingIndices (const QuantLib::ext::shared_ptr< ReferenceDataManager > &referenceDataManager=nullptr) const
 
void reset ()
 Reset trade, clear all base class data. This does not reset accumulated timings for this trade. More...
 
void resetPricingStats (const std::size_t numberOfPricings=0, const boost::timer::nanosecond_type cumulativePricingTime=0)
 Reset accumulated timings to given values. More...
 
string & id ()
 Set the trade id. More...
 
void setEnvelope (const Envelope &envelope)
 Set the envelope with counterparty and portfolio info. More...
 
void setAdditionalData (const std::map< std::string, boost::any > &additionalData)
 
TradeActionstradeActions ()
 Set the trade actions. More...
 
const string & id () const
 
const string & tradeType () const
 
const Envelopeenvelope () const
 
const set< string > & portfolioIds () const
 
const TradeActionstradeActions () const
 
const QuantLib::ext::shared_ptr< InstrumentWrapper > & instrument () const
 
const std::vector< QuantLib::Leg > & legs () const
 
const std::vector< string > & legCurrencies () const
 
const std::vector< bool > & legPayers () const
 
const string & npvCurrency () const
 
virtual QuantLib::Real notional () const
 Return the current notional in npvCurrency. See individual sub-classes for the precise definition. More...
 
virtual string notionalCurrency () const
 
const Date & maturity () const
 
virtual bool isExpired (const Date &d)
 
const string & issuer () const
 
template<typename T >
additionalDatum (const std::string &tag) const
 returns any additional datum. More...
 
virtual const std::map< std::string, boost::any > & additionalData () const
 returns all additional data returned by the trade once built More...
 
const std::string & sensitivityTemplate () const
 
void validate () const
 Utility to validate that everything that needs to be set in this base class is actually set. More...
 
virtual bool hasCashflows () const
 
boost::timer::nanosecond_type getCumulativePricingTime () const
 Get cumulative timing spent on pricing. More...
 
std::size_t getNumberOfPricings () const
 Get number of pricings. More...
 
- Public Member Functions inherited from XMLSerializable
virtual ~XMLSerializable ()
 
virtual void fromXML (XMLNode *node)=0
 
virtual XMLNodetoXML (XMLDocument &doc) const =0
 
void fromFile (const std::string &filename)
 
void toFile (const std::string &filename) const
 
void fromXMLString (const std::string &xml)
 Parse from XML string. More...
 
std::string toXMLString () const
 Parse from XML string. More...
 

Serialisation

OptionData option_
 
BarrierData barrier_
 
string startDate_
 
string calendar_
 
string fxIndex_
 
Real payoffAmount_
 
string type_
 
string payoffCurrency_
 
QuantLib::Date start_
 
QuantLib::Calendar cal_
 
virtual void fromXML (XMLNode *node) override
 
virtual XMLNodetoXML (XMLDocument &doc) const override
 
bool checkBarrier (Real spot, Barrier::Type type, Real level)
 

Additional Inherited Members

- Protected Member Functions inherited from FxSingleAssetDerivative
 FxSingleAssetDerivative (const std::string &tradeType)
 
 FxSingleAssetDerivative (const std::string &tradeType, ore::data::Envelope &env, const std::string &boughtCurrency, const std::string &soldCurrency)
 
- Protected Member Functions inherited from FxDerivative
 FxDerivative (const std::string &tradeType)
 
 FxDerivative (const std::string &tradeType, ore::data::Envelope &env)
 
- Protected Member Functions inherited from Trade
Date addPremiums (std::vector< QuantLib::ext::shared_ptr< Instrument > > &instruments, std::vector< Real > &multipliers, const Real tradeMultiplier, const PremiumData &premiumData, const Real premiumMultiplier, const Currency &tradeCurrency, const QuantLib::ext::shared_ptr< EngineFactory > &factory, const string &configuration)
 
void setLegBasedAdditionalData (const Size legNo, Size resultLegId=Null< Size >()) const
 
void setSensitivityTemplate (const EngineBuilder &builder)
 
void setSensitivityTemplate (const std::string &id)
 
- Protected Attributes inherited from FxSingleAssetDerivative
std::string boughtCurrency_
 
std::string soldCurrency_
 
std::string & foreignCurrency_ = boughtCurrency_
 
std::string & domesticCurrency_ = soldCurrency_
 
- Protected Attributes inherited from Trade
string tradeType_
 
QuantLib::ext::shared_ptr< InstrumentWrapperinstrument_
 
std::vector< QuantLib::Leg > legs_
 
std::vector< string > legCurrencies_
 
std::vector< boollegPayers_
 
string npvCurrency_
 
QuantLib::Real notional_
 
string notionalCurrency_
 
Date maturity_
 
string issuer_
 
string sensitivityTemplate_
 
bool sensitivityTemplateSet_ = false
 
std::size_t savedNumberOfPricings_ = 0
 
boost::timer::nanosecond_type savedCumulativePricingTime_ = 0
 
RequiredFixings requiredFixings_
 
std::map< std::string, boost::any > additionalData_
 

Detailed Description

Serializable FX Double One-Touch/No-Touch Option.

Definition at line 37 of file fxdoubletouchoption.hpp.

Constructor & Destructor Documentation

◆ FxDoubleTouchOption() [1/2]

Default constructor.

Definition at line 40 of file fxdoubletouchoption.hpp.

41 : ore::data::Trade("FxDoubleTouchOption"), FxSingleAssetDerivative("") {}
FxSingleAssetDerivative(const std::string &tradeType)
Trade base class.
Definition: trade.hpp:55

◆ FxDoubleTouchOption() [2/2]

FxDoubleTouchOption ( Envelope env,
OptionData  option,
BarrierData  barrier,
string  foreignCurrency,
string  domesticCurrency,
string  payoffCurrency,
double  payoffAmount,
string  startDate = "",
string  calendar = "",
string  fxIndex = "" 
)

Constructor.

Definition at line 41 of file fxdoubletouchoption.cpp.

44 : ore::data::Trade("FxDoubleTouchOption", env),
48 DoubleBarrier::Type barrierType = parseDoubleBarrierType(barrier_.type());
49 switch (barrierType) {
50 case DoubleBarrier::KnockIn:
51 type_ = "KnockIn";
52 break;
53 case DoubleBarrier::KnockOut:
54 type_ = "KnockOut";
55 break;
56 default:
57 QL_FAIL("unsupported barrier type " << barrierType);
58 }
59}
const std::string & type() const
Definition: barrierdata.hpp:46
const BarrierData & barrier() const
const OptionData & option() const
const string & payoffCurrency() const
const std::string & domesticCurrency() const
const std::string & foreignCurrency() const
DoubleBarrier::Type parseDoubleBarrierType(const std::string &s)
Convert std::string to QuantLib::DoubleBarrierType.
Definition: parsers.cpp:1061
+ Here is the call graph for this function:

Member Function Documentation

◆ build()

void build ( const QuantLib::ext::shared_ptr< EngineFactory > &  engineFactory)
overridevirtual

Build QuantLib/QuantExt instrument, link pricing engine.

Implements Trade.

Definition at line 61 of file fxdoubletouchoption.cpp.

61 {
62
63 // ISDA taxonomy
64 additionalData_["isdaAssetClass"] = string("Foreign Exchange");
65 additionalData_["isdaBaseProduct"] = string("Simple Exotic");
66 additionalData_["isdaSubProduct"] = string("Barrier");
67 additionalData_["isdaTransaction"] = string("");
68
69 additionalData_["payoffAmount"] = payoffAmount_;
70 additionalData_["payoffCurrency"] = payoffCurrency_;
71
75
76 const QuantLib::ext::shared_ptr<Market> market = engineFactory->market();
77 Date start = ore::data::parseDate(startDate_);
78 Calendar cal = ore::data::parseCalendar(calendar_);
79
80 QL_REQUIRE(tradeActions().empty(), "TradeActions not supported for FxOption");
81 QL_REQUIRE(option_.exerciseDates().size() == 1, "Invalid number of exercise dates");
82 QL_REQUIRE(barrier_.levels().size() == 2, "Invalid number of barrier levels");
83 QL_REQUIRE(barrier_.style().empty() || barrier_.style() == "American", "Only american barrier style suppported");
84
85 // Parse trade data
86 Currency fgnCcy = parseCurrency(foreignCurrency_);
87 Currency domCcy = parseCurrency(domesticCurrency_);
88 Date expiryDate = parseDate(option_.exerciseDates().front());
89 DoubleBarrier::Type barrierType = parseDoubleBarrierType(barrier_.type());
90 bool payoffAtExpiry = option_.payoffAtExpiry();
91 double rebate = barrier_.rebate();
92 Position::Type positionType = parsePositionType(option_.longShort());
93
94 QL_REQUIRE(rebate == 0, "Rebates not supported for FxDoubleTouchOptions");
95 if (payoffAtExpiry == false) {
96 payoffAtExpiry = true;
97 DLOG("Payoff at hit not yet supported for FxDoubleTouchOptions, setting to payoff at expiry");
98 }
99
100 Date payDate = expiryDate;
101 const boost::optional<OptionPaymentData>& opd = option_.paymentData();
102 if (opd) {
103 if (opd->rulesBased()) {
104 payDate = opd->calendar().advance(expiryDate, opd->lag(), Days, opd->convention());
105 } else {
106 if (opd->dates().size() > 1)
108 "Found more than 1 payment date. The first one will be used.")
109 .log();
110 payDate = opd->dates().front();
111 }
112 }
113 QL_REQUIRE(payDate >= expiryDate, "Settlement date cannot be earlier than expiry date");
114 maturity_ = std::max(option_.premiumData().latestPremiumDate(), payDate);
115
116 Real levelLow = barrier_.levels()[0].value();
117 Real levelHigh = barrier_.levels()[1].value();
118 QL_REQUIRE(levelLow < levelHigh, "barrier levels are not in ascending order");
119
120 // Handle PayoffCurrency, we might have to flip the trade here
121 bool flipResults = false;
123 // Invert the trade, switch dom and for and flip Put/Call
124 levelLow = 1.0 / levelLow;
125 levelHigh = 1.0 / levelHigh;
126 std::swap(levelLow, levelHigh);
127 std::swap(fgnCcy, domCcy);
128 flipResults = true;
129 } else if (payoffCurrency_ != domesticCurrency_) {
130 QL_FAIL("Invalid Payoff currency (" << payoffCurrency_ << ") for FxDoubleTouchOption " << foreignCurrency_
132 }
133 DLOG("Setting up FxDoubleTouchOption with level " << levelLow << ", " << levelHigh << " foreign/bought " << fgnCcy
134 << " domestic/sold " << domCcy);
135 // from this point on it's important not to use domesticCurrency_, foreignCurrency_, barrier_.level(), etc
136 // rather the local variables (fgnCcy, domCcy, level, etc) should be used as they may have been flipped.
137
138 // create payoff and exercise, as well as leg of underlying instrument
139 QuantLib::ext::shared_ptr<StrikedTypePayoff> payoff(new CashOrNothingPayoff(Option::Call, (levelLow + levelHigh) / 2, 1.0));
140 Leg leg;
141
142 leg.push_back(QuantLib::ext::shared_ptr<CashFlow>(new SimpleCashFlow(1.0, payDate)));
143
144 QuantLib::ext::shared_ptr<Exercise> exercise = QuantLib::ext::make_shared<EuropeanExercise>(expiryDate);
145
146 QuantLib::ext::shared_ptr<Instrument> doubleTouch =
147 QuantLib::ext::make_shared<DoubleBarrierOption>(barrierType, levelLow, levelHigh, 0.0, payoff, exercise);
148 QuantLib::ext::shared_ptr<Instrument> underlying = QuantLib::ext::make_shared<Swap>(Leg(), leg);
149
150 QuantLib::ext::shared_ptr<QuantExt::FxIndex> fxIndex;
151 if (!fxIndex_.empty())
152 fxIndex = buildFxIndex(fxIndex_, domCcy.code(), fgnCcy.code(), engineFactory->market(),
153 engineFactory->configuration(MarketContext::pricing));
154
155 // set pricing engines
156 QuantLib::ext::shared_ptr<EngineBuilder> builder = engineFactory->builder(tradeType_);
157 QL_REQUIRE(builder, "No builder found for " << tradeType_);
158 QuantLib::ext::shared_ptr<FxDoubleTouchOptionEngineBuilder> fxDoubleTouchOptBuilder =
159 QuantLib::ext::dynamic_pointer_cast<FxDoubleTouchOptionEngineBuilder>(builder);
160 doubleTouch->setPricingEngine(fxDoubleTouchOptBuilder->engine(fgnCcy, domCcy, payDate, flipResults));
161 setSensitivityTemplate(*fxDoubleTouchOptBuilder);
162
163 // if a knock-in option is triggered it becomes a simple forward cashflow
164 // which we price as a swap
165 builder = engineFactory->builder("Swap");
166 QL_REQUIRE(builder, "No builder found for Swap");
167 QuantLib::ext::shared_ptr<SwapEngineBuilderBase> swapBuilder =
168 QuantLib::ext::dynamic_pointer_cast<SwapEngineBuilderBase>(builder);
169 underlying->setPricingEngine(swapBuilder->engine(parseCurrency(payoffCurrency_), std::string(), std::string()));
170
171 bool isLong = (positionType == Position::Long) ? true : false;
172
173 std::vector<QuantLib::ext::shared_ptr<Instrument>> additionalInstruments;
174 std::vector<Real> additionalMultipliers;
175 addPremiums(additionalInstruments, additionalMultipliers, (isLong ? 1.0 : -1.0) * payoffAmount_,
176 option_.premiumData(), isLong ? -1.0 : 1.0, parseCurrency(payoffCurrency_), engineFactory,
177 builder->configuration(MarketContext::pricing));
178
179 Handle<Quote> spot = market->fxSpot(fgnCcy.code() + domCcy.code());
180 instrument_ = QuantLib::ext::make_shared<DoubleBarrierOptionWrapper>(
181 doubleTouch, isLong, expiryDate, false, underlying, barrierType, spot, levelLow, levelHigh, 0, domCcy,
182 start, fxIndex, cal, payoffAmount_, payoffAmount_, additionalInstruments, additionalMultipliers);
183
184
185 Calendar fixingCal = fxIndex ? fxIndex->fixingCalendar() : cal;
186 if (start != Date()) {
187 for (Date d = start; d <= expiryDate; d = fixingCal.advance(d, 1 * Days))
189 }
190
191}
double rebate() const
Definition: barrierdata.hpp:47
std::vector< ore::data::TradeBarrier > levels() const
Definition: barrierdata.hpp:50
const std::string & style() const
Definition: barrierdata.hpp:51
void log() const
generate Boost log record to pass to corresponding sinks
Definition: log.cpp:491
const string & longShort() const
Definition: optiondata.hpp:70
const bool & payoffAtExpiry() const
Definition: optiondata.hpp:75
const boost::optional< OptionPaymentData > & paymentData() const
Definition: optiondata.hpp:93
const PremiumData & premiumData() const
Definition: optiondata.hpp:83
const vector< string > & exerciseDates() const
Definition: optiondata.hpp:76
QuantLib::Date latestPremiumDate() const
Definition: premiumdata.cpp:28
void addFixingDate(const QuantLib::Date &fixingDate, const std::string &indexName, const QuantLib::Date &payDate=Date::maxDate(), const bool alwaysAddIfPaysOnSettlement=false, const bool mandatoryFixing=true)
Utility classes for Structured warnings, contains the Trade ID and Type.
TradeActions & tradeActions()
Set the trade actions.
Definition: trade.hpp:126
string npvCurrency_
Definition: trade.hpp:201
QuantLib::Real notional_
Definition: trade.hpp:202
Date addPremiums(std::vector< QuantLib::ext::shared_ptr< Instrument > > &instruments, std::vector< Real > &multipliers, const Real tradeMultiplier, const PremiumData &premiumData, const Real premiumMultiplier, const Currency &tradeCurrency, const QuantLib::ext::shared_ptr< EngineFactory > &factory, const string &configuration)
Definition: trade.cpp:58
void setSensitivityTemplate(const EngineBuilder &builder)
Definition: trade.cpp:295
string tradeType_
Definition: trade.hpp:196
RequiredFixings requiredFixings_
Definition: trade.hpp:223
QuantLib::ext::shared_ptr< InstrumentWrapper > instrument_
Definition: trade.hpp:197
string notionalCurrency_
Definition: trade.hpp:203
const string & tradeType() const
Definition: trade.hpp:133
std::map< std::string, boost::any > additionalData_
Definition: trade.hpp:224
Calendar parseCalendar(const string &s)
Convert text to QuantLib::Calendar.
Definition: parsers.cpp:157
Date parseDate(const string &s)
Convert std::string to QuantLib::Date.
Definition: parsers.cpp:51
Currency parseCurrency(const string &s)
Convert text to QuantLib::Currency.
Definition: parsers.cpp:290
Position::Type parsePositionType(const std::string &s)
Convert text to QuantLib::Position::Type.
Definition: parsers.cpp:404
#define DLOG(text)
Logging Macro (Level = Debug)
Definition: log.hpp:554
QuantLib::ext::shared_ptr< QuantExt::FxIndex > buildFxIndex(const string &fxIndex, const string &domestic, const string &foreign, const QuantLib::ext::shared_ptr< Market > &market, const string &configuration, bool useXbsCurves)
Definition: marketdata.cpp:137
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ option()

const OptionData & option ( ) const

Definition at line 52 of file fxdoubletouchoption.hpp.

52{ return option_; }

◆ barrier()

const BarrierData & barrier ( ) const

Definition at line 53 of file fxdoubletouchoption.hpp.

53{ return barrier_; }
+ Here is the caller graph for this function:

◆ payoffAmount()

double payoffAmount ( ) const

Definition at line 54 of file fxdoubletouchoption.hpp.

54{ return payoffAmount_; }

◆ type()

const string & type ( ) const

Definition at line 55 of file fxdoubletouchoption.hpp.

55{ return type_; }
+ Here is the caller graph for this function:

◆ payoffCurrency()

const string & payoffCurrency ( ) const

Definition at line 56 of file fxdoubletouchoption.hpp.

56{ return payoffCurrency_; }

◆ startDate()

const string & startDate ( ) const

Definition at line 57 of file fxdoubletouchoption.hpp.

57{ return startDate_; }

◆ calendar()

const string & calendar ( ) const

Definition at line 58 of file fxdoubletouchoption.hpp.

58{ return calendar_; }

◆ fxIndex()

const string & fxIndex ( ) const

Definition at line 59 of file fxdoubletouchoption.hpp.

59{ return fxIndex_; }
+ Here is the caller graph for this function:

◆ fromXML()

void fromXML ( XMLNode node)
overridevirtual

Reimplemented from Trade.

Definition at line 206 of file fxdoubletouchoption.cpp.

206 {
207 Trade::fromXML(node);
208 XMLNode* fxNode = XMLUtils::getChildNode(node, "FxDoubleTouchOptionData");
209 QL_REQUIRE(fxNode, "No FxDoubleTouchOptionData Node");
210 option_.fromXML(XMLUtils::getChildNode(fxNode, "OptionData"));
211 barrier_.fromXML(XMLUtils::getChildNode(fxNode, "BarrierData"));
212 DoubleBarrier::Type barrierType = parseDoubleBarrierType(barrier_.type());
213 switch (barrierType) {
214 case DoubleBarrier::KnockIn:
215 type_ = "KnockIn";
216 break;
217 case DoubleBarrier::KnockOut:
218 type_ = "KnockOut";
219 break;
220 default:
221 QL_FAIL("unsupported barrier type " << barrierType);
222 }
223
224 foreignCurrency_ = XMLUtils::getChildValue(fxNode, "ForeignCurrency", true);
225 domesticCurrency_ = XMLUtils::getChildValue(fxNode, "DomesticCurrency", true);
226 payoffCurrency_ = XMLUtils::getChildValue(fxNode, "PayoffCurrency", true);
227 startDate_ = XMLUtils::getChildValue(fxNode, "StartDate", false);
228 calendar_ = XMLUtils::getChildValue(fxNode, "Calendar", false);
229 fxIndex_ = XMLUtils::getChildValue(fxNode, "FXIndex", false);
230 payoffAmount_ = XMLUtils::getChildValueAsDouble(fxNode, "PayoffAmount", true);
231}
virtual void fromXML(ore::data::XMLNode *node) override
Definition: barrierdata.cpp:25
virtual void fromXML(XMLNode *node) override
Definition: optiondata.cpp:32
virtual void fromXML(XMLNode *node) override
Definition: trade.cpp:34
static Real getChildValueAsDouble(XMLNode *node, const string &name, bool mandatory=false, double defaultValue=0.0)
Definition: xmlutils.cpp:286
static string getChildValue(XMLNode *node, const string &name, bool mandatory=false, const string &defaultValue=string())
Definition: xmlutils.cpp:277
static XMLNode * getChildNode(XMLNode *n, const string &name="")
Definition: xmlutils.cpp:387
rapidxml::xml_node< char > XMLNode
Definition: xmlutils.hpp:60
+ Here is the call graph for this function:

◆ toXML()

XMLNode * toXML ( XMLDocument doc) const
overridevirtual

Reimplemented from Trade.

Definition at line 233 of file fxdoubletouchoption.cpp.

233 {
234 XMLNode* node = Trade::toXML(doc);
235 XMLNode* fxNode = doc.allocNode("FxDoubleTouchOptionData");
236 XMLUtils::appendNode(node, fxNode);
237 XMLUtils::appendNode(fxNode, option_.toXML(doc));
238 XMLUtils::appendNode(fxNode, barrier_.toXML(doc));
239 XMLUtils::addChild(doc, fxNode, "ForeignCurrency", foreignCurrency_);
240 XMLUtils::addChild(doc, fxNode, "DomesticCurrency", domesticCurrency_);
241 XMLUtils::addChild(doc, fxNode, "PayoffCurrency", payoffCurrency_);
242 XMLUtils::addChild(doc, fxNode, "PayoffAmount", payoffAmount_);
243 if (startDate_ != "")
244 XMLUtils::addChild(doc, fxNode, "StartDate", startDate_);
245 if (fxIndex_ != "")
246 XMLUtils::addChild(doc, fxNode, "FXIndex", fxIndex_);
247 if (calendar_ != "")
248 XMLUtils::addChild(doc, fxNode, "Calendar", calendar_);
249
250 return node;
251}
virtual ore::data::XMLNode * toXML(ore::data::XMLDocument &doc) const override
Definition: barrierdata.cpp:49
virtual XMLNode * toXML(XMLDocument &doc) const override
Definition: optiondata.cpp:86
virtual XMLNode * toXML(XMLDocument &doc) const override
Definition: trade.cpp:46
static XMLNode * addChild(XMLDocument &doc, XMLNode *n, const string &name)
Definition: xmlutils.cpp:181
static void appendNode(XMLNode *parent, XMLNode *child)
Definition: xmlutils.cpp:406
+ Here is the call graph for this function:

◆ checkBarrier()

bool checkBarrier ( Real  spot,
Barrier::Type  type,
Real  level 
)
private

Definition at line 193 of file fxdoubletouchoption.cpp.

193 {
194 switch (type) {
195 case Barrier::DownIn:
196 case Barrier::DownOut:
197 return spot <= barrier;
198 case Barrier::UpIn:
199 case Barrier::UpOut:
200 return spot >= barrier;
201 default:
202 QL_FAIL("unknown barrier type " << type);
203 }
204}
+ Here is the call graph for this function:

Member Data Documentation

◆ option_

OptionData option_
private

Definition at line 70 of file fxdoubletouchoption.hpp.

◆ barrier_

BarrierData barrier_
private

Definition at line 71 of file fxdoubletouchoption.hpp.

◆ startDate_

string startDate_
private

Definition at line 72 of file fxdoubletouchoption.hpp.

◆ calendar_

string calendar_
private

Definition at line 73 of file fxdoubletouchoption.hpp.

◆ fxIndex_

string fxIndex_
private

Definition at line 74 of file fxdoubletouchoption.hpp.

◆ payoffAmount_

Real payoffAmount_
private

Definition at line 75 of file fxdoubletouchoption.hpp.

◆ type_

string type_
private

Definition at line 76 of file fxdoubletouchoption.hpp.

◆ payoffCurrency_

string payoffCurrency_
private

Definition at line 77 of file fxdoubletouchoption.hpp.

◆ start_

QuantLib::Date start_
private

Definition at line 80 of file fxdoubletouchoption.hpp.

◆ cal_

QuantLib::Calendar cal_
private

Definition at line 81 of file fxdoubletouchoption.hpp.