[Rquantlib-devel] Is DiscountCurve() supposed to work?
Dirk Eddelbuettel
edd at debian.org
Wed Oct 29 04:12:44 CET 2014
On 29 October 2014 at 03:52, Benjamin J. J. Voigt wrote:
| Hi,
|
| the code is take from here: http://stackoverflow.com/questions/22226195/
| discountcurve-example-not-working-on-rquantlib
| and I ran with recent (2h old as per time of writing) GH. It results in a
| segfault all the time no matter wether its in RStudio, command line R or the
| Mac R GUI.
Ok. I am in the middle of something else so I can help you with this ...
| But, the good thing is, the example(DiscountCurve) on the GH sources worked. So
| I will look at that code instead. Thank you!
... that is exactly what I would do.
My first instinct always is to a) get something in 'pure' QuantLib working
and b) once that is done add the Rcpp/RQuantLib layer. By separating the two
steps I find it easier to make progress.
| Regards,
| Ben
|
| P.S.: Happy to test some more, but do you rather take findings on the list or
| as tickets?
I am old school and tend to favour the list, but I am also getting used to
having to respond to issue tickets at GH. Most folks seem to prefer the
latter. I guess overall I don;t have a strong preference either. More
important to get progress on code...
Dirk
|
| On Wed, Oct 29, 2014 at 3:32 AM, Dirk Eddelbuettel <edd at debian.org> wrote:
|
|
| On 29 October 2014 at 02:50, Benjamin J. J. Voigt wrote:
| | Hi,
| |
| | running the following example (mac 10.9.*) I get a crash, both on stable
| and
| | github sources. Is there a known reason for this and how do I prevent the
| | error?
| |
| | R-Code:
| | savepar <- par(mfrow = c(3, 3))
| |
| | params <- list(tradeDate = c(2, 15, 2002), settleDate = c(2,
| | 19, 2002), dt = 0.01, interpWhat = "discount", interpHow =
| "loglinear")
| |
| | tsQuotes <- list(d1w = 0.0382, d1m = 0.0372, fut1 = 96.2875,
| | fut2 = 96.7875, fut3 = 96.9875, fut4 = 96.6875, fut5 = 96.4875,
| | fut6 = 96.3875, fut7 = 96.2875, fut8 = 96.0875, s3y = 0.0398,
| | s5y = 0.0443, s10y = 0.05165, s15y = 0.055175)
| |
| | times <- seq(0, 10, 0.1)
| |
| | DiscountCurve(params, tsQuotes, times)
|
| Can you detail where you got this from / what you changed? Because Gmail
| insists on inserting garbage into text this is a little tedious for me.
|
| When I run your code against current GH sources, I get an error on input:
| R> params <- list(tradeDate = c(2, 15, 2002),
| + settleDate = c(2, 19, 2002),
| + dt = 0.01,
| + interpWhat = "discount",
| + interpHow = "loglinear")
| R> tsQuotes <- list(d1w = 0.0382, d1m = 0.0372, fut1 = 96.2875,
| + fut2 = 96.7875, fut3 = 96.9875, fut4 = 96.6875, fut5 =
| 96.4875,
| + fut6 = 96.3875, fut7 = 96.2875, fut8 = 96.0875, s3y =
| 0.0398,
| + s5y = 0.0443, s10y = 0.05165, s15y = 0.055175)
| R> times <- seq(0, 10, 0.1)
| R> DiscountCurve(params, tsQuotes, times)
| Error: expecting a single value
| R>
|
|
| Now, there was a (very recent) conversation with Luigi (upstream at QL)
| which
| we had, as I recall, mostly in an issue ticket at GH. That revealed two
| sources of trouble: I had the wrong date, and a bad tenor -- removing the
| s2y
| point leads to better / stabler results.
|
| With that I (finally!!) reenable the discount curve examples. So from
| current
| GitHub sources you once again get a meaning 3 x 3 grid of plots. An example
| is below, this of course does not include the chart (which I could email
| you...) but you get a hint of the final values of curves via str() below.
|
| R> library(RQuantLib)
| R> example(DiscountCurve)
|
| DscntCR> savepar <- par(mfrow=c(3,3), mar=c(4,4,2,0.5))
|
| DscntCR> ## This data is taken from sample code shipped with QuantLib 0.9.7
| DscntCR> ## from the file Examples/Swap/swapvaluation
| DscntCR> params <- list(tradeDate=as.Date('2004-09-20'),
| DscntC+ settleDate=as.Date('2004-09-22'),
| DscntC+ dt=.25,
| DscntC+ interpWhat="discount",
| DscntC+ interpHow="loglinear")
|
| DscntCR> setEvaluationDate(as.Date("2004-09-20"))
| [1] TRUE
|
| DscntCR> ## We get numerical issue for the spline interpolation if we add
| DscntCR> ## any on of these three extra futures -- the original example
| DscntCR> ## creates different curves based on different deposit, fra,
| futures
| DscntCR> ## and swap data
| DscntCR> ## Removing s2y helps, as kindly pointed out by Luigi Ballabio
| DscntCR> tsQuotes <- list(d1w = 0.0382,
| DscntC+ d1m = 0.0372,
| DscntC+ d3m = 0.0363,
| DscntC+ d6m = 0.0353,
| DscntC+ d9m = 0.0348,
| DscntC+ d1y = 0.0345,
| DscntC+ fut1=96.2875,
| DscntC+ fut2=96.7875,
| DscntC+ fut3=96.9875,
| DscntC+ fut4=96.6875,
| DscntC+ fut5=96.4875,
| DscntC+ fut6=96.3875,
| DscntC+ fut7=96.2875,
| DscntC+ fut8=96.0875,
| DscntC+ # s2y = 0.037125,
| DscntC+ s3y = 0.0398,
| DscntC+ s5y = 0.0443,
| DscntC+ s10y = 0.05165,
| DscntC+ s15y = 0.055175)
|
| DscntCR> times <- seq(0,10,.1)
|
| DscntCR> # Loglinear interpolation of discount factors
| DscntCR> curves <- DiscountCurve(params, tsQuotes, times)
|
| DscntCR> plot(curves,setpar=FALSE)
| Hit <Return> to see next plot:
|
| DscntCR> # Linear interpolation of discount factors
| DscntCR> params$interpHow="linear"
|
| DscntCR> curves <- DiscountCurve(params, tsQuotes, times)
|
| DscntCR> plot(curves,setpar=FALSE)
|
| DscntCR> # Spline interpolation of discount factors
| DscntCR> params$interpHow="spline"
|
| DscntCR> curves <- DiscountCurve(params, tsQuotes, times)
|
| DscntCR> plot(curves,setpar=FALSE)
|
| DscntCR> par(savepar)
| R> str(curves)
| List of 7
| $ times : num [1:101] 0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 ...
| $ discounts : num [1:101] 1 0.996 0.993 0.989 0.984 ...
| $ forwards : num [1:101] 0.0367 0.0404 0.0404 0.0287 0.0275 ...
| $ zerorates : num [1:101] 0.0392 0.0376 0.0368 0.0379 0.0402 ...
| $ flatQuotes: logi FALSE
| $ params :List of 5
| ..$ tradeDate : Date[1:1], format: "2004-09-20"
| ..$ settleDate: Date[1:1], format: "2004-09-22"
| ..$ dt : num 0.25
| ..$ interpWhat: chr "discount"
| ..$ interpHow : chr "spline"
| $ table :'data.frame': 5479 obs. of 2 variables:
| ..$ date : Date[1:5479], format: "2004-09-22" "2004-09-23"
| "2004-09-24" "2004-09-25" ...
| ..$ zeroRates: num [1:5479] 0.0392 0.0392 0.0392 0.0392 0.0392 ...
| - attr(*, "class")= chr "DiscountCurve"
| R>
|
|
| So very much no segfault here on the default example.
|
|
| |
| |
| | R-Error:
| | *** caught segfault ***
| | address 0x20, cause 'memory not mapped'
| |
| | Traceback:
| | 1: .Call("RQuantLib_discountCurveEngine", PACKAGE = "RQuantLib",
| rparams,
| | tslist, times)
| | 2: discountCurveEngine(params, tsQuotes, times)
| | 3: DiscountCurve.default(params, tsQuotes, times)
| | 4: DiscountCurve(params, tsQuotes, times)
| |
| |
| | I am not in a hurry, just might need to think of doing this on my own,
| but
| | pricing bonds on a flat curve is not quite what regular users would like
| to do
| | when thinking about QuantLib.
|
| We've just overcome this.
|
| RQuantLib is coming together. I did a bunch of work in the summer, then got
| sidetracked with travel and conferences and getting back to it. Michele
| helped with two excellent pull requests, and I think we are getting ready
| for
| a new release. The testing you are doing here is very welcome.
|
| Cheers, Dirk
|
| |
| | Happy to provide more details if required.
| |
| | Regards,
| | Ben
| |
| | --
| | Ben
| | _______________________________________________
| | Rquantlib-devel mailing list
| | Rquantlib-devel at lists.r-forge.r-project.org
| | https://lists.r-forge.r-project.org/cgi-bin/mailman/listinfo/
| rquantlib-devel
|
| --
| http://dirk.eddelbuettel.com | @eddelbuettel | edd at debian.org
|
|
|
|
| --
| Ben
--
http://dirk.eddelbuettel.com | @eddelbuettel | edd at debian.org
More information about the Rquantlib-devel
mailing list