Skip to content

Commit f2b302a

Browse files
Merge remote-tracking branch 'origin/master' into github_modules
2 parents f6d93b2 + 2ea0559 commit f2b302a

6 files changed

Lines changed: 80 additions & 8 deletions

File tree

Docs/UserGuide/tradedata/bondForward_refdata.tex

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -40,11 +40,11 @@ \subsubsection{Bond Forward / T-Lock / J-Lock (using ref. data)}
4040
transferred from the party that is long to the party that is short (determined by \lstinline!LongInForward!)
4141
and cannot be a negative amount. It is assumed to be in the same currency as the underlying bond. Exactly one
4242
of the fields Amount, LockRate must be given. \\
43-
Allowable values: Any non-negative real number. The LockRate is expressed in decimal form, eg 0.05 is a rate of 5\%
43+
Allowable values: Any non-negative real number.
4444
\item LockRate [Optional]: The payoff is given by (yield at forward maturity - LockRate) x DV01 (LongInForward =
4545
true). Exactly one of the fields Amount, LockRate must be given. In case the LockRate is given, the Settlement
4646
must be set to Cash. If Settlement is not given, it defaults to Cash in this case. \\
47-
Allowable values: Any non-negative real number.
47+
Allowable values: Any non-negative real number. The LockRate is expressed in decimal form, eg 0.05 is a rate of 5\%
4848
\item LockRateDayCounter [Optional]: The day counter w.r.t. which the lock rate is expressed. Optional, defaults to A360. \\
4949
Allowable values: see table \ref{tab:daycount}
5050
\item SettlementDirty [Optional]: A flag that determines whether the settlement amount {({\tt Amount})} reflects

OREAnalytics/orea/app/oreapp.cpp

Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -322,6 +322,8 @@ OREApp::OREApp(boost::shared_ptr<Parameters> params, bool console)
322322

323323
// Read setup
324324
readSetup();
325+
326+
dummyRegisterBuildersForWindows();
325327
}
326328

327329
OREApp::OREApp(const boost::shared_ptr<InputParameters>& inputs, const std::string& logFile, Size logLevel,
@@ -348,6 +350,71 @@ OREApp::OREApp(const boost::shared_ptr<InputParameters>& inputs, const std::stri
348350
Log::instance().registerLogger(boost::make_shared<FileLogger>(logFilePath));
349351
Log::instance().setMask(logLevel);
350352
Log::instance().switchOn();
353+
354+
dummyRegisterBuildersForWindows();
355+
}
356+
357+
void OREApp::dummyRegisterBuildersForWindows() {
358+
TradeFactory::instance().addBuilder("Swap", boost::make_shared<TradeBuilder<Swap>>(), true);
359+
TradeFactory::instance().addBuilder("Swaption", boost::make_shared<TradeBuilder<Swaption>>(), true);
360+
TradeFactory::instance().addBuilder("CapFloor", boost::make_shared<TradeBuilder<CapFloor>>(), true);
361+
TradeFactory::instance().addBuilder("ForwardRateAgreement",
362+
boost::make_shared<TradeBuilder<ForwardRateAgreement>>(), true);
363+
TradeFactory::instance().addBuilder("FxForward", boost::make_shared<TradeBuilder<FxForward>>(), true);
364+
TradeFactory::instance().addBuilder("FxOption", boost::make_shared<TradeBuilder<FxOption>>(), true);
365+
TradeFactory::instance().addBuilder("FxSwap", boost::make_shared<TradeBuilder<FxSwap>>(), true);
366+
367+
EngineBuilderFactory::instance().addEngineBuilder([]() { return boost::make_shared<SwapEngineBuilder>(); });
368+
EngineBuilderFactory::instance().addEngineBuilder(
369+
[]() { return boost::make_shared<CrossCurrencySwapEngineBuilder>(); });
370+
EngineBuilderFactory::instance().addEngineBuilder([]() { return boost::make_shared<FxForwardEngineBuilder>(); });
371+
EngineBuilderFactory::instance().addEngineBuilder(
372+
[]() { return boost::make_shared<FxEuropeanOptionEngineBuilder>(); });
373+
EngineBuilderFactory::instance().addEngineBuilder(
374+
[]() { return boost::make_shared<FxEuropeanCSOptionEngineBuilder>(); });
375+
EngineBuilderFactory::instance().addEngineBuilder(
376+
[]() { return boost::make_shared<FxAmericanOptionFDEngineBuilder>(); });
377+
EngineBuilderFactory::instance().addEngineBuilder(
378+
[]() { return boost::make_shared<FxAmericanOptionBAWEngineBuilder>(); });
379+
EngineBuilderFactory::instance().addEngineBuilder([]() { return boost::make_shared<CapFloorEngineBuilder>(); });
380+
EngineBuilderFactory::instance().addEngineBuilder(
381+
[]() { return boost::make_shared<CapFlooredOvernightIndexedCouponLegEngineBuilder>(); });
382+
EngineBuilderFactory::instance().addEngineBuilder(
383+
[]() { return boost::make_shared<CapFlooredAverageONIndexedCouponLegEngineBuilder>(); });
384+
EngineBuilderFactory::instance().addEngineBuilder(
385+
[]() { return boost::make_shared<CapFlooredIborLegEngineBuilder>(); });
386+
EngineBuilderFactory::instance().addEngineBuilder(
387+
[]() { return boost::make_shared<LinearTSRCmsCouponPricerBuilder>(); });
388+
389+
EngineBuilderFactory::instance().addAmcEngineBuilder(
390+
[](const boost::shared_ptr<QuantExt::CrossAssetModel>& cam, const std::vector<Date>& grid) {
391+
return boost::make_shared<CamAmcCurrencySwapEngineBuilder>(cam, grid);
392+
});
393+
EngineBuilderFactory::instance().addAmcEngineBuilder(
394+
[](const boost::shared_ptr<QuantExt::CrossAssetModel>& cam, const std::vector<Date>& grid) {
395+
return boost::make_shared<CamAmcFxOptionEngineBuilder>(cam, grid);
396+
});
397+
EngineBuilderFactory::instance().addAmcEngineBuilder(
398+
[](const boost::shared_ptr<QuantExt::CrossAssetModel>& cam, const std::vector<Date>& grid) {
399+
return boost::make_shared<CamAmcSwapEngineBuilder>(cam, grid);
400+
});
401+
EngineBuilderFactory::instance().addAmcEngineBuilder(
402+
[](const boost::shared_ptr<QuantExt::CrossAssetModel>& cam, const std::vector<Date>& grid) {
403+
return boost::make_shared<LgmAmcBermudanSwaptionEngineBuilder>(cam, grid);
404+
});
405+
406+
EngineBuilderFactory::instance().addLegBuilder([]() { return boost::make_shared<FixedLegBuilder>(); });
407+
EngineBuilderFactory::instance().addLegBuilder([]() { return boost::make_shared<ZeroCouponFixedLegBuilder>(); });
408+
EngineBuilderFactory::instance().addLegBuilder([]() { return boost::make_shared<FloatingLegBuilder>(); });
409+
EngineBuilderFactory::instance().addLegBuilder([]() { return boost::make_shared<CashflowLegBuilder>(); });
410+
EngineBuilderFactory::instance().addLegBuilder([]() { return boost::make_shared<CPILegBuilder>(); });
411+
EngineBuilderFactory::instance().addLegBuilder([]() { return boost::make_shared<YYLegBuilder>(); });
412+
EngineBuilderFactory::instance().addLegBuilder([]() { return boost::make_shared<CMSLegBuilder>(); });
413+
EngineBuilderFactory::instance().addLegBuilder([]() { return boost::make_shared<CMBLegBuilder>(); });
414+
EngineBuilderFactory::instance().addLegBuilder([]() { return boost::make_shared<DigitalCMSLegBuilder>(); });
415+
EngineBuilderFactory::instance().addLegBuilder([]() { return boost::make_shared<CMSSpreadLegBuilder>(); });
416+
EngineBuilderFactory::instance().addLegBuilder([]() { return boost::make_shared<DigitalCMSSpreadLegBuilder>(); });
417+
EngineBuilderFactory::instance().addLegBuilder([]() { return boost::make_shared<EquityLegBuilder>(); });
351418
}
352419

353420
OREApp::~OREApp() {

OREAnalytics/orea/app/oreapp.hpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -286,7 +286,8 @@ class OREApp {
286286

287287
private:
288288
virtual ReportWriter* getReportWriterImpl() const { return new ReportWriter(); }
289-
289+
// to be removed again once we have resolved the auto-registering problem on windows
290+
void dummyRegisterBuildersForWindows();
290291
};
291292

292293
} // namespace analytics

OREData/ored/portfolio/enginefactory.cpp

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -123,7 +123,8 @@ void EngineFactory::registerBuilder(const boost::shared_ptr<EngineBuilder>& buil
123123
const string& modelName = builder->model();
124124
const string& engineName = builder->engine();
125125
auto key = make_tuple(modelName, engineName, builder->tradeTypes());
126-
if(allowOverwrite)
126+
// FIXME workaround to allow manual registration of builders on windows, remove once this is resolved
127+
if(true || allowOverwrite)
127128
builders_.erase(key);
128129
QL_REQUIRE(builders_.insert(make_pair(key, builder)).second,
129130
"EngineFactory: duplicate engine builder for (" << modelName << "/" << engineName << "/"
@@ -160,7 +161,8 @@ boost::shared_ptr<EngineBuilder> EngineFactory::builder(const string& tradeType)
160161
}
161162

162163
void EngineFactory::registerLegBuilder(const boost::shared_ptr<LegBuilder>& legBuilder, const bool allowOverwrite) {
163-
if(allowOverwrite)
164+
// FIXME workaround to allow manual registration of builders on windows, remove once this is resolved
165+
if(true || allowOverwrite)
164166
legBuilders_.erase(legBuilder->legType());
165167
QL_REQUIRE(legBuilders_.insert(make_pair(legBuilder->legType(), legBuilder)).second,
166168
"EngineFactory duplicate leg builder for '" << legBuilder->legType()

OREData/ored/portfolio/tradefactory.cpp

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -38,9 +38,10 @@ boost::shared_ptr<AbstractTradeBuilder> TradeFactory::getBuilder(const std::stri
3838
return b->second;
3939
}
4040

41-
void TradeFactory::addBuilder(const std::string& className, const boost::shared_ptr<AbstractTradeBuilder>& builder) {
41+
void TradeFactory::addBuilder(const std::string& className, const boost::shared_ptr<AbstractTradeBuilder>& builder,
42+
const bool allowOverwrite) {
4243
boost::unique_lock<boost::shared_mutex> lock(mutex_);
43-
QL_REQUIRE(builders_.insert(std::make_pair(className, builder)).second,
44+
QL_REQUIRE(builders_.insert(std::make_pair(className, builder)).second || allowOverwrite,
4445
"TradeFactory: duplicate builder for className '" << className << "'.");
4546
}
4647

OREData/ored/portfolio/tradefactory.hpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,8 @@ class TradeFactory : public QuantLib::Singleton<TradeFactory, std::integral_cons
6666
public:
6767
std::map<std::string, boost::shared_ptr<AbstractTradeBuilder>> getBuilders() const;
6868
boost::shared_ptr<AbstractTradeBuilder> getBuilder(const std::string& tradeType) const;
69-
void addBuilder(const std::string& tradeType, const boost::shared_ptr<AbstractTradeBuilder>& builder);
69+
void addBuilder(const std::string& tradeType, const boost::shared_ptr<AbstractTradeBuilder>& builder,
70+
const bool allowOverwrite = false);
7071

7172
//! Build, throws for unknown className
7273
boost::shared_ptr<Trade> build(const std::string& className) const;

0 commit comments

Comments
 (0)