Skip to content

Commit 5912088

Browse files
pcaspersjenkins
authored andcommitted
QPR-12275 enable scripted trade for external discount curve, security spread
1 parent cce4127 commit 5912088

1 file changed

Lines changed: 13 additions & 1 deletion

File tree

OREData/ored/portfolio/builders/scriptedtrade.cpp

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@
4242
#include <ored/utilities/indexnametranslator.hpp>
4343
#include <ored/utilities/log.hpp>
4444
#include <ored/utilities/to_string.hpp>
45+
#include <ored/utilities/marketdata.hpp>
4546

4647
#include <qle/indexes/equityindex.hpp>
4748
#include <qle/indexes/fxindex.hpp>
@@ -51,6 +52,7 @@
5152
#include <qle/termstructures/pricetermstructureadapter.hpp>
5253

5354
#include <ql/termstructures/volatility/equityfx/blackconstantvol.hpp>
55+
#include <ql/termstructures/yield/zerospreadedtermstructure.hpp>
5456

5557
#include <boost/lexical_cast.hpp>
5658

@@ -174,8 +176,18 @@ ScriptedTradeEngineBuilder::engine(const std::string& id, const ScriptedTrade& s
174176

175177
// 12 get the t0 curves for each model ccy
176178

179+
std::string externalDiscountCurve = scriptedTrade.envelope().additionalField("discount_curve", false);
180+
std::string externalSecuritySpread = scriptedTrade.envelope().additionalField("security_spreads", false);
177181
for (auto const& c : modelCcys_) {
178-
modelCurves_.push_back(market_->discountCurve(c, configuration(MarketContext::pricing)));
182+
// for base ccy we account for an external discount curve and security spread if given
183+
Handle<YieldTermStructure> yts =
184+
externalDiscountCurve.empty() || c != baseCcy_
185+
? market_->discountCurve(c, configuration(MarketContext::pricing))
186+
: indexOrYieldCurve(market_, externalDiscountCurve, configuration(MarketContext::pricing));
187+
if (!externalSecuritySpread.empty() && c == baseCcy_)
188+
yts = Handle<YieldTermStructure>(boost::make_shared<ZeroSpreadedTermStructure>(
189+
yts, market_->securitySpread(externalSecuritySpread, configuration(MarketContext::pricing))));
190+
modelCurves_.push_back(yts);
179191
DLOG("curve for " << c << " added.");
180192
}
181193

0 commit comments

Comments
 (0)