Skip to content

Commit 57cbe31

Browse files
rolandlichtersjenkins
authored andcommitted
QPR-8562 movr optimizer data from model builder to model data
1 parent 5b06208 commit 57cbe31

3 files changed

Lines changed: 27 additions & 14 deletions

File tree

OREData/ored/model/commodityschwartzmodelbuilder.cpp

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -42,10 +42,7 @@ CommoditySchwartzModelBuilder::CommoditySchwartzModelBuilder(
4242
const QuantLib::Currency& baseCcy, const std::string& configuration,
4343
const std::string& referenceCalibrationGrid)
4444
: market_(market), configuration_(configuration), data_(data), referenceCalibrationGrid_(referenceCalibrationGrid),
45-
baseCcy_(baseCcy),
46-
optimizationMethod_(boost::shared_ptr<OptimizationMethod>(new LevenbergMarquardt(1E-8, 1E-8, 1E-8))),
47-
endCriteria_(EndCriteria(1000, 500, 1E-8, 1E-8, 1E-8)),
48-
calibrationErrorType_(BlackCalibrationHelper::RelativePriceError) {
45+
baseCcy_(baseCcy) {
4946

5047
optionActive_ = std::vector<bool>(data_->optionExpiries().size(), false);
5148
marketObserver_ = boost::make_shared<MarketObserver>();
@@ -132,7 +129,6 @@ void CommoditySchwartzModelBuilder::performCalculations() const {
132129

133130
// check which parameters are kept fixed
134131
std::vector<bool> fix(model_->parametrization()->numberOfParameters(), true);
135-
Constraint constraint;
136132
std::vector<Real> weights;
137133
Size freeParams = 0;
138134
if (data_->calibrateSigma()) {
@@ -155,7 +151,7 @@ void CommoditySchwartzModelBuilder::performCalculations() const {
155151
<< " sigma=" << parametrization_->sigmaParameter()
156152
<< " kappa=" << parametrization_->kappaParameter());
157153

158-
model_->calibrate(optionBasket_, *optimizationMethod_, endCriteria_, constraint, weights, fix);
154+
model_->calibrate(optionBasket_, *data_->optimizationMethod(), data_->endCriteria(), data_->constraint(), weights, fix);
159155

160156
LOG("CommoditySchwartzModel for name " << data_->name() << " after calibration:"
161157
<< " sigma=" << parametrization_->sigmaParameter()
@@ -165,7 +161,7 @@ void CommoditySchwartzModelBuilder::performCalculations() const {
165161
LOG("CommoditySchwartzModel calibration rmse error " << error_ << " for name " << data_->name());
166162
try {
167163
auto d = getCalibrationDetails(optionBasket_, parametrization_);
168-
LOG(d);
164+
DLOG(d);
169165
} catch (const std::exception& e) {
170166
WLOG("An error occurred: " << e.what());
171167
}
@@ -244,7 +240,7 @@ void CommoditySchwartzModelBuilder::buildOptionBasket() const {
244240
Real strikeValue = optionStrike(j);
245241
Handle<Quote> volQuote(boost::make_shared<SimpleQuote>(vol_->blackVol(expiryDate, strikeValue)));
246242
boost::shared_ptr<QuantExt::FutureOptionHelper> helper = boost::make_shared<QuantExt::FutureOptionHelper>(
247-
expiryDate, strikeValue, curve_, volQuote, calibrationErrorType_);
243+
expiryDate, strikeValue, curve_, volQuote, data_->calibrationErrorType());
248244
optionBasket_.push_back(helper);
249245
helper->performCalculations();
250246
expiryTimes.push_back(curve_->timeFromReference(helper->option()->exercise()->date(0)));

OREData/ored/model/commodityschwartzmodelbuilder.hpp

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -116,10 +116,6 @@ class CommoditySchwartzModelBuilder : public ModelBuilder {
116116
// market observer
117117
boost::shared_ptr<MarketObserver> marketObserver_;
118118

119-
// TODO: move to data
120-
boost::shared_ptr<OptimizationMethod> optimizationMethod_;
121-
EndCriteria endCriteria_;
122-
BlackCalibrationHelper::CalibrationErrorType calibrationErrorType_;
123119
mutable std::vector<Real> calibrationErrors_;
124120
};
125121
} // namespace data

OREData/ored/model/commodityschwartzmodeldata.hpp

Lines changed: 23 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@
2727

2828
#include <ql/time/daycounters/actualactual.hpp>
2929
#include <ql/types.hpp>
30+
#include <ql/math/optimization/levenbergmarquardt.hpp>
3031

3132
#include <qle/models/crossassetmodel.hpp>
3233

@@ -48,19 +49,31 @@ using namespace QuantLib;
4849
class CommoditySchwartzData {
4950
public:
5051
//! Default constructor
51-
CommoditySchwartzData() : driftFreeState_(false) {}
52+
CommoditySchwartzData(bool driftFreeState = false,
53+
boost::shared_ptr<OptimizationMethod> optimizationMethod = boost::make_shared<LevenbergMarquardt>(1E-8, 1E-8, 1E-8),
54+
EndCriteria endCriteria = EndCriteria(1000, 500, 1E-8, 1E-8, 1E-8),
55+
Constraint constraint = Constraint(),
56+
BlackCalibrationHelper::CalibrationErrorType calibrationErrorType = BlackCalibrationHelper::RelativePriceError)
57+
: driftFreeState_(driftFreeState), optimizationMethod_(optimizationMethod), endCriteria_(endCriteria),
58+
constraint_(constraint), calibrationErrorType_(calibrationErrorType) {}
5259

5360
//! Detailed constructor
5461
CommoditySchwartzData(std::string name, std::string currency, CalibrationType calibrationType,
5562
bool calibrateSigma, Real sigma,
5663
bool calibrateKappa, Real kappa,
5764
std::vector<std::string> optionExpiries = std::vector<std::string>(),
5865
std::vector<std::string> optionStrikes = std::vector<std::string>(),
66+
boost::shared_ptr<OptimizationMethod> optimizationMethod = boost::make_shared<LevenbergMarquardt>(1E-8, 1E-8, 1E-8),
67+
EndCriteria endCriteria = EndCriteria(1000, 500, 1E-8, 1E-8, 1E-8),
68+
Constraint constraint = Constraint(),
69+
BlackCalibrationHelper::CalibrationErrorType calibrationErrorType = BlackCalibrationHelper::RelativePriceError,
5970
bool driftFreeState = false)
6071
: name_(name), ccy_(currency), calibrationType_(calibrationType),
6172
calibrateSigma_(calibrateSigma), sigmaType_(ParamType::Constant), sigmaValue_(sigma),
6273
calibrateKappa_(calibrateKappa),kappaType_(ParamType::Constant), kappaValue_(kappa),
63-
optionExpiries_(optionExpiries), optionStrikes_(optionStrikes), driftFreeState_(driftFreeState) {}
74+
optionExpiries_(optionExpiries), optionStrikes_(optionStrikes),
75+
driftFreeState_(driftFreeState), optimizationMethod_(optimizationMethod),
76+
endCriteria_(endCriteria), constraint_(constraint), calibrationErrorType_(calibrationErrorType) {}
6477

6578
//! \name Setters/Getters
6679
//@{
@@ -76,6 +89,10 @@ class CommoditySchwartzData {
7689
std::vector<std::string>& optionExpiries() { return optionExpiries_; }
7790
std::vector<std::string>& optionStrikes() { return optionStrikes_; }
7891
bool& driftFreeState() { return driftFreeState_; }
92+
boost::shared_ptr<OptimizationMethod>& optimizationMethod() { return optimizationMethod_; }
93+
EndCriteria& endCriteria() { return endCriteria_; }
94+
Constraint& constraint() { return constraint_; }
95+
BlackCalibrationHelper::CalibrationErrorType calibrationErrorType() { return calibrationErrorType_; }
7996
//@}
8097

8198
//! \name Serialisation
@@ -103,6 +120,10 @@ class CommoditySchwartzData {
103120
std::vector<std::string> optionExpiries_;
104121
std::vector<std::string> optionStrikes_;
105122
bool driftFreeState_;
123+
boost::shared_ptr<OptimizationMethod> optimizationMethod_;
124+
EndCriteria endCriteria_;
125+
Constraint constraint_;
126+
BlackCalibrationHelper::CalibrationErrorType calibrationErrorType_;
106127
};
107128
} // namespace data
108129
} // namespace ore

0 commit comments

Comments
 (0)