Skip to content

Commit 1ab4837

Browse files
pcaspersjenkins
authored andcommitted
QPR-11773 remove regressionOnExerciseOnly parameter, fixes, update doc
1 parent 487e1c5 commit 1ab4837

21 files changed

Lines changed: 83 additions & 95 deletions

OREData/ored/portfolio/builders/currencyswap.cpp

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -106,8 +106,7 @@ boost::shared_ptr<PricingEngine> CamAmcCurrencySwapEngineBuilder::engineImpl(con
106106
parsePolynomType(engineParameter("Training.BasisFunction")),
107107
parseSobolBrownianGeneratorOrdering(engineParameter("BrownianBridgeOrdering")),
108108
parseSobolRsgDirectionIntegers(engineParameter("SobolDirectionIntegers")), discountCurves, simulationDates_,
109-
externalModelIndices, parseBool(engineParameter("MinObsDate")),
110-
parseBool(engineParameter("RegressionOnExerciseOnly")));
109+
externalModelIndices, parseBool(engineParameter("MinObsDate")));
111110

112111
return engine;
113112
}

OREData/ored/portfolio/builders/fxforward.cpp

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -79,8 +79,7 @@ boost::shared_ptr<PricingEngine> CamAmcFxForwardEngineBuilder::engineImpl(const
7979
parsePolynomType(engineParameter("Training.BasisFunction")),
8080
parseSobolBrownianGeneratorOrdering(engineParameter("BrownianBridgeOrdering")),
8181
parseSobolRsgDirectionIntegers(engineParameter("SobolDirectionIntegers")), discountCurves, simulationDates_,
82-
externalModelIndices, parseBool(engineParameter("MinObsDate")),
83-
parseBool(engineParameter("RegressionOnExerciseOnly")));
82+
externalModelIndices, parseBool(engineParameter("MinObsDate")));
8483

8584
return engine;
8685
}

OREData/ored/portfolio/builders/fxoption.cpp

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -94,8 +94,7 @@ boost::shared_ptr<PricingEngine> CamAmcFxOptionEngineBuilder::engineImpl(const s
9494
parsePolynomType(engineParameter("Training.BasisFunction")),
9595
parseSobolBrownianGeneratorOrdering(engineParameter("BrownianBridgeOrdering")),
9696
parseSobolRsgDirectionIntegers(engineParameter("SobolDirectionIntegers")), discountCurves, simulationDates_,
97-
externalModelIndices, parseBool(engineParameter("MinObsDate")),
98-
parseBool(engineParameter("RegressionOnExerciseOnly")));
97+
externalModelIndices, parseBool(engineParameter("MinObsDate")));
9998

10099
return engine;
101100
}

OREData/ored/portfolio/builders/multilegoption.cpp

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -332,8 +332,7 @@ boost::shared_ptr<PricingEngine> CamAmcMultiLegOptionEngineBuilder::engineImpl(
332332
parsePolynomType(engineParameter("Training.BasisFunction")),
333333
parseSobolBrownianGeneratorOrdering(engineParameter("BrownianBridgeOrdering")),
334334
parseSobolRsgDirectionIntegers(engineParameter("SobolDirectionIntegers")), discountCurves, simulationDates_,
335-
externalModelIndices, parseBool(engineParameter("MinObsDate")),
336-
parseBool(engineParameter("RegressionOnExerciseOnly")));
335+
externalModelIndices, parseBool(engineParameter("MinObsDate")));
337336

338337
return engine;
339338
}

OREData/ored/portfolio/builders/swap.cpp

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -44,8 +44,7 @@ boost::shared_ptr<PricingEngine> CamAmcSwapEngineBuilder::buildMcEngine(const bo
4444
parsePolynomType(engineParameter("Training.BasisFunction")),
4545
parseSobolBrownianGeneratorOrdering(engineParameter("BrownianBridgeOrdering")),
4646
parseSobolRsgDirectionIntegers(engineParameter("SobolDirectionIntegers")), discountCurve, simulationDates,
47-
externalModelIndices, parseBool(engineParameter("MinObsDate")),
48-
parseBool(engineParameter("RegressionOnExerciseOnly")));
47+
externalModelIndices, parseBool(engineParameter("MinObsDate")));
4948
}
5049

5150
boost::shared_ptr<PricingEngine> CamAmcSwapEngineBuilder::engineImpl(const Currency& ccy) {

OREData/ored/portfolio/builders/swaption.cpp

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -51,8 +51,7 @@ boost::shared_ptr<PricingEngine> buildMcEngine(const std::function<string(string
5151
parsePolynomType(engineParameters("Training.BasisFunction")),
5252
parseSobolBrownianGeneratorOrdering(engineParameters("BrownianBridgeOrdering")),
5353
parseSobolRsgDirectionIntegers(engineParameters("SobolDirectionIntegers")), discountCurve, simulationDates,
54-
externalModelIndices, parseBool(engineParameters("MinObsDate")),
55-
parseBool(engineParameters("RegressionOnExerciseOnly")));
54+
externalModelIndices, parseBool(engineParameters("MinObsDate")));
5655
}
5756
} // namespace
5857

QuantExt/qle/models/lgmvectorised.cpp

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -191,7 +191,7 @@ RandomVariable LgmVectorised::compoundedOnRate(const boost::shared_ptr<Overnight
191191
const std::vector<Date>& valueDates, const std::vector<Real>& dt,
192192
const Natural rateCutoff, const bool includeSpread, const Real spread,
193193
const Real gearing, const Period lookback,
194-
const DayCounter& accrualDayCounter, const Real cap, const Real floor,
194+
const DayCounter& accrualDayCounter, Real cap, Real floor,
195195
const bool localCapFloor, const bool nakedOption, const Time t,
196196
const RandomVariable& x) const {
197197

@@ -299,15 +299,15 @@ RandomVariable LgmVectorised::compoundedOnRate(const boost::shared_ptr<Overnight
299299
Rate tau = accrualDayCounter.yearFraction(valueDates.front(), valueDates.back());
300300
RandomVariable rate = (compoundFactorLgm - RandomVariable(x.size(), 1.0)) / RandomVariable(x.size(), tau);
301301
RandomVariable swapletRate = RandomVariable(x.size(), gearing) * rate;
302-
// RandomVariable effectiveSpread, effectiveIndexFixing;
302+
RandomVariable effectiveSpread, effectiveIndexFixing;
303303
if (!includeSpread) {
304304
swapletRate += RandomVariable(x.size(), spread);
305305
effectiveSpread = RandomVariable(x.size(), spread);
306306
effectiveIndexFixing = rate;
307307
} else {
308308
effectiveSpread =
309309
rate - (compoundFactorWithoutSpreadLgm - RandomVariable(x.size(), 1.0)) / RandomVariable(x.size(), tau);
310-
effectiveIndexFixing = rate - effectiveSpread_;
310+
effectiveIndexFixing = rate - effectiveSpread;
311311
}
312312

313313
if (cap == Null<Real>() && floor == Null<Real>())
@@ -349,9 +349,9 @@ RandomVariable LgmVectorised::averagedOnRate(const boost::shared_ptr<OvernightIn
349349
const std::vector<Date>& fixingDates, const std::vector<Date>& valueDates,
350350
const std::vector<Real>& dt, const Natural rateCutoff,
351351
const bool includeSpread, const Real spread, const Real gearing,
352-
const Period lookback, const DayCounter& accrualDayCounter, const Real cap,
353-
const Real floor, const bool localCapFloor, const bool nakedOption,
354-
const Time t, const RandomVariable& x) const {
352+
const Period lookback, const DayCounter& accrualDayCounter, Real cap,
353+
Real floor, const bool localCapFloor, const bool nakedOption, const Time t,
354+
const RandomVariable& x) const {
355355

356356
QL_REQUIRE(!includeSpread || QuantLib::close_enough(gearing, 1.0),
357357
"LgmVectorised::averageOnRate(): if include spread = true, only a gearing 1.0 is allowed - scale "
@@ -473,8 +473,8 @@ RandomVariable LgmVectorised::averagedOnRate(const boost::shared_ptr<OvernightIn
473473
RandomVariable LgmVectorised::averagedBmaRate(const boost::shared_ptr<BMAIndex>& index,
474474
const std::vector<Date>& fixingDates, const Date& accrualStartDate,
475475
const Date& accrualEndDate, const bool includeSpread, const Real spread,
476-
const Real gearing, const Real cap, const Real floor,
477-
const bool nakedOption, const Time t, const RandomVariable& x) const {
476+
const Real gearing, Real cap, Real floor, const bool nakedOption,
477+
const Time t, const RandomVariable& x) const {
478478

479479
// similar to AverageBMACouponPricer
480480

@@ -563,7 +563,7 @@ RandomVariable LgmVectorised::averagedBmaRate(const boost::shared_ptr<BMAIndex>&
563563
}
564564

565565
if (nakedOption)
566-
rate = RandomVariable(x.size(), 0.0);
566+
avgBMA = RandomVariable(x.size(), 0.0);
567567

568568
RandomVariable forwardRate = (avgBMA - RandomVariable(x.size(), spread)) / RandomVariable(x.size(), gearing);
569569
RandomVariable floorletRate(x.size(), 0.0);
@@ -584,12 +584,12 @@ RandomVariable LgmVectorised::averagedBmaRate(const boost::shared_ptr<BMAIndex>&
584584
capletRate = -capletRate;
585585
}
586586

587-
return rate + floorletRate - capletRate;
587+
return avgBMA + floorletRate - capletRate;
588588
}
589589

590590
RandomVariable LgmVectorised::subPeriodsRate(const boost::shared_ptr<InterestRateIndex>& index,
591-
const std::vector<Date>& fixingDates, const Real cap, const Real floor,
592-
const bool nakedOption, const Time t, const RandomVariable& x) const {
591+
const std::vector<Date>& fixingDates, const Time t,
592+
const RandomVariable& x) const {
593593

594594
return fixing(index, fixingDates.front(), t, x);
595595
}

QuantExt/qle/models/lgmvectorised.hpp

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -65,25 +65,24 @@ class LgmVectorised {
6565
const std::vector<Date>& fixingDates, const std::vector<Date>& valueDates,
6666
const std::vector<Real>& dt, const Natural rateCutoff, const bool includeSpread,
6767
const Real spread, const Real gearing, const Period lookback,
68-
const DayCounter& accrualDayCounter, const Real cap, const Real floor,
69-
const bool localCapFloor, const bool nakedOption, const Time t,
70-
const RandomVariable& x) const;
68+
const DayCounter& accrualDayCounter, Real cap, Real floor, const bool localCapFloor,
69+
const bool nakedOption, const Time t, const RandomVariable& x) const;
7170

7271
/* Exact if no cap/floors are present and t <= first value date.
7372
Approximations are applied for t > first value date or when cap / floors are present. */
7473
RandomVariable averagedOnRate(const boost::shared_ptr<OvernightIndex>& index, const std::vector<Date>& fixingDates,
7574
const std::vector<Date>& valueDates, const std::vector<Real>& dt,
7675
const Natural rateCutoff, const bool includeSpread, const Real spread,
7776
const Real gearing, const Period lookback, const DayCounter& accrualDayCounter,
78-
const Real cap, const Real floor, const bool localCapFloor, const bool nakedOption,
79-
const Time t, const RandomVariable& x) const;
77+
Real cap, Real floor, const bool localCapFloor, const bool nakedOption, const Time t,
78+
const RandomVariable& x) const;
8079

8180
/* Exact if no cap/floors are present and t <= first value date.
8281
Approximations are applied for t > first value date or when cap / floors are present. */
8382
RandomVariable averagedBmaRate(const boost::shared_ptr<BMAIndex>& index, const std::vector<Date>& fixingDates,
8483
const Date& accrualStartDate, const Date& accrualEndDate, const bool includeSpread,
85-
const Real spread, const Real gearing, const Real cap, const Real floor,
86-
const bool nakedOption, const Time t, const RandomVariable& x) const;
84+
const Real spread, const Real gearing, Real cap, Real floor, const bool nakedOption,
85+
const Time t, const RandomVariable& x) const;
8786

8887
/* Approximation via plain Ibor coupon with fixing date = first fixing date and the fixing() method above. */
8988
RandomVariable subPeriodsRate(const boost::shared_ptr<InterestRateIndex>& index,

QuantExt/qle/pricingengines/mccamcurrencyswapengine.cpp

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -28,12 +28,10 @@ McCamCurrencySwapEngine::McCamCurrencySwapEngine(
2828
const Size pricingSamples, const Size calibrationSeed, const Size pricingSeed, const Size polynomOrder,
2929
const LsmBasisSystem::PolynomialType polynomType, const SobolBrownianGenerator::Ordering ordering,
3030
const SobolRsg::DirectionIntegers directionIntegers, const std::vector<Handle<YieldTermStructure>>& discountCurves,
31-
const std::vector<Date>& simulationDates, const std::vector<Size>& externalModelIndices, const bool minimalObsDate,
32-
const bool regressionOnExerciseOnly)
31+
const std::vector<Date>& simulationDates, const std::vector<Size>& externalModelIndices, const bool minimalObsDate)
3332
: McMultiLegBaseEngine(model, calibrationPathGenerator, pricingPathGenerator, calibrationSamples, pricingSamples,
3433
calibrationSeed, pricingSeed, polynomOrder, polynomType, ordering, directionIntegers,
35-
discountCurves, simulationDates, externalModelIndices, minimalObsDate,
36-
regressionOnExerciseOnly),
34+
discountCurves, simulationDates, externalModelIndices, minimalObsDate),
3735
currencies_(currencies), npvCcy_(npvCcy) {
3836
registerWith(model_);
3937
for (auto const& h : discountCurves)

QuantExt/qle/pricingengines/mccamcurrencyswapengine.hpp

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -41,8 +41,7 @@ class McCamCurrencySwapEngine : public McMultiLegBaseEngine, public CurrencySwap
4141
const SobolRsg::DirectionIntegers directionIntegers = SobolRsg::JoeKuoD7,
4242
const std::vector<Handle<YieldTermStructure>>& discountCurves = std::vector<Handle<YieldTermStructure>>(),
4343
const std::vector<Date>& simulationDates = std::vector<Date>(),
44-
const std::vector<Size>& externalModelIndices = std::vector<Size>(), const bool minimalObsDate = true,
45-
const bool regressionOnExerciseOnly = false);
44+
const std::vector<Size>& externalModelIndices = std::vector<Size>(), const bool minimalObsDate = true);
4645

4746
void calculate() const override;
4847
const Handle<CrossAssetModel>& model() const { return model_; }

0 commit comments

Comments
 (0)