|
From: Luca B. <luc...@gm...> - 2008-07-16 16:08:06
|
On Wed, Jul 16, 2008 at 11:01 AM, Luigi Ballabio <lui...@gm...> wrote: > On Tue, 2008-07-15 at 12:21 -0400, Luca Billi wrote: >> the following code throws an exception when >> bond.cleanPriceFromZSpread(...) is called. >> The issue comes from the fact that, in this example, there's no >> settlement adjustment, so the function >> ZeroSpreadedTermStructure::zeroYieldImpl(Time t) needs to be evaluated >> for t=0. >> >> I got around this issue by adding the seemingly harmless >> >> if(t==0.) return 1.; >> >> at line 86 of file ql/termstructures/yield/zeroyieldstructure.hpp >> >> Anyone has a better idea? > > I'd rather fix ZeroSpreadedTermStructure::zeroYieldImpl so that it works > at t=0. Did you happen to investigate what goes wrong inside there? > > Later, > Luigi > > The exception is thrown by InterestRate::equivalentRate(), which, I think, is called to convert the yield+spread to continuous compounding. I think the exception is legitimate: interest rates on zero intervals are meaningless, whereas discount factors are not: exp(-r*t) = 1 for t=0, regardless of r. That's why I think that, when t=0, it's ok to avoid calling ZeroSpreadedTermStructure::zeroYieldImpl(), which operates in the yield space and is not required when t=0, and return immediatly 1. Luca |