00001
00016 #include "ivolt0.hpp"
00017
00018 #include <ql/timeseries.hpp>
00019
00020 #include <ql/termstructures/yield/zerocurve.hpp>
00021 #include <ql/math/interpolations/cubicinterpolation.hpp>
00022 #include <ql/math/interpolations/bicubicsplineinterpolation.hpp>
00023 #include <ql/termstructures/yield/zerocurve.hpp>
00024 #include <ql/experimental/inflation/yoycapfloortermpricesurface.hpp>
00025
00026 #include <boost/utility/enable_if.hpp>
00027 #include <boost/type_traits.hpp>
00028 #include <boost/date_time/gregorian/formatters.hpp>
00029
00030 #include "eleve/src/typing0.hpp"
00031
00032 namespace eepgwde { namespace detail {
00033
00035 namespace i0 {
00036
00037 using boost::enable_if;
00038
00039
00040 template <typename U>
00041 typename enable_if<boost::is_base_of<QuantLib::Date, U>, U>::type
00042 null1(dummy<2> = 2) {
00043 return QuantLib::Date(1, static_cast<QuantLib::Month>(1), 1901);
00044 }
00045
00047 template <typename U>
00048 std::string
00049 ys(typename enable_if< boost::is_base_of<QuantLib::Date, U>, U>::type,
00050 const boost::any &o, dummy<2> = 2)
00051 throw (std::domain_error &) {
00052 U r(boost::any_cast<U>(o));
00053 boost::gregorian::date dt(r.year(), r.month(), r.dayOfMonth());
00054 return boost::gregorian::to_simple_string(dt);
00055 }
00056
00058 template <typename U>
00059 U xs(typename enable_if<boost::is_same<QuantLib::Date, U>, U>::type,
00060 const std::string & s, dummy<2> = 2)
00061 throw (std::domain_error &) {
00062 posixdate bdt = boost::gregorian::from_simple_string(s);
00063 QuantLib::Date qdt0(bdt.day(), static_cast<QuantLib::Month>(static_cast<int>(bdt.month())), bdt.year());
00064 return qdt0;
00065 }
00066
00067 }
00068
00069 }}
00070
00071 #include "eleve/src/typing3.hpp"
00072 #include "eleve/src/typing1.hpp"
00073
00074 #include "eleve/src0/csv1.hpp"
00075 #include "eleve/src0/csv2.hpp"
00076 #include "eleve/src0/csv4.hpp"
00077
00078 #include "src1/acsvt0.hpp"
00079
00080 #include "src1/pivot0.hpp"
00081
00082 #include "types0.cpp"
00083
00084 namespace null0_types {
00085 X_NULL0_PTR1(QuantLib::Date);
00086 }
00087
00088 #include "render1.cpp"
00089
00090
00091
00092 BOOST_GLOBAL_FIXTURE ( csv0 )
00093
00094 namespace {
00095 using namespace QuantLib;
00096
00097 Handle<YieldTermStructure> nominalEUR;
00098 Handle<YieldTermStructure> nominalGBP;
00099
00100 };
00101
00102 BOOST_AUTO_TEST_SUITE (frame0)
00103
00104
00105 BOOST_AUTO_TEST_CASE(csv1)
00106 {
00107 using namespace eepgwde::detail;
00108
00109 BOOST_TEST_MESSAGE("price::frame0::csv1");
00110
00111 BOOST_TEST_MESSAGE("QuantLib::price::frame0::csv1: " << frame.shape()[0] );
00112 BOOST_TEST_MESSAGE("QuantLib::price::frame0::csv1: " << frame.shape()[1] );
00113
00114 for (DataFrame::ma_any_t::size_type a = 0; a < frame.shape()[0]; ++a) {
00115 for (DataFrame::ma_any_t::size_type b = 0; b < frame.shape()[1]; ++b) {
00116 std::cerr << (frame[a][b]).type().name() << " "
00117 << boost::any_cast<std::string>(frame[a][b]) << " ";
00118 }
00119 std::cerr << endl;
00120 }
00121 }
00122
00123 BOOST_AUTO_TEST_SUITE_END()
00124
00125 namespace eepgwde { namespace detail {
00126
00127 struct TimeSeries0 {
00128 DataFrame &df;
00129 Typing::mappings_t & mappings0;
00130
00131 TimeSeries0(DataFrame & df,
00132 Typing::mappings_t & mappings0)
00133 : df(df), mappings0(mappings0) {}
00134
00135 operator QuantLib::TimeSeries<QuantLib::Rate>() {
00136
00137
00138 DataFrame::headar h0(&df, mappings0);
00139 DataFrame::attr_pos_t h1 = h0;
00140
00141 df.header = h1;
00142
00143 DataFrame::column_t c0 = df.column(std::string("date"));
00144 std::vector<QuantLib::Date> qdates = DataFrame::columnar(c0);
00145
00146 DataFrame::column_t c1 = df.column(std::string("value"));
00147 std::vector<QuantLib::Rate> qvalues = DataFrame::columnar(c1);
00148
00149
00150 QuantLib::TimeSeries<QuantLib::Rate> ts0(qdates.begin(), qdates.end(), qvalues.begin());
00151
00152 std::vector<QuantLib::Date> d0(ts0.dates());
00153 std::vector<QuantLib::Rate> r0(ts0.values());
00154
00155 return ts0;
00156 }
00157 };
00158
00159 }}
00160
00161 BOOST_AUTO_TEST_SUITE(misc)
00162
00163
00164 BOOST_AUTO_TEST_CASE(null0)
00165 {
00166 using namespace eepgwde::detail;
00167 using eepgwde::detail::null0;
00168
00169 BOOST_TEST_MESSAGE("QuantLib::misc::null0");
00170
00171 std::string date_type0 = boost::any((null0<posixdate>())()).type().name();
00172 std::string date_type1 = boost::any((null0<QuantLib::Date>())()).type().name();
00173
00174 BOOST_TEST_MESSAGE( date_type0 << " " << date_type1 );
00175
00176 QuantLib::Date dt = (null0<QuantLib::Date>())();
00177 }
00178
00179
00180 BOOST_AUTO_TEST_CASE(qldt)
00181 {
00182 using namespace eepgwde::detail;
00183
00184 BOOST_TEST_MESSAGE("QuantLib::misc::qldt");
00185
00186 std::string fname1;
00187 fname1 = fnames.front();
00188 fnames.pop();
00189 std::string service1(fname1);
00190 service1 = service1.erase(service1.find("."));
00191
00192 BOOST_TEST_MESSAGE(fname1 << " " << service1);
00193
00194 DataFrame::ma_any_t frame1;
00195 csv0::load0(fname1, frame1);
00196
00197 DataFrame df(frame1, service1);
00198 df.render();
00199
00200 df.render<QuantLib::Date>(std::string("date"));
00201
00202 std::cerr << df.frame << std::endl;
00203 }
00204
00205 BOOST_AUTO_TEST_SUITE_END()
00206
00207 BOOST_AUTO_TEST_SUITE(curves)
00208
00209
00210
00211
00212 BOOST_AUTO_TEST_CASE(ycuk)
00213 {
00214 using namespace eepgwde::detail;
00215 using namespace QuantLib;
00216
00217 BOOST_TEST_MESSAGE("QuantLib::curves::ycuk");
00218
00219 std::string fname1;
00220 fname1 = fnames.front();
00221 fnames.pop();
00222 std::string service1(fname1);
00223 service1 = service1.erase(service1.find("."));
00224
00225 BOOST_TEST_MESSAGE(fname1 << " " << service1);
00226
00227 DataFrame::ma_any_t frame1;
00228 csv0::load0(fname1, frame1);
00229
00230 DataFrame df(frame1, service1);
00231 df.render();
00232
00233 DataFrame::column_t c0 = df.column(std::string("date"));
00234 std::vector<QuantLib::Date> qdates = DataFrame::columnar(c0);
00235
00236 DataFrame::column_t c1 = df.column(1);
00237 std::vector<QuantLib::Rate> qvalues = DataFrame::columnar(c1);
00238
00239
00240 QuantLib::TimeSeries<QuantLib::Rate> ts0(qdates.begin(), qdates.end(), qvalues.begin());
00241
00242 std::vector<QuantLib::Date> d0(ts0.dates());
00243 std::vector<QuantLib::Rate> r0(ts0.values());
00244
00245 shared_ptr<InterpolatedZeroCurve<Cubic> >
00246 iborTS(new InterpolatedZeroCurve<Cubic>(d0, r0, Actual365Fixed()));
00247 Handle<YieldTermStructure> nominalH(iborTS, false);
00248 nominalGBP = nominalH;
00249 }
00250
00251
00252
00253
00254 BOOST_AUTO_TEST_CASE(yceur)
00255 {
00256 using namespace eepgwde::detail;
00257 using namespace QuantLib;
00258
00259 BOOST_TEST_MESSAGE("QuantLib::curves::yceur");
00260
00261 std::string fname1;
00262 fname1 = fnames.front();
00263 fnames.pop();
00264 std::string service1(fname1);
00265 service1 = service1.erase(service1.find("."));
00266
00267 BOOST_TEST_MESSAGE(fname1 << " " << service1);
00268
00269 DataFrame::ma_any_t frame1;
00270 csv0::load0(fname1, frame1);
00271
00272 DataFrame df(frame1, service1);
00273 df.render();
00274
00275 std::cerr << df.header.left << std::endl;
00276
00277 Typing t0;
00278 Typing::mappings_t mappings0 = t0.mappings();
00279
00280 std::string vs = df.header.left.find(1)->second;
00281
00282 BOOST_CHECK( df.header.right.find("eur_yc_rate")
00283 != df.header.right.end() );
00284 mappings0[ "eur_yc_rate" ] = std::string("value");
00285
00286 QuantLib::TimeSeries<QuantLib::Rate> ts1 = TimeSeries0(df, mappings0);
00287
00288 std::vector<QuantLib::Date> d0(ts1.dates());
00289 std::vector<QuantLib::Rate> r0(ts1.values());
00290
00291 copy(r0.begin(), r0.end(), ostream_iterator<double>(std::cerr, ","));
00292 std::cerr << std::endl;
00293
00294 shared_ptr<InterpolatedZeroCurve<Cubic> >
00295 iborTS(new InterpolatedZeroCurve<Cubic>(d0, r0, Actual365Fixed()));
00296 Handle<YieldTermStructure> nominalH(iborTS, false);
00297 nominalEUR = nominalH;
00298 }
00299
00300 BOOST_AUTO_TEST_SUITE_END ()
00301
00302 BOOST_AUTO_TEST_SUITE (yoyeu)
00303
00310
00311 BOOST_AUTO_TEST_CASE(yoyeur)
00312 {
00313 using namespace eepgwde::detail;
00314 using namespace QuantLib;
00315
00316 BOOST_TEST_MESSAGE("QuantLib::price::frame0::yoyeur");
00317
00318
00319 curves::ycuk().test_method();
00320
00321 std::string fname1;
00322 fname1 = fnames.front();
00323 fnames.pop();
00324 std::string service1(fname1);
00325 service1 = service1.erase(service1.find("."));
00326
00327 BOOST_TEST_MESSAGE(fname1 << " " << service1);
00328
00329 DataFrame::ma_any_t frame1;
00330 csv0::load0(fname1, frame1);
00331
00332 DataFrame df(frame1, service1);
00333 df.render();
00334
00335 std::cerr << df.frame << std::endl;
00336
00337 }
00338
00339 BOOST_AUTO_TEST_SUITE_END ()
00340
00341
00342
00343 BOOST_AUTO_TEST_SUITE(caps0)
00344
00346 BOOST_AUTO_TEST_CASE(caps0)
00347 {
00348 using namespace eepgwde::detail;
00349
00350 BOOST_TEST_MESSAGE("QuantLib::curves::caps0");
00351
00352 return;
00353
00354 std::string fname1;
00355 fname1 = fnames.front();
00356 fnames.pop();
00357 std::string service1(fname1);
00358 service1 = service1.erase(service1.find("."));
00359
00360 BOOST_TEST_MESSAGE(fname1 << " " << service1);
00361
00362 DataFrame::ma_any_t frame1;
00363 csv0::load0(fname1, frame1);
00364
00365 DataFrame df(frame1, service1);
00366 df.render();
00367 std::cerr << df.frame << std::endl;
00368 }
00369
00370 BOOST_AUTO_TEST_SUITE_END()