diff --git a/ql/termstructures/globalbootstrap.cpp b/ql/termstructures/globalbootstrap.cpp index 9366b53014..d9def92310 100644 --- a/ql/termstructures/globalbootstrap.cpp +++ b/ql/termstructures/globalbootstrap.cpp @@ -78,7 +78,7 @@ void MultiCurveBootstrap::runMultiCurveBootstrap() { std::vector results; results.reserve(contributors_.size()); -for (auto & contributor : contributors_) { + for (auto& contributor : contributors_) { results.push_back(contributor->evaluateCostFunction()); } diff --git a/ql/termstructures/globalbootstrap.hpp b/ql/termstructures/globalbootstrap.hpp index dfece20f3c..92e150f0ab 100644 --- a/ql/termstructures/globalbootstrap.hpp +++ b/ql/termstructures/globalbootstrap.hpp @@ -111,21 +111,24 @@ template class GlobalBootstrap final : public MultiCurveBootstrapC public: GlobalBootstrap(Real accuracy = Null(), ext::shared_ptr optimizer = nullptr, - ext::shared_ptr endCriteria = nullptr); - GlobalBootstrap(std::vector > additionalHelpers, + ext::shared_ptr endCriteria = nullptr, + std::vector instrumentWeights = {}); + GlobalBootstrap(std::vector> additionalHelpers, std::function()> additionalDates, AdditionalPenalties additionalPenalties, Real accuracy = Null(), ext::shared_ptr optimizer = nullptr, ext::shared_ptr endCriteria = nullptr, - ext::shared_ptr additionalVariables = nullptr); - GlobalBootstrap(std::vector > additionalHelpers, + ext::shared_ptr additionalVariables = nullptr, + std::vector instrumentWeights = {}); + GlobalBootstrap(std::vector> additionalHelpers, std::function()> additionalDates, std::function additionalPenalties, Real accuracy = Null(), ext::shared_ptr optimizer = nullptr, ext::shared_ptr endCriteria = nullptr, - ext::shared_ptr additionalVariables = nullptr); + ext::shared_ptr additionalVariables = nullptr, + std::vector instrumentWeights = {}); void setup(Curve *ts); void calculate() const; @@ -141,40 +144,44 @@ template class GlobalBootstrap final : public MultiCurveBootstrapC Real accuracy_; ext::shared_ptr optimizer_; ext::shared_ptr endCriteria_; - mutable std::vector > additionalHelpers_; + std::vector> additionalHelpers_; + mutable std::vector> aliveInstruments_; + mutable std::vector> aliveAdditionalHelpers_; std::function()> additionalDates_; AdditionalPenalties additionalPenalties_; ext::shared_ptr additionalVariables_; + mutable std::vector instrumentWeights_; + mutable std::vector aliveInstrumentWeights_; mutable bool initialized_ = false, validCurve_ = false; - mutable Size firstHelper_ = 0, numberHelpers_ = 0; - mutable Size firstAdditionalHelper_ = 0, numberAdditionalHelpers_= 0; mutable ext::shared_ptr parentBootstrapper_ = nullptr; }; // template definitions template -GlobalBootstrap::GlobalBootstrap( - Real accuracy, - ext::shared_ptr optimizer, - ext::shared_ptr endCriteria) +GlobalBootstrap::GlobalBootstrap(Real accuracy, + ext::shared_ptr optimizer, + ext::shared_ptr endCriteria, + std::vector instrumentWeights) : ts_(nullptr), accuracy_(accuracy), optimizer_(std::move(optimizer)), - endCriteria_(std::move(endCriteria)) {} + endCriteria_(std::move(endCriteria)), instrumentWeights_(std::move(instrumentWeights)) {} template GlobalBootstrap::GlobalBootstrap( - std::vector > additionalHelpers, + std::vector> additionalHelpers, std::function()> additionalDates, AdditionalPenalties additionalPenalties, Real accuracy, ext::shared_ptr optimizer, ext::shared_ptr endCriteria, - ext::shared_ptr additionalVariables) + ext::shared_ptr additionalVariables, + std::vector instrumentWeights) : ts_(nullptr), accuracy_(accuracy), optimizer_(std::move(optimizer)), endCriteria_(std::move(endCriteria)), additionalHelpers_(std::move(additionalHelpers)), additionalDates_(std::move(additionalDates)), additionalPenalties_(std::move(additionalPenalties)), - additionalVariables_(std::move(additionalVariables)) {} + additionalVariables_(std::move(additionalVariables)), + instrumentWeights_(std::move(instrumentWeights)) {} template GlobalBootstrap::GlobalBootstrap( @@ -184,15 +191,19 @@ GlobalBootstrap::GlobalBootstrap( Real accuracy, ext::shared_ptr optimizer, ext::shared_ptr endCriteria, - ext::shared_ptr additionalVariables) -: GlobalBootstrap(std::move(additionalHelpers), std::move(additionalDates), - additionalPenalties - ? [f=std::move(additionalPenalties)](const std::vector