Hi,
just as an update to the point below: The second way of interpolating seems to be the correct one. I do not have a suggestion for a fix in ql however (as I said below, everything under the assumption that my understanding of the intended usage of the classes is correct).
I have a second question on inflation in ql concerning the yoy volatility structure. I am trying to use a KInterpolatedYoyOptionletVolatilitySurface. Retrieving a volatility for say maturity = 1y and a strike k the following happens:
1 YoYOptionletVolatilitySurface::volatility( today + 1y , k ) is called. The observation lag (3m) is subtracted from the maturity date and the time to reference date is computed giving (apprx.) t = 0.75. Then volatilityImpl(t,k) is called =>
2 KInterpolatedYoYOptionletVolatilitySurface::volatilityImpl(t,k) recomputes a physical date d from t=0.75 giving something like d = today+9m and then retrieves a volatility slice for this d from the yoyOptionletStripper, which is in my case an InterpolatedYoYOptionletStripper =>
3 InterpolatedYoYOptionletStripper::slice(d) computes for each relevant strike k a volatility by invoking volatility(d,k) on the respective volatility curve. The latter is a PiecewiseYoYOptionletVolatilityCurve. This triggers executiion of
4 YoYOptionletVolatilitySurface::volatility( today +9m , k ) which we already had above. Again the observation lag (3m) is subtracted and we arrive at today + 6m and (apprx.) t = 0.5, which is used as input to
5 InterpolatedYoYOptionletVolatilityCurve::volatilityImpl(t) which finally returns the volatility for t=0.5.
It should be t=0.75 in my opinion however. I do not have a general fix, but only a workaround changing the call in 2 into
slice_ = yoyOptionletStripper_->slice(d + this->observationLag() );
which should work if the default observation lag is used in 1.
Is my observation correct and would you consider the workaround more or less reasonable ?
Thanks a lot for any input
Peter
---------- Forwarded message ---------- From: Peter Caspers <[hidden email]> Date: 2012/12/17 Subject: Inflation Index Interpolation To: [hidden email] Hi,
I am comparing Murex and QuantLib concerning Inflation Pricing. I observe a difference in the way an index fixing is interpolated between known (i.e. already fixed) values. Here is an example:
Take the EUHICP XT index which has fixings
01.08.2012 (Aug 12) 115.10
01.09.2012 (Sep 12) 115.97
Now I want to look up the fixing on 28.08.2012 belonging to an observation date on 28.11.2012 (3m observation lag). In QL the interpolation is done as follows:
Days between 01.08. and 01.09. = 31, Days between 01.08. and 28.08. = 27, Interpolated Fixing = 115.10 + 27/31 * ( 115.97 - 115.10 )
In Murex on the opposite:
Days between 01.11. and 01.12. = 30, Days between 01.11. and 28.11. = 27, Interpolated Fixing = 115.10 + 27/30 * ( 115.97 - 115.10 ) Which computation is the correct one, i.e. what is the market convention that is actually applied to deals ? Maybe I am using the QL classes not as intended ?
Thanks a lot
Peter
------------------------------------------------------------------------------ Master Visual Studio, SharePoint, SQL, ASP.NET, C# 2012, HTML5, CSS, MVC, Windows 8 Apps, JavaScript and much more. Keep your skills current with LearnDevNow - 3,200 step-by-step video tutorials by Microsoft MVPs and experts. ON SALE this month only -- learn more at: http://p.sf.net/sfu/learnmore_122712 _______________________________________________ QuantLib-dev mailing list [hidden email] https://lists.sourceforge.net/lists/listinfo/quantlib-dev |
Free forum by Nabble | Edit this page |