Skip to content

Commit 94f37af

Browse files
damienbarkerjenkins
authored andcommitted
QPR-10662 build portfolio with correct market
1 parent 8dfbe2d commit 94f37af

13 files changed

Lines changed: 53 additions & 43 deletions

OREAnalytics/orea/app/analytic.hpp

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -115,6 +115,7 @@ class Analytic {
115115
return boost::dynamic_pointer_cast<MarketImpl>(market_);
116116
}
117117
const boost::shared_ptr<ore::data::Portfolio>& portfolio() const { return portfolio_; };
118+
void setMarket(const boost::shared_ptr<ore::data::Market>& market) { market_ = market; };
118119
void setPortfolio(const boost::shared_ptr<ore::data::Portfolio>& portfolio) { portfolio_ = portfolio; };
119120
std::vector<boost::shared_ptr<ore::data::TodaysMarketParameters>> todaysMarketParams();
120121
const boost::shared_ptr<ore::data::Loader>& loader() const { return loader_; };
@@ -137,6 +138,8 @@ class Analytic {
137138
bool hasDependentAnalytic(const std::string& key) { return dependentAnalytics_.find(key) != dependentAnalytics_.end(); }
138139
template <class T> boost::shared_ptr<T> dependentAnalytic(const std::string& key) const;
139140

141+
virtual std::set<QuantLib::Date> marketDates() const { return {inputs_->asof()}; }
142+
140143
private:
141144
std::unique_ptr<Impl> impl_;
142145

OREAnalytics/orea/app/analytics/pricinganalytic.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -87,7 +87,7 @@ void PricingAnalyticImpl::runAnalytic(
8787

8888
std::string effectiveResultCurrency =
8989
inputs_->resultCurrency().empty() ? inputs_->baseCurrency() : inputs_->resultCurrency();
90-
if (type == "NPV" || type == "NPV_LAGGED") {
90+
if (type == "NPV") {
9191
CONSOLEW("Pricing: NPV Report");
9292
ReportWriter(inputs_->reportNaString())
9393
.writeNpv(*report, effectiveResultCurrency, analytic()->market(), "",
@@ -174,7 +174,7 @@ void PricingAnalyticImpl::runAnalytic(
174174
bool recalibrateModels = true;
175175
bool ccyConv = false;
176176
std::string configuration = inputs_->marketConfig("pricing");
177-
boost::shared_ptr<SensitivityAnalysis> sensiAnalysis;
177+
boost::shared_ptr<SensitivityAnalysis> sensiAnalysis;
178178
if (inputs_->nThreads() == 1) {
179179
LOG("Single-threaded sensi analysis");
180180
std::vector<boost::shared_ptr<ore::data::EngineBuilder>> extraEngineBuilders;

OREAnalytics/orea/app/analytics/pricinganalytic.hpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ class PricingAnalytic : public Analytic {
4545
public:
4646
PricingAnalytic(const boost::shared_ptr<InputParameters>& inputs)
4747
: Analytic(std::make_unique<PricingAnalyticImpl>(inputs),
48-
{"NPV", "NPV_LAGGED", "CASHFLOW", "CASHFLOWNPV", "SENSITIVITY", "STRESS"},
48+
{"NPV", "CASHFLOW", "CASHFLOWNPV", "SENSITIVITY", "STRESS"},
4949
inputs) {}
5050
};
5151

OREAnalytics/orea/app/analyticsmanager.cpp

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -111,15 +111,14 @@ void AnalyticsManager::runAnalytics(const std::set<std::string>& analyticTypes,
111111
return;
112112

113113
std::vector<boost::shared_ptr<ore::data::TodaysMarketParameters>> tmps;
114+
std::set<Date> marketDates;
114115
for (const auto& a : analytics_) {
115116
std::vector<boost::shared_ptr<ore::data::TodaysMarketParameters>> atmps = a.second->todaysMarketParams();
116117
tmps.insert(end(tmps), begin(atmps), end(atmps));
118+
auto mdates = a.second->marketDates();
119+
marketDates.insert(mdates.begin(), mdates.end());
117120
}
118121

119-
QuantExt::Date mporDate = QuantExt::Date();
120-
if (laggedMarket_)
121-
mporDate = inputs_->mporCalendar().advance(inputs_->asof(), inputs_->mporDays(), QuantExt::Days);
122-
123122
// Do we need market data
124123
bool requireMarketData = false;
125124
for (const auto& tmp : tmps) {
@@ -133,7 +132,7 @@ void AnalyticsManager::runAnalytics(const std::set<std::string>& analyticTypes,
133132
// load the market data
134133
if (tmps.size() > 0) {
135134
LOG("AnalyticsManager::runAnalytics: populate loader");
136-
marketDataLoader_->populateLoader(tmps, laggedMarket_, mporDate, inputs_->includeMporExpired());
135+
marketDataLoader_->populateLoader(tmps, marketDates);
137136
}
138137

139138
boost::shared_ptr<InMemoryReport> mdReport = boost::make_shared<InMemoryReport>();

OREAnalytics/orea/app/analyticsmanager.hpp

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -56,9 +56,6 @@ class AnalyticsManager {
5656
Analytic::analytic_npvcubes const npvCubes();
5757
Analytic::analytic_mktcubes const mktCubes();
5858

59-
void setLaggedMarket() { laggedMarket_ = true; }
60-
void unsetLaggedMarket() { laggedMarket_ = false; }
61-
6259
// Write all reports to files, reportNames map can be used to replace standard report names
6360
// with custom names
6461
void toFile(const Analytic::analytic_reports& reports, const std::string& outputPath,
@@ -73,7 +70,6 @@ class AnalyticsManager {
7370
Analytic::analytic_reports marketDataReports_;
7471
std::set<std::string> validAnalytics_;
7572
std::set<std::string> requestedAnalytics_;
76-
bool laggedMarket_ = false;
7773
};
7874

7975
boost::shared_ptr<AnalyticsManager> parseAnalytics(const std::string& s,

OREAnalytics/orea/app/inputparameters.hpp

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -92,7 +92,6 @@ class InputParameters {
9292
void setMporDays(Size s) { mporDays_ = s; }
9393
void setMporCalendar(const std::string& s);
9494
void setMporForward(bool b) { mporForward_ = b; }
95-
void setIncludeMporExpired(bool b) { includeMporExpired_ = b; }
9695

9796
// Setters for npv analytics
9897
void setOutputAdditionalResults(bool b) { outputAdditionalResults_ = b; }
@@ -293,7 +292,6 @@ class InputParameters {
293292
return mporCalendar_;
294293
}
295294
bool mporForward() { return mporForward_; }
296-
bool includeMporExpired() const { return includeMporExpired_; };
297295

298296
/***************************
299297
* Getters for npv analytics
@@ -501,7 +499,6 @@ class InputParameters {
501499
QuantLib::Size mporDays_ = 10;
502500
QuantLib::Calendar mporCalendar_;
503501
bool mporForward_ = true;
504-
bool includeMporExpired_ = true;
505502

506503
/**************
507504
* NPV analytic

OREAnalytics/orea/app/marketcalibrationreport.cpp

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,11 @@ void MarketCalibrationReport::populateReport(const boost::shared_ptr<ore::data::
4747
if (market == nullptr)
4848
return;
4949
auto t = boost::dynamic_pointer_cast<TodaysMarket>(market);
50-
QL_REQUIRE(t, "MarketCalibrationReport::populateReport(): expected TodaysMarket (internal error)");
50+
if (!t) {
51+
DLOG(t, "MarketCalibrationReport::populateReport() expected TodaysMarket");
52+
return;
53+
}
54+
5155
auto calibrationInfo = t->calibrationInfo();
5256
if (calibrationFilters_.mdFilterCurves) {
5357
// First cut at adding curves

OREAnalytics/orea/app/marketdatacsvloader.cpp

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -38,13 +38,12 @@ void MarketDataCsvLoaderImpl::loadCorporateActionData(boost::shared_ptr<ore::dat
3838
void MarketDataCsvLoaderImpl::retrieveMarketData(
3939
const boost::shared_ptr<ore::data::InMemoryLoader>& loader,
4040
const map<Date, set<string>>& quotes,
41-
const Date& relabelDate) {
41+
const Date& requestDate) {
4242
// load csvLoader quotes and add to loader if valid
4343
// doesn't currently handle Lagged or Mpor Date
4444
if (inputs_->entireMarket()) {
45-
for (const auto& md : csvLoader_->loadQuotes(inputs_->asof())) {
45+
for (const auto& md : csvLoader_->loadQuotes(inputs_->asof()))
4646
loader->add(inputs_->asof(), md->name(), md->quote()->value());
47-
}
4847
} else {
4948
for (const auto& qd : quotes) {
5049
auto d = qd.first;

OREAnalytics/orea/app/marketdatacsvloader.hpp

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -40,16 +40,13 @@ class MarketDataCsvLoaderImpl : public MarketDataLoaderImpl {
4040
const std::map<std::string, std::string>& equities) override;
4141

4242
void retrieveMarketData(const boost::shared_ptr<ore::data::InMemoryLoader>& loader,
43-
const ore::analytics::QuoteMap& quotes,
44-
const QuantLib::Date& relabelDate = QuantExt::Null<QuantLib::Date>()) override;
43+
const ore::analytics::QuoteMap& quotes,
44+
const QuantLib::Date& requestDate = QuantLib::Date()) override;
4545

4646
void retrieveFixings(const boost::shared_ptr<ore::data::InMemoryLoader>& loader,
4747
ore::analytics::FixingMap fixings = {},
4848
std::map<std::pair<std::string, QuantLib::Date>, std::set<QuantLib::Date>> lastAvailableFixingLookupMap = {}) override;
4949

50-
void retrieveExpiredContracts(const boost::shared_ptr<ore::data::InMemoryLoader>& loader, const QuoteMap& quotes,
51-
const Date& npvLaggedDate) override {};
52-
5350
private:
5451
boost::shared_ptr<InputParameters> inputs_;
5552
boost::shared_ptr<ore::data::CSVLoader> csvLoader_;

OREAnalytics/orea/app/marketdatainmemoryloader.hpp

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -42,15 +42,12 @@ class MarketDataInMemoryLoaderImpl : public MarketDataLoaderImpl {
4242

4343
void retrieveMarketData(const boost::shared_ptr<ore::data::InMemoryLoader>& loader,
4444
const ore::analytics::QuoteMap& quotes,
45-
const QuantLib::Date& relabelDate = QuantExt::Null<QuantLib::Date>()) override;
45+
const QuantLib::Date& marketDate) override;
4646

4747
void retrieveFixings(const boost::shared_ptr<ore::data::InMemoryLoader>& loader,
4848
ore::analytics::FixingMap fixings = {},
4949
std::map<std::pair<std::string, QuantLib::Date>, std::set<QuantLib::Date>> lastAvailableFixingLookupMap = {}) override;
5050

51-
void retrieveExpiredContracts(const boost::shared_ptr<ore::data::InMemoryLoader>& loader, const QuoteMap& quotes,
52-
const Date& npvLaggedDate) override {};
53-
5451
private:
5552
boost::shared_ptr<InputParameters> inputs_;
5653
std::vector<std::string> marketData_;

0 commit comments

Comments
 (0)