aboutsummaryrefslogtreecommitdiffstats
path: root/R/RQuantLib.patch
diff options
context:
space:
mode:
Diffstat (limited to 'R/RQuantLib.patch')
-rw-r--r--R/RQuantLib.patch77
1 files changed, 77 insertions, 0 deletions
diff --git a/R/RQuantLib.patch b/R/RQuantLib.patch
new file mode 100644
index 00000000..b39f969f
--- /dev/null
+++ b/R/RQuantLib.patch
@@ -0,0 +1,77 @@
+diff -urN projects/RQuantLib-orig/NAMESPACE projects/RQuantLib/NAMESPACE
+--- projects/RQuantLib-orig/NAMESPACE 2011-09-10 09:11:15.000000000 -0400
++++ projects/RQuantLib/NAMESPACE 2013-09-16 18:30:38.190089857 -0400
+@@ -31,6 +31,7 @@
+ "FittedBondCurve",
+ ##--calendars.R
+ "isBusinessDay", "businessDay",
++ "nextIMMDate",
+ "isHoliday",
+ "isWeekend",
+ "isEndOfMonth",
+diff -urN projects/RQuantLib-orig/R/calendars.R projects/RQuantLib/R/calendars.R
+--- projects/RQuantLib-orig/R/calendars.R 2010-08-07 12:03:16.000000000 -0400
++++ projects/RQuantLib/R/calendars.R 2013-09-16 18:06:13.000000000 -0400
+@@ -29,6 +29,13 @@
+ names(val) <- dates
+ val
+ }
++
++nextIMMDate <- function(dates=Sys.Date()) {
++ stopifnot(class(dates)=="Date")
++ val <- .Call("nextIMMDate", dates, PACKAGE="RQuantLib")
++ val
++}
++
+ businessDay <- function(calendar="TARGET", dates=Sys.Date()) { ## may get deprecated one day
+ isBusinessDay(calendar, dates)
+ }
+diff -urN projects/RQuantLib-orig/src/calendars.cpp projects/RQuantLib/src/calendars.cpp
+--- projects/RQuantLib-orig/src/calendars.cpp 2013-02-17 16:16:25.000000000 -0500
++++ projects/RQuantLib/src/calendars.cpp 2013-09-16 18:06:49.000000000 -0400
+@@ -130,6 +130,27 @@
+ return R_NilValue;
+ }
+
++RcppExport SEXP nextIMMDate(SEXP dateSexp){
++
++ try {
++ Rcpp::DateVector dates = Rcpp::DateVector(dateSexp);
++ int n = dates.size();
++ QuantLib::Date immdate;
++ for(int i=0; i<n; i++) {
++ QuantLib::Date day( dateFromR(dates[i]) );
++ immdate = QuantLib::IMM::nextDate(day);
++ dates[i] = Rcpp::Date(immdate.month(), immdate.dayOfMonth(), immdate.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 isHoliday(SEXP calSexp, SEXP dateSexp){
+
+ try {
+diff -urN projects/RQuantLib-orig/src/curves.cpp projects/RQuantLib/src/curves.cpp
+--- projects/RQuantLib-orig/src/curves.cpp 2013-02-17 16:16:25.000000000 -0500
++++ projects/RQuantLib/src/curves.cpp 2013-09-17 10:10:31.842149882 -0400
+@@ -83,10 +83,11 @@
+ true, /*fixingDays,*/ depositDayCounter));
+ return depo;
+ } else if (type == RQLSwap) {
+- QuantLib::Frequency swFixedLegFrequency = QuantLib::Annual;
++ QuantLib::Frequency swFixedLegFrequency = QuantLib::Semiannual;
+ QuantLib::BusinessDayConvention swFixedLegConvention = QuantLib::Unadjusted;
+- QuantLib::DayCounter swFixedLegDayCounter = QuantLib::Thirty360(QuantLib::Thirty360::European);
+- boost::shared_ptr<QuantLib::IborIndex> swFloatingLegIndex(new QuantLib::Euribor6M);
++ QuantLib::DayCounter swFixedLegDayCounter = QuantLib::Thirty360(QuantLib::Thirty360::USA);
++ boost::shared_ptr<QuantLib::IborIndex> swFloatingLegIndex(new
++ QuantLib::USDLibor(QuantLib::Period(3, QuantLib::Months)));
+ boost::shared_ptr<QuantLib::Quote> quote(new QuantLib::SimpleQuote(r));
+ boost::shared_ptr<QuantLib::RateHelper> swap(new QuantLib::SwapRateHelper(
+ QuantLib::Handle<QuantLib::Quote>(quote),