Skip to content

Commit 20c868a

Browse files
damienbarkerjenkins
authored andcommitted
merge 1.0.73 into master
1 parent 25bc7e3 commit 20c868a

16 files changed

Lines changed: 56 additions & 47 deletions

OREAnalytics/orea/app/reportwriter.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -196,7 +196,7 @@ void ReportWriter::writeCashflow(ore::data::Report& report, const std::string& b
196196
auto addResults = trade->instrument()->additionalResults();
197197
auto cashFlowResults = addResults.find("cashFlowResults");
198198

199-
const Real multiplier = trade->instrument()->multiplier();
199+
const Real multiplier = trade->instrument()->multiplier() * trade->instrument()->multiplier2();
200200

201201
if (cashFlowResults == addResults.end()) {
202202

OREData/ored/portfolio/asianoption.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -171,7 +171,7 @@ void AsianOption::build(const boost::shared_ptr<EngineFactory>& engineFactory) {
171171
std::vector<Real> additionalMultipliers;
172172
maturity_ = expiryDate;
173173
maturity_ =
174-
std::max(maturity_, addPremiums(additionalInstruments, additionalMultipliers, 1.0, option_.premiumData(),
174+
std::max(maturity_, addPremiums(additionalInstruments, additionalMultipliers, mult, option_.premiumData(),
175175
positionType == QuantLib::Position::Long ? -1.0 : 1.0, payCcy, engineFactory,
176176
configuration));
177177

OREData/ored/portfolio/barrieroption.cpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -165,9 +165,9 @@ void BarrierOption::build(const boost::shared_ptr<EngineFactory>& engineFactory)
165165
// Add additional premium payments
166166
Real bsInd = (positionType == QuantLib::Position::Long ? 1.0 : -1.0);
167167
Date lastPremiumDate =
168-
addPremiums(additionalInstruments, additionalMultipliers, tradeMultiplier(), option_.premiumData(), -bsInd,
169-
tradeCurrency(), engineFactory, engineFactory->configuration(MarketContext::pricing));
170-
168+
addPremiums(additionalInstruments, additionalMultipliers, bsInd * tradeMultiplier(), option_.premiumData(),
169+
-bsInd, tradeCurrency(), engineFactory, engineFactory->configuration(MarketContext::pricing));
170+
171171
// set the maturity
172172
maturity_ = std::max(lastPremiumDate, payDate);
173173
}

OREData/ored/portfolio/capfloor.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -441,7 +441,7 @@ void CapFloor::build(const boost::shared_ptr<EngineFactory>& engineFactory) {
441441

442442
std::vector<boost::shared_ptr<Instrument>> additionalInstruments;
443443
std::vector<Real> additionalMultipliers;
444-
maturity_ = std::max(maturity_, addPremiums(additionalInstruments, additionalMultipliers, 1.0, premiumData_,
444+
maturity_ = std::max(maturity_, addPremiums(additionalInstruments, additionalMultipliers, multiplier, premiumData_,
445445
-multiplier, parseCurrency(legData_.currency()), engineFactory,
446446
engineFactory->configuration(MarketContext::pricing)));
447447

OREData/ored/portfolio/commodityspreadoption.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -284,7 +284,7 @@ void CommoditySpreadOption::build(const boost::shared_ptr<ore::data::EngineFacto
284284

285285
// Add premium
286286
auto configuration = engineBuilder->configuration(MarketContext::pricing);
287-
maturity_ = std::max(maturity_, addPremiums(additionalInstruments, additionalMultipliers, bsInd,
287+
maturity_ = std::max(maturity_, addPremiums(additionalInstruments, additionalMultipliers, firstMultiplier,
288288
optionData_.premiumData(), -bsInd, ccy, engineFactory, configuration));
289289

290290
instrument_ = boost::make_shared<VanillaInstrument>(firstInstrument, firstMultiplier, additionalInstruments,

OREData/ored/portfolio/creditdefaultswapoption.cpp

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -325,13 +325,16 @@ void CreditDefaultSwapOption::buildDefaulted(const boost::shared_ptr<EngineFacto
325325
amount *= -1.0;
326326
}
327327

328+
Position::Type positionType = parsePositionType(option_.longShort());
329+
Real indicatorLongShort = positionType == Position::Long ? 1.0 : -1.0;
330+
328331
// Use the add premiums method to add the payment.
329332
string marketConfig = Market::defaultConfiguration;
330333
auto ccy = parseCurrency(notionalCurrency_);
331334
vector<boost::shared_ptr<Instrument>> additionalInstruments;
332335
vector<Real> additionalMultipliers;
333336
Date premiumPayDate =
334-
addPremiums(additionalInstruments, additionalMultipliers, 1.0,
337+
addPremiums(additionalInstruments, additionalMultipliers, indicatorLongShort,
335338
PremiumData(amount, notionalCurrency_, paymentDate), 1.0, ccy, engineFactory, marketConfig);
336339
DLOG("FEP payment (date = " << paymentDate << ", amount = " << amount << ") added for CDS option " << id() << ".");
337340

@@ -346,8 +349,6 @@ void CreditDefaultSwapOption::buildDefaulted(const boost::shared_ptr<EngineFacto
346349
addPremium(engineFactory, ccy, marketConfig, additionalInstruments, additionalMultipliers);
347350

348351
// Instrument wrapper.
349-
Position::Type positionType = parsePositionType(option_.longShort());
350-
Real indicatorLongShort = positionType == Position::Long ? 1.0 : -1.0;
351352
instrument_ = boost::make_shared<VanillaInstrument>(qlInst, indicatorLongShort,
352353
additionalInstruments, additionalMultipliers);
353354
}
@@ -361,8 +362,8 @@ Date CreditDefaultSwapOption::addPremium(const boost::shared_ptr<EngineFactory>&
361362
// pay the premium if long the option and receive the premium if short the option.
362363
Position::Type positionType = parsePositionType(option_.longShort());
363364
Real indicatorLongShort = positionType == Position::Long ? 1.0 : -1.0;
364-
return addPremiums(additionalInstruments, additionalMultipliers, 1.0, option_.premiumData(), indicatorLongShort,
365-
tradeCurrency, ef, marketConfig);
365+
return addPremiums(additionalInstruments, additionalMultipliers, indicatorLongShort, option_.premiumData(),
366+
indicatorLongShort, tradeCurrency, ef, marketConfig);
366367
}
367368

368369
}

OREData/ored/portfolio/equitydoubletouchoption.cpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -125,9 +125,9 @@ void EquityDoubleTouchOption::build(const boost::shared_ptr<EngineFactory>& engi
125125

126126
std::vector<boost::shared_ptr<Instrument>> additionalInstruments;
127127
std::vector<Real> additionalMultipliers;
128-
Date lastPremiumDate =
129-
addPremiums(additionalInstruments, additionalMultipliers, payoffAmount_, option_.premiumData(),
130-
isLong ? -1.0 : 1.0, ccy, engineFactory, builder->configuration(MarketContext::pricing));
128+
Date lastPremiumDate = addPremiums(
129+
additionalInstruments, additionalMultipliers, (isLong ? 1.0 : -1.0) * payoffAmount_, option_.premiumData(),
130+
isLong ? -1.0 : 1.0, ccy, engineFactory, builder->configuration(MarketContext::pricing));
131131

132132
Handle<Quote> spot = market->equitySpot(assetName);
133133
instrument_ = boost::make_shared<DoubleBarrierOptionWrapper>(

OREData/ored/portfolio/equitytouchoption.cpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -145,9 +145,9 @@ void EquityTouchOption::build(const boost::shared_ptr<EngineFactory>& engineFact
145145

146146
std::vector<boost::shared_ptr<Instrument>> additionalInstruments;
147147
std::vector<Real> additionalMultipliers;
148-
Date lastPremiumDate =
149-
addPremiums(additionalInstruments, additionalMultipliers, payoffAmount_, option_.premiumData(),
150-
isLong ? -1.0 : 1.0, ccy, engineFactory, builder->configuration(MarketContext::pricing));
148+
Date lastPremiumDate = addPremiums(
149+
additionalInstruments, additionalMultipliers, (isLong ? 1.0 : -1.0) * payoffAmount_, option_.premiumData(),
150+
isLong ? -1.0 : 1.0, ccy, engineFactory, builder->configuration(MarketContext::pricing));
151151

152152
Handle<Quote> spot = market->equitySpot(assetName);
153153
instrument_ = boost::make_shared<SingleBarrierOptionWrapper>(

OREData/ored/portfolio/fxdigitalbarrieroption.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -142,7 +142,8 @@ void FxDigitalBarrierOption::build(const boost::shared_ptr<EngineFactory>& engin
142142
// 2) add fee payment as additional trade leg for cash flow reporting
143143
std::vector<boost::shared_ptr<Instrument>> additionalInstruments;
144144
std::vector<Real> additionalMultipliers;
145-
Date lastPremiumDate = addPremiums(additionalInstruments, additionalMultipliers, 1.0, option_.premiumData(), -bsInd,
145+
Date lastPremiumDate = addPremiums(additionalInstruments, additionalMultipliers,
146+
positionType == Position::Long ? 1.0 : -1.0, option_.premiumData(), -bsInd,
146147
soldCcy, engineFactory, fxOptBuilder->configuration(MarketContext::pricing));
147148

148149
Settlement::Type settleType = parseSettlementType(option_.settlement());

OREData/ored/portfolio/fxdoubletouchoption.cpp

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -157,9 +157,10 @@ void FxDoubleTouchOption::build(const boost::shared_ptr<EngineFactory>& engineFa
157157

158158
std::vector<boost::shared_ptr<Instrument>> additionalInstruments;
159159
std::vector<Real> additionalMultipliers;
160-
Date lastPremiumDate = addPremiums(additionalInstruments, additionalMultipliers, payoffAmount_,
161-
option_.premiumData(), isLong ? -1.0 : 1.0, parseCurrency(payoffCurrency_),
162-
engineFactory, builder->configuration(MarketContext::pricing));
160+
Date lastPremiumDate =
161+
addPremiums(additionalInstruments, additionalMultipliers, (isLong ? 1.0 : -1.0) * payoffAmount_,
162+
option_.premiumData(), isLong ? -1.0 : 1.0, parseCurrency(payoffCurrency_), engineFactory,
163+
builder->configuration(MarketContext::pricing));
163164

164165
Handle<Quote> spot = market->fxSpot(fgnCcy.code() + domCcy.code());
165166
instrument_ = boost::make_shared<DoubleBarrierOptionWrapper>(

0 commit comments

Comments
 (0)