Skip to content

Commit 54e1ce2

Browse files
pcaspersjenkins
authored andcommitted
QPR-12014 emit warning if no sensi template is set for a trade
1 parent cafa2c5 commit 54e1ce2

2 files changed

Lines changed: 16 additions & 2 deletions

File tree

OREData/ored/portfolio/trade.cpp

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,9 +16,10 @@
1616
FITNESS FOR A PARTICULAR PURPOSE. See the license for more details.
1717
*/
1818

19+
#include <ored/portfolio/structuredtradewarning.hpp>
1920
#include <ored/portfolio/trade.hpp>
20-
#include <ored/utilities/to_string.hpp>
2121
#include <ored/utilities/indexnametranslator.hpp>
22+
#include <ored/utilities/to_string.hpp>
2223

2324
#include <qle/cashflows/equitycouponpricer.hpp>
2425
#include <qle/cashflows/indexedcoupon.hpp>
@@ -136,6 +137,7 @@ void Trade::reset() {
136137
issuer_.clear();
137138
requiredFixings_.clear();
138139
sensitivityTemplate_.clear();
140+
sensitivityTemplateSet_ = false;
139141
}
140142

141143
const std::map<std::string, boost::any>& Trade::additionalData() const { return additionalData_; }
@@ -280,6 +282,17 @@ void Trade::setLegBasedAdditionalData(const Size i, Size resultLegId) const {
280282

281283
void Trade::setSensitivityTemplate(const EngineBuilder& builder) {
282284
sensitivityTemplate_ = builder.engineParameter("SensitivityTemplate", {}, false, std::string());
285+
sensitivityTemplateSet_ = true;
286+
}
287+
288+
const std::string& Trade::sensitivityTemplate() const {
289+
if (!sensitivityTemplateSet_) {
290+
StructuredTradeWarningMessage(
291+
id(), tradeType(), "No valid sensitivty template.",
292+
"Either build() was not called, or the trade builder did not set the sensitivity template.")
293+
.log();
294+
}
295+
return sensitivityTemplate_;
283296
}
284297

285298
} // namespace data

OREData/ored/portfolio/trade.hpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -163,7 +163,7 @@ class Trade : public XMLSerializable {
163163

164164
/*! returns the pricing engine id 'Swap/DiscountedCashflows/DiscountingSwapEngine'
165165
for this trade, this is only available after build() has been called */
166-
const std::string& sensitivityTemplate() const { return sensitivityTemplate_; }
166+
const std::string& sensitivityTemplate() const;
167167
//@}
168168

169169
//! \name Utility
@@ -200,6 +200,7 @@ class Trade : public XMLSerializable {
200200
Date maturity_;
201201
string issuer_;
202202
string sensitivityTemplate_;
203+
bool sensitivityTemplateSet_ = false;
203204

204205
std::size_t savedNumberOfPricings_ = 0;
205206
boost::timer::nanosecond_type savedCumulativePricingTime_ = 0;

0 commit comments

Comments
 (0)