20#include <boost/test/unit_test.hpp>
21#include <boost/test/data/test_case.hpp>
24#include <boost/make_shared.hpp>
25#include <boost/test/unit_test.hpp>
37#include <oret/datapaths.hpp>
38#include <oret/toplevelfixture.hpp>
40#include <ql/time/date.hpp>
41#include <ql/pricingengines/blackformula.hpp>
43#include <boost/math/distributions/normal.hpp>
51using namespace boost::unit_test_framework;
53BOOST_FIXTURE_TEST_SUITE(OREDataTestSuite, ore::test::TopLevelFixture)
55BOOST_AUTO_TEST_SUITE(FxAccumulatorTest)
58 BOOST_TEST_MESSAGE(
"Testing Fx Accumulator...");
64 Settings::instance().evaluationDate() = Date(31, Dec, 2018);
65 Date asof = Settings::instance().evaluationDate();
67 auto conventions = QuantLib::ext::make_shared<Conventions>();
68 conventions->fromFile(TEST_INPUT_FILE(
"conventions.xml"));
69 InstrumentConventions::instance().setConventions(conventions);
71 auto todaysMarketParams = QuantLib::ext::make_shared<TodaysMarketParameters>();
72 todaysMarketParams->fromFile(TEST_INPUT_FILE(
"todaysmarket.xml"));
73 auto curveConfigs = QuantLib::ext::make_shared<CurveConfigurations>();
74 curveConfigs->fromFile(TEST_INPUT_FILE(
"curveconfig.xml"));
75 QuantLib::ext::shared_ptr<Loader> loader =
76 QuantLib::ext::make_shared<CSVLoader>(TEST_INPUT_FILE(
"market.txt"), TEST_INPUT_FILE(
"fixings.txt"),
false);
77 QuantLib::ext::shared_ptr<TodaysMarket> market =
78 QuantLib::ext::make_shared<TodaysMarket>(asof, todaysMarketParams, loader,
curveConfigs,
false);
81 QuantLib::ext::shared_ptr<EngineData> engineData = QuantLib::ext::make_shared<EngineData>();
82 engineData->fromFile(TEST_INPUT_FILE(
"pricingengine.xml"));
83 QuantLib::ext::shared_ptr<EngineFactory> factory = QuantLib::ext::make_shared<EngineFactory>(engineData, market);
87 ~cleanup() { ore::data::ScriptLibraryStorage::instance().clear(); }
90 library.
fromFile(TEST_INPUT_FILE(
"scriptlibrary.xml"));
91 ore::data::ScriptLibraryStorage::instance().set(std::move(library));
95 string trade =
"FX_Accumulator";
96 string portfolioFile = trade +
".xml";
97 p.
fromFile(TEST_INPUT_FILE(portfolioFile));
98 BOOST_CHECK_NO_THROW(p.
build(factory));
102 BOOST_CHECK_NO_THROW(p.
get(
"FX_ACCUMULATOR_1")->instrument()->NPV());
103 BOOST_TEST_MESSAGE(p.
get(
"FX_ACCUMULATOR_1")->instrument()->NPV() * 1.1469);
104 BOOST_TEST_MESSAGE(p.
get(
"FX_FORWARD_1")->instrument()->NPV());
106 BOOST_CHECK_CLOSE(p.
get(
"FX_ACCUMULATOR_1")->instrument()->NPV() * 1.1469,
107 p.
get(
"FX_FORWARD_1")->instrument()->NPV(), 0.01);
111 BOOST_CHECK_CLOSE(p.
get(
"FX_ACCUMULATOR_2")->instrument()->NPV() * 1.1469,
112 p.
get(
"FX_FORWARD_2A")->instrument()->NPV() + p.
get(
"FX_FORWARD_2B")->instrument()->NPV() +
113 p.
get(
"FX_FORWARD_2C")->instrument()->NPV(),
118 BOOST_CHECK_CLOSE(p.
get(
"FX_ACCUMULATOR_3")->instrument()->NPV() * 1.1469,
119 (p.
get(
"FX_ACCUMULATOR_3A")->instrument()->NPV() +
120 p.
get(
"FX_ACCUMULATOR_3B")->instrument()->NPV() +
121 p.
get(
"FX_ACCUMULATOR_3C")->instrument()->NPV()) *
126BOOST_AUTO_TEST_SUITE_END()
128BOOST_AUTO_TEST_SUITE_END()
accumulator wrapper for scripted trade
void build(const QuantLib::ext::shared_ptr< EngineFactory > &, const std::string &context="unspecified", const bool emitStructuredError=true)
Call build on all trades in the portfolio, the context is included in error messages.
QuantLib::ext::shared_ptr< Trade > get(const std::string &id) const
void fromFile(const std::string &filename)
Currency and instrument specific conventions/defaults.
Market Datum Loader Implementation.
Curve configuration repository.
#define ORE_REGISTER_TRADE_BUILDER(NAME, CLASS, OVERWRITE)
#define ORE_REGISTER_ENGINE_BUILDER(CLASS, OVERWRITE)
A class to hold pricing engine parameters.
BOOST_AUTO_TEST_CASE(testNPV)
scripted trade data model
vector< string > curveConfigs
An concrete implementation of the Market class that loads todays market and builds the required curve...
A class to hold todays market configuration(s)