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),
|