RcppExport SEXP holidayList(SEXP calSexp, SEXP params) { try { boost::shared_ptr<QuantLib::Calendar> pcal( getCalendar(Rcpp::as<std::string>(calSexp)) ); Rcpp::List rparam(params); int iw = Rcpp::as<int>(rparam["includeWeekends"]); std::vector<QuantLib::Date> holidays = QuantLib::Calendar::holidayList(*pcal, QuantLib::Date(dateFromR(Rcpp::as<Rcpp::Date>( rparam["from"]))), QuantLib::Date(dateFromR(Rcpp::as<Rcpp::Date>( rparam["to"] ))), iw == 1 ? true : false); if (holidays.size() > 0) { Rcpp::DateVector dv( holidays.size() ); for (unsigned int i = 0; i< holidays.size(); i++){ dv[i] = Rcpp::Date(holidays[i].month(), holidays[i].dayOfMonth(), holidays[i].year()); } return Rcpp::wrap(dv); } else { return R_NilValue; } } catch(std::exception &ex) { forward_exception_to_r(ex); } catch(...) { ::Rf_error("c++ exception (unknown reason)"); } return R_NilValue; }
RcppExport SEXP businessDaysBetween(SEXP calSexp, SEXP params, SEXP from, SEXP to){ try { boost::shared_ptr<QuantLib::Calendar> pcal( getCalendar(Rcpp::as<std::string>(calSexp)) ); Rcpp::List rparam(params); double ifirst = Rcpp::as<double>(rparam["includeFirst"]); double ilast = Rcpp::as<double>(rparam["includeLast"]); Rcpp::DateVector dates1 = Rcpp::DateVector(from); Rcpp::DateVector dates2 = Rcpp::DateVector(to); int n = dates1.size(); std::vector<double> between(n); for (int i=0; i<n; i++) { QuantLib::Date day1( dateFromR(dates1[i]) ); QuantLib::Date day2( dateFromR(dates2[i]) ); between[i] = pcal->businessDaysBetween(day1, day2, (ifirst == 1) ? true: false, (ilast == 1) ? true: false); } return Rcpp::wrap(between); } catch(std::exception &ex) { forward_exception_to_r(ex); } catch(...) { ::Rf_error("c++ exception (unknown reason)"); } return R_NilValue; }
RcppExport SEXP advance2(SEXP calSexp, SEXP param, SEXP dateSexp){ try { boost::shared_ptr<QuantLib::Calendar> pcal( getCalendar(Rcpp::as<std::string>(calSexp)) ); Rcpp::List rparam(param); QuantLib::BusinessDayConvention bdc = getBusinessDayConvention( Rcpp::as<double>(rparam["bdc"]) ); double emr = Rcpp::as<double>(rparam["emr"]); double period = Rcpp::as<double>(rparam["period"]); Rcpp::DateVector dates = Rcpp::DateVector(dateSexp); int n = dates.size(); std::vector<QuantLib::Date> advance(n); for (int i=0; i<n; i++) { QuantLib::Date day( dateFromR(dates[i]) ); advance[i] = pcal->advance(day, QuantLib::Period(getFrequency(period)), bdc, (emr == 1)?true:false ); dates[i] = Rcpp::Date(advance[i].month(), advance[i].dayOfMonth(), advance[i].year()); } return Rcpp::wrap(dates); } catch(std::exception &ex) { forward_exception_to_r(ex); } catch(...) { ::Rf_error("c++ exception (unknown reason)"); } return R_NilValue; }
RcppExport SEXP adjust(SEXP calSexp, SEXP bdcSEXP, SEXP dateSexp){ try { boost::shared_ptr<QuantLib::Calendar> pcal( getCalendar(Rcpp::as<std::string>(calSexp)) ); QuantLib::BusinessDayConvention bdc = getBusinessDayConvention( Rcpp::as<double>(bdcSEXP) ); Rcpp::DateVector dates = Rcpp::DateVector(dateSexp); int n = dates.size(); std::vector<QuantLib::Date> adjusted(n); for (int i=0; i<n; i++) { QuantLib::Date day( dateFromR(dates[i]) ); adjusted[i] = pcal->adjust(day, bdc); dates[i] = Rcpp::Date(adjusted[i].month(), adjusted[i].dayOfMonth(), adjusted[i].year()); } return Rcpp::wrap(dates); } catch(std::exception &ex) { forward_exception_to_r(ex); } catch(...) { ::Rf_error("c++ exception (unknown reason)"); } return R_NilValue; }
RcppExport SEXP endOfMonth(SEXP calSexp, SEXP dateSexp){ try { boost::shared_ptr<QuantLib::Calendar> pcal( getCalendar(Rcpp::as<std::string>(calSexp)) ); Rcpp::DateVector dates = Rcpp::DateVector(dateSexp); int n = dates.size(); std::vector<QuantLib::Date> eom(n); for (int i=0; i<n; i++) { QuantLib::Date day( dateFromR(dates[i]) ); eom[i] = pcal->endOfMonth(day); dates[i] = Rcpp::Date(eom[i].month(), eom[i].dayOfMonth(), eom[i].year()); } return Rcpp::wrap(dates); } catch(std::exception &ex) { forward_exception_to_r(ex); } catch(...) { ::Rf_error("c++ exception (unknown reason)"); } return R_NilValue; }
// [[Rcpp::export]] std::vector<QuantLib::Date> getHolidayList(std::string calendar, QuantLib::Date from, QuantLib::Date to, bool includeWeekends=false) { boost::shared_ptr<QuantLib::Calendar> pcal(getCalendar(calendar)); std::vector<QuantLib::Date> holidays = QuantLib::Calendar::holidayList(*pcal, from, to, includeWeekends); return holidays; }
// [[Rcpp::export]] std::vector<QuantLib::Date> getEndOfMonth(std::string calendar, std::vector<QuantLib::Date> dates) { boost::shared_ptr<QuantLib::Calendar> pcal(getCalendar(calendar)); int n = dates.size(); std::vector<QuantLib::Date> ndates(n); for (int i=0; i<n; i++) { ndates[i] = pcal->endOfMonth(dates[i]); } return ndates; }
// [[Rcpp::export]] std::vector<bool> isWeekend(std::string calendar, std::vector<QuantLib::Date> dates) { boost::shared_ptr<QuantLib::Calendar> pcal(getCalendar(calendar)); int n = dates.size(); std::vector<bool> weekends(n); for (int i=0; i<n; i++) { weekends[i] = pcal->isWeekend(dates[i].weekday()); } return weekends; }
// [[Rcpp::export]] std::vector<bool> isHoliday(std::string calendar, std::vector<QuantLib::Date> dates) { boost::shared_ptr<QuantLib::Calendar> pcal(getCalendar(calendar)); int n = dates.size(); std::vector<bool> hdays(n); for (int i=0; i<n; i++) { hdays[i] = pcal->isHoliday(dates[i]); } return hdays; }
// [[Rcpp::export]] std::vector<QuantLib::Date> adjust(std::string calendar, std::vector<QuantLib::Date> dates, int bdc=0) { boost::shared_ptr<QuantLib::Calendar> pcal(getCalendar(calendar)); QuantLib::BusinessDayConvention bdcval = getBusinessDayConvention(bdc); int n = dates.size(); std::vector<QuantLib::Date> adjusted(n); for (int i=0; i<n; i++) { adjusted[i] = pcal->adjust(dates[i], bdcval); } return adjusted; }
// [[Rcpp::export]] std::vector<double> businessDaysBetween(std::string calendar, std::vector<QuantLib::Date> from, std::vector<QuantLib::Date> to, bool includeFirst=true, bool includeLast=false) { boost::shared_ptr<QuantLib::Calendar> pcal(getCalendar(calendar)); int n = from.size(); std::vector<double> between(n); for (int i=0; i<n; i++) { between[i] = pcal->businessDaysBetween(from[i], to[i], includeFirst, includeLast); } return between; }
// [[Rcpp::export]] std::vector<QuantLib::Date> advance1(std::string calendar, double amount, double unit, int bdcVal, double emr, std::vector<QuantLib::Date> dates) { boost::shared_ptr<QuantLib::Calendar> pcal(getCalendar(calendar)); QuantLib::BusinessDayConvention bdc = getBusinessDayConvention(bdcVal); int n = dates.size(); std::vector<QuantLib::Date> advance(n); for (int i=0; i<n; i++) { advance[i] = pcal->advance(dates[i], amount, getTimeUnit(unit), bdc, (emr == 1) ? true : false); } return advance; }
// [[Rcpp::export]] std::vector<QuantLib::Date> advance2(std::string calendar, double period, int bdcVal, double emr, std::vector<QuantLib::Date> dates) { boost::shared_ptr<QuantLib::Calendar> pcal(getCalendar(calendar)); QuantLib::BusinessDayConvention bdc = getBusinessDayConvention(bdcVal); int n = dates.size(); std::vector<QuantLib::Date> advance(n); for (int i=0; i<n; i++) { advance[i] = pcal->advance(dates[i], QuantLib::Period(getFrequency(period)), bdc, (emr == 1) ? true : false); } return advance; }
// [[Rcpp::export]] bool setCalendarContext(std::string calendar, int fixingDays, QuantLib::Date settleDate) { // Rcpp Attribute cannot reflect complicated default arguments if (settleDate.serialNumber() == 0) { calendar = "TARGET"; fixingDays = 2; settleDate = QuantLib::Date::todaysDate() + 2; } // set fixingDays and settleDate RQLContext::instance().fixingDays = fixingDays; RQLContext::instance().settleDate = settleDate; boost::shared_ptr<QuantLib::Calendar> pcal(getCalendar(calendar)); RQLContext::instance().calendar = *pcal; // set calendar in global singleton return true; }
RcppExport SEXP setContext(SEXP parSEXP) { try { Rcpp::List par(parSEXP); // set fixingDays and settleDate RQLContext::instance().fixingDays = Rcpp::as<int>(par["fixingDays"]); RQLContext::instance().settleDate = QuantLib::Date(dateFromR(Rcpp::as<Rcpp::Date>(par["settleDate"]))); boost::shared_ptr<QuantLib::Calendar> pcal( getCalendar(Rcpp::as<std::string>(par["calendar"])) ); RQLContext::instance().calendar = *pcal; // set calendar in global singleton } catch(std::exception &ex) { forward_exception_to_r(ex); } catch(...) { ::Rf_error("c++ exception (unknown reason)"); } return R_NilValue; }
RcppExport SEXP isHoliday(SEXP calSexp, SEXP dateSexp){ try { boost::shared_ptr<QuantLib::Calendar> pcal( getCalendar(Rcpp::as<std::string>(calSexp)) ); Rcpp::DateVector dates = Rcpp::DateVector(dateSexp); int n = dates.size(); std::vector<int> hdays(n); for (int i=0; i<n; i++) { QuantLib::Date day( dateFromR(dates[i]) ); hdays[i] = pcal->isHoliday(day); } return Rcpp::wrap(hdays); } catch(std::exception &ex) { forward_exception_to_r(ex); } catch(...) { ::Rf_error("c++ exception (unknown reason)"); } return R_NilValue; }