aboutsummaryrefslogtreecommitdiffstats
path: root/R/RQuantLib.patch
blob: b39f969f5f1ebe4c2b991ea400810b3befe49f50 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
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),