Login  Register

Re: Negative price with Forward Rates

Posted by Luigi Ballabio on Feb 01, 2014; 3:47pm
URL: http://quantlib.414.s1.nabble.com/Negative-price-with-Forward-Rates-tp14868p14932.html

Yes, possibly. In that case, we'd have to make the change in
InterpolatedForwardCurve<T>::zeroYieldImpl. But since we don't have
different exception types, we'd have to catch the exception and check
the error message it contains to decide whether to switch to the
base-class method (because if it's a different error, we'd want to let
it bubble up to client code). It wouldn't look very pretty :)
Another alternative would be to implement the numerical integration in
the LogLinear interpolation. I'm not sure that I like a situation in
which some curves are reasonably fast and others are much slower
depending on the interpolation method. Sure, the current situation is
that some interpolations don't work, so it might be an improvement
anyway...

(Oh, and a final note: while it makes sense to use log-linear with
discounts, because they're given by exp(-rt), I'm not sure that it
makes sense to use it with zero and forward rates.)

Luigi



On Tue, Jan 28, 2014 at 1:21 PM, Peter Caspers <[hidden email]> wrote:

> Luigi, just out of curiosity, in ForwardRateStructure there seems to
> be a general purpose implementation to get the zero yield by
> integration over the forwards. Wouldn't the situation here be a use
> case for exactly this (i.e. catch the exception and invoke the base
> class method instead) ?
> best, Peter
>
> On 28 January 2014 12:37, Luigi Ballabio <[hidden email]> wrote:
>> Yes. the curve is trying to integrate the forwards to get the
>> discounts, but the LogLinear interpolator doesn't provide a formula
>> for that. You'll have to choose another interpolation.
>>
>> Luigi
>>
>> On Mon, Jan 27, 2014 at 5:50 AM, varun yadav <[hidden email]> wrote:
>>> Hi Luigi,
>>>
>>> I passed evaluation date as the first date in liborDates. Also added
>>> corresponding rate in liborRates. But now it gives exception -
>>> "LogInterpolation primitive not implemented"
>>>
>>> Below are new values -
>>>
>>> liborDates -
>>>
>>> January 24th, 2014
>>> July 24th, 2014
>>> January 24th, 2015
>>> January 24th, 2016
>>> January 24th, 2017
>>> January 24th, 2018
>>> January 24th, 2019
>>> January 24th, 2020
>>> January 24th, 2021
>>> January 24th, 2022
>>> January 24th, 2023
>>> January 24th, 2024
>>> January 24th, 2029
>>>
>>> liborRates -
>>>
>>> 8.4
>>> 8.4955
>>> 8.36907
>>> 8.38416
>>> 8.47267
>>> 8.62786
>>> 8.69832
>>> 8.71107
>>> 8.85289
>>> 8.99607
>>> 8.80085
>>> 8.7099
>>> 9.00594
>>>
>>> Is exception coming due to InterpolatedForwardCurve<LogLinear> ...?
>>>
>>> Thanks in advance!
>>>
>>>
>>> On Thursday, January 23, 2014 5:02 PM, Luigi Ballabio
>>> <[hidden email]> wrote:
>>> You should pass the evaluation date as the first date in liborDates.
>>> You'll need a corresponding extra element in liborRates; just
>>> replicate the first you have for constant rates from today to the
>>> first actual Libor date.
>>>
>>> Luigi
>>>
>>> On Mon, Jan 20, 2014 at 8:12 AM, v17 <[hidden email]> wrote:
>>>> Hi Everyone,
>>>>
>>>> I have following piece of code which gives Exception "negative time (-0.5)
>>>> given"
>>>>
>>>> vector <Real> &forwardRates;
>>>> const int size = liborRates.size();
>>>> vector<Date> liborDates(liborTenors.size());
>>>> for (int i = 0; i < size; i++)
>>>> {
>>>>        curDate = ycDef.cal.advance(ycDef.evalDate, liborTenors[i]);
>>>>        liborDates[i] = curDate;
>>>> }
>>>> yieldCurve = shared_ptr<YieldTermStructure>(new
>>>> InterpolatedForwardCurve<LogLinear>(liborDates, liborRates, ycDef.dc,
>>>> ycDef.cal));
>>>> yieldCurve->enableExtrapolation();
>>>>
>>>> size = liborTenors.size();
>>>> forwardRates.clear();
>>>> forwardRates.resize(size);
>>>> try
>>>> {
>>>> forwardRates[i] = yieldCurve->forwardRate(ycDef.evalDate, ycDef.evalDate +
>>>> liborTenors[i] , ycDef.dc, Compounded, Annual);
>>>> }
>>>> catch(QuantLib::Error& e)
>>>> {
>>>> cout << e.what() << endl;
>>>> throw;
>>>> }
>>>>
>>>> liborDates has below values -
>>>>
>>>> July 20th, 2014
>>>> January 20th, 2015
>>>> January 20th, 2016
>>>> January 20th, 2017
>>>> January 20th, 2018
>>>> January 20th, 2019
>>>> January 20th, 2020
>>>> January 20th, 2021
>>>> January 20th, 2022
>>>> January 20th, 2023
>>>> January 20th, 2024
>>>> January 20th, 2029
>>>>
>>>> while liborRates is
>>>> 8.53854
>>>> 8.40083
>>>> 8.39311
>>>> 8.44955
>>>> 8.56089
>>>> 8.65359
>>>> 8.68869
>>>> 8.80096
>>>> 8.9133
>>>> 8.74109
>>>> 8.66277
>>>> 8.98536
>>>>
>>>> eval date is January 20th, 2014
>>>>
>>>> What is causing negative time exception?
>>>>
>>>> Thanks,
>>>> Varun
>>>>
>>>>
>>>>
>>>> --
>>>> View this message in context:
>>>> http://quantlib.10058.n7.nabble.com/Negative-price-with-Forward-Rates-tp14868.html
>>>> Sent from the quantlib-dev mailing list archive at Nabble.com.
>>>>
>>>>
>>>> ------------------------------------------------------------------------------
>>>> CenturyLink Cloud: The Leader in Enterprise Cloud Services.
>>>> Learn Why More Businesses Are Choosing CenturyLink Cloud For
>>>> Critical Workloads, Development Environments & Everything In Between.
>>>> Get a Quote or Start a Free Trial Today.
>>>>
>>>> http://pubads.g.doubleclick.net/gampad/clk?id=119420431&iu=/4140/ostg.clktrk
>>>> _______________________________________________
>>>> QuantLib-dev mailing list
>>>> [hidden email]
>>>> https://lists.sourceforge.net/lists/listinfo/quantlib-dev
>>>
>>>
>>>
>>>
>>> --
>>> <https://implementingquantlib.blogspot.com>
>>> <https://twitter.com/lballabio
>>>>
>>>
>>>
>>
>>
>>
>> --
>> <https://implementingquantlib.blogspot.com>
>> <https://twitter.com/lballabio>
>>
>> ------------------------------------------------------------------------------
>> WatchGuard Dimension instantly turns raw network data into actionable
>> security intelligence. It gives you real-time visual feedback on key
>> security issues and trends.  Skip the complicated setup - simply import
>> a virtual appliance and go from zero to informed in seconds.
>> http://pubads.g.doubleclick.net/gampad/clk?id=123612991&iu=/4140/ostg.clktrk
>> _______________________________________________
>> QuantLib-dev mailing list
>> [hidden email]
>> https://lists.sourceforge.net/lists/listinfo/quantlib-dev



--
<https://implementingquantlib.blogspot.com>
<https://twitter.com/lballabio>

------------------------------------------------------------------------------
WatchGuard Dimension instantly turns raw network data into actionable
security intelligence. It gives you real-time visual feedback on key
security issues and trends.  Skip the complicated setup - simply import
a virtual appliance and go from zero to informed in seconds.
http://pubads.g.doubleclick.net/gampad/clk?id=123612991&iu=/4140/ostg.clktrk
_______________________________________________
QuantLib-dev mailing list
[hidden email]
https://lists.sourceforge.net/lists/listinfo/quantlib-dev