[Rquantlib-devel] Is DiscountCurve() supposed to work?
Benjamin J. J. Voigt
bvoigt at gmail.com
Wed Oct 29 15:22:02 CET 2014
I have tried a few things on the segmentation fault.
It's a little hard to understand what is really going on because I am not
shown much information about where the error occurred. So far I have
identified a few conditions when things apparently do cause an error:
1. No call to setEvaluationDate() supplied
2. The setEvaluationDate() date is not exactly the same date as the trade
date
3. The tradeDate, and therefore the setEvaluationDate(), are set to a
non-business day
4. The times argument goes right up to the time for which rates are
provided e.g., a 15y swap rate is provided and times is defined as
seq(0,15,0.1). It seems a save way to do this is to provide _at least_ one
more rate beyond the times interval, i.e., seq(0,14,0.1) with a 15y swap
rate defined
I am catching these conditions now.
Regards,
Ben
On Wed, Oct 29, 2014 at 4:12 AM, Dirk Eddelbuettel <edd at debian.org> wrote:
>
> 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
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.r-forge.r-project.org/pipermail/rquantlib-devel/attachments/20141029/4ed891f9/attachment.html>
More information about the Rquantlib-devel
mailing list