Hi,
I'm trying to understand how works the spreadsheet "Yield curve bootstrapping" and as first test I tried to calculate the discount factors of Depo rates. As you can see in the xls in attachment [sheet bootstrapping - cols J-M] my df are slightly (but always) greater then the df calculated by qlxl.
I use the formula df = 1/(1+Depo*(dd/360)). Can someone explain me where I wrong? Thank you Paolo
------------------------------------------------------------------------------ Download Intel® Parallel Studio Eval Try the new software tools for yourself. Speed compiling, find bugs proactively, and fine-tune applications for parallel performance. See why Intel Parallel Studio got high marks during beta. http://p.sf.net/sfu/intel-sw-dev _______________________________________________ QuantLib-users mailing list [hidden email] https://lists.sourceforge.net/lists/listinfo/quantlib-users YieldCurveBootstrapping.xls (66K) Download Attachment |
Hi Paolo
> I'm trying to understand how works the spreadsheet "Yield curve > bootstrapping" and as first test I tried to calculate the discount factors > of Depo rates. > As you can see in the xls in attachment my > df are slightly (but always) greater then the df calculated by qlxl. > I use the formula df = 1/(1+Depo*(dd/360)). > Can someone explain me where I wrong? you got wrong all dd but the first one and didn't take into account the fact that all deposit but ON are "forward" deposit with respect to today's date You missed the peculiar nature of ON and TN deposits, which apply from today to tomorrow and from tomorrow to spot date respectively. TN is a "forward" deposit: its discount is the product of the discount generated by ON times its own discounting term 1/(1+Depo*(dd/360)). The same is for all other deposits which start from spot, not from today. Their own discounting term 1/(1+Depo*(dd/360)) must be multiplied for the discount at spot date Please find attached a workbook with fixed calculations. ciao -- Nando ------------------------------------------------------------------------------ _______________________________________________ QuantLib-users mailing list [hidden email] https://lists.sourceforge.net/lists/listinfo/quantlib-users YieldCurveBootstrapping2.xls (74K) Download Attachment |
In reply to this post by paolo baroni
Hi, I have also worked with "Yield curve bootstrapping" file and I'm noticed a numerical instability of the function (with discount factor as output).
The attached file contains real data and, as you can see, the function gives #NUM!. The problem comes from the red cells (3m and 9m deposits): I know they look like "strange" numbers, but they are real numbers... so my questions are: can quantlibXL functions handle this kind of (real) situation? Is it possible to increase the numerical robustness? P.S. Is the point the monotonicity of the discount factor curve? Thanks a lot Stefano ---------- Initial Header ----------- >From : "Ferdinando Ametrano" [hidden email] To : "Paolo Baroni" [hidden email] Cc : [hidden email] Date : Wed, 21 Apr 2010 11:26:02 +0200 Subject : Re: [Quantlib-users] yield curve bootstrapping > Hi Paolo > > > I'm trying to understand how works the spreadsheet "Yield curve > > bootstrapping" and as first test I tried to calculate the discount factors > > of Depo rates. > > As you can see in the xls in attachment my > > df are slightly (but always) greater then the df calculated by qlxl. > > I use the formula df = 1/(1+Depo*(dd/360)). > > Can someone explain me where I wrong? > > you got wrong all dd but the first one and didn't take into account > the fact that all deposit but ON are "forward" deposit with respect to > today's date > > You missed the peculiar nature of ON and TN deposits, which apply from > today to tomorrow and from tomorrow to spot date respectively. TN is a > "forward" deposit: its discount is the product of the discount > generated by ON times its own discounting term 1/(1+Depo*(dd/360)). > > The same is for all other deposits which start from spot, not from > today. Their own discounting term 1/(1+Depo*(dd/360)) must be > multiplied for the discount at spot date > > Please find attached a workbook with fixed calculations. > > ciao -- Nando > ------------------------------------------------------------------------------ _______________________________________________ QuantLib-users mailing list [hidden email] https://lists.sourceforge.net/lists/listinfo/quantlib-users |
In reply to this post by paolo baroni
Sorry, here is the file,
Stefano ---------- Initial Header ----------- >From : "Ferdinando Ametrano" [hidden email] To : "Paolo Baroni" [hidden email] Cc : [hidden email] Date : Wed, 21 Apr 2010 11:26:02 +0200 Subject : Re: [Quantlib-users] yield curve bootstrapping > Hi Paolo > > > I'm trying to understand how works the spreadsheet "Yield curve > > bootstrapping" and as first test I tried to calculate the discount factors > > of Depo rates. > > As you can see in the xls in attachment my > > df are slightly (but always) greater then the df calculated by qlxl. > > I use the formula df = 1/(1+Depo*(dd/360)). > > Can someone explain me where I wrong? > > you got wrong all dd but the first one and didn't take into account > the fact that all deposit but ON are "forward" deposit with respect to > today's date > > You missed the peculiar nature of ON and TN deposits, which apply from > today to tomorrow and from tomorrow to spot date respectively. TN is a > "forward" deposit: its discount is the product of the discount > generated by ON times its own discounting term 1/(1+Depo*(dd/360)). > > The same is for all other deposits which start from spot, not from > today. Their own discounting term 1/(1+Depo*(dd/360)) must be > multiplied for the discount at spot date > > Please find attached a workbook with fixed calculations. > > ciao -- Nando > ------------------------------------------------------------------------------ _______________________________________________ QuantLib-users mailing list [hidden email] https://lists.sourceforge.net/lists/listinfo/quantlib-users =?iso-8859-1?Q?YieldCurveBootstrapping=5Frealdata.xls?= (77K) Download Attachment |
In reply to this post by stefano.sampietro@libero.it
On Wed, Apr 21, 2010 at 5:06 PM, stefano sampietro
<[hidden email]> wrote: > Hi, I have also worked with "Yield curve bootstrapping" file and I'm noticed a numerical instability of the function (with discount factor as output). > The attached file contains real data and, as you can see, the function gives #NUM!. > The problem comes from the red cells (3m and 9m deposits): I know they look like "strange" numbers, but they are real numbers... so my questions are: can quantlibXL functions handle this kind of (real) situation? Is it possible to increase the numerical robustness? > > P.S. Is the point the monotonicity of the discount factor curve? yes, the 3M rate generates a discount factor lower than the one implied by the 4M rate, implying negative forward rate between 3M-4M. They might be "real numbers" but are "fake values"... If you ever need to allow negative forward rates you have to compile the library with QL_NEGATIVE_RATES defined, so even this dummy unrealistic situation could be handled. Trust me: QuantLib's bootstrapping is numerically very robust and has handled all curve shapes emerged in the last 6 years. ciao -- Nando ------------------------------------------------------------------------------ _______________________________________________ QuantLib-users mailing list [hidden email] https://lists.sourceforge.net/lists/listinfo/quantlib-users |
In reply to this post by paolo baroni
Hi Nando, thx for your reply; now it's clear to me that the problem is the negativness of the fwd rates (I trust you about the robustness of quantlib!:)).
Unfortunately market data could lead to this kind of inconsistencies (update times not exactly equal, different liquidity, and so on...) I tried using euribor future instead of long deposit, but the problem still remains (my guess is that with these low euro rates, few bips are enough to create problems...) Anyway I think I will fix by compiling with QL_NEGATIVE_RATES, thx ciao Stefano ---------- Initial Header ----------- >From : [hidden email] To : "stefano sampietro" [hidden email] Cc : "quantlib-users" [hidden email],"baronister" [hidden email] Date : Wed, 21 Apr 2010 19:01:01 +0200 Subject : Re: [Quantlib-users] yield curve bootstrapping > On Wed, Apr 21, 2010 at 5:06 PM, stefano sampietro > <[hidden email]> wrote: > > Hi, I have also worked with "Yield curve bootstrapping" file and I'm noticed a numerical instability of the function (with discount factor as output). > > The attached file contains real data and, as you can see, the function gives #NUM!. > > The problem comes from the red cells (3m and 9m deposits): I know they look like "strange" numbers, but they are real numbers... so my questions are: can quantlibXL functions handle this kind of (real) situation? Is it possible to increase the numerical robustness? > > > > P.S. Is the point the monotonicity of the discount factor curve? > > yes, the 3M rate generates a discount factor lower than the one > implied by the 4M rate, implying negative forward rate between 3M-4M. > They might be "real numbers" but are "fake values"... > > If you ever need to allow negative forward rates you have to compile > the library with QL_NEGATIVE_RATES defined, so even this dummy > unrealistic situation could be handled. > > Trust me: QuantLib's bootstrapping is numerically very robust and has > handled all curve shapes emerged in the last 6 years. > > ciao -- Nando > ------------------------------------------------------------------------------ _______________________________________________ QuantLib-users mailing list [hidden email] https://lists.sourceforge.net/lists/listinfo/quantlib-users |
Hi Stefano
> Unfortunately market data could lead to this kind of inconsistencies > (update times not exactly equal, different liquidity, and so on...) no way. It's almost 13 years now I work on interest rates as quant/trader/developer and I've never encountered such a problem in the EUR market > Anyway I think I will fix by compiling with QL_NEGATIVE_RATES if you have to go that way in the EUR market I bet some relevant money you have something dramatically wrong in your system ciao -- Nando ------------------------------------------------------------------------------ _______________________________________________ QuantLib-users mailing list [hidden email] https://lists.sourceforge.net/lists/listinfo/quantlib-users |
In reply to this post by Ferdinando M. Ametrano-3
Hi Nando,
I'm grateful to you for the answer. So, if I understand well what you said, I always need to know the ON and TN rates to calculate the spot df and then all the df curve... Is this correct? Thanks ciao Paolo
2010/4/21 Ferdinando Ametrano <[hidden email]> Hi Paolo ------------------------------------------------------------------------------ _______________________________________________ QuantLib-users mailing list [hidden email] https://lists.sourceforge.net/lists/listinfo/quantlib-users |
In reply to this post by stefano.sampietro@libero.it
Hi Stefano,
some month ago I had a similar problem with rates. In that case was that I didn't download rates fixed at the same time. When I fixed this problem I didn't see the negativness of the fwd rates anymore.
Hope this help Ciao Paolo
2010/4/22 stefano sampietro <[hidden email]> Hi Nando, thx for your reply; now it's clear to me that the problem is the negativness of the fwd rates (I trust you about the robustness of quantlib!:)). ------------------------------------------------------------------------------ _______________________________________________ QuantLib-users mailing list [hidden email] https://lists.sourceforge.net/lists/listinfo/quantlib-users |
In reply to this post by paolo baroni
On Fri, 2010-04-23 at 07:04 +0200, Paolo Baroni wrote:
> Hi Nando, > I'm grateful to you for the answer. So, if I understand well what you > said, I always need to know the ON and TN rates to calculate the spot > df and then all the df curve... Is this correct? No, you can skip them if you want (the curve will determine the first discount at the spot date of the first deposit and extrapolate backwards from it.) Nando's point was simply that whatever rates you're including, you have to take care that you use for each one its correct start and end date. Luigi -- Quote me as saying I was misquoted. -- Groucho Marx ------------------------------------------------------------------------------ _______________________________________________ QuantLib-users mailing list [hidden email] https://lists.sourceforge.net/lists/listinfo/quantlib-users |
In reply to this post by paolo baroni
Hi Paolo, I agree, this is exactly what I meant by "inconsistencies" of the data. I don't think I have mistakes in my system, as Nando suggests, since the system in this case is just a file that download data from a well-known platform... Now I wonder if I use the best tickers (i.e. "flashing" enough, etc.)
Stefano ---------- Initial Header ----------- >From : "Paolo Baroni" [hidden email] To : "stefano sampietro" [hidden email] Cc : "nando" [hidden email],"quantlib-users" [hidden email] Date : Fri, 23 Apr 2010 07:19:00 +0200 Subject : Re: [Quantlib-users] yield curve bootstrapping > Hi Stefano, > some month ago I had a similar problem with rates. In that case was that I > didn't download rates fixed at the same time. > When I fixed this problem I didn't see the negativness of the fwd rates > anymore. > > Hope this help > > Ciao > Paolo > > 2010/4/22 stefano sampietro <[hidden email]> > > > Hi Nando, thx for your reply; now it's clear to me that the problem is the > > negativness of the fwd rates (I trust you about the robustness of > > quantlib!:)). > > Unfortunately market data could lead to this kind of inconsistencies > > (update times not exactly equal, different liquidity, and so on...) I tried > > using euribor future instead of long deposit, but the problem still remains > > (my guess is that with these low euro rates, few bips are enough to create > > problems...) > > Anyway I think I will fix by compiling with QL_NEGATIVE_RATES, thx > > > > ciao > > Stefano > > > > ---------- Initial Header ----------- > > > > From : [hidden email] > > To : "stefano sampietro" [hidden email] > > Cc : "quantlib-users" [hidden email],"baronister" > > [hidden email] > > Date : Wed, 21 Apr 2010 19:01:01 +0200 > > Subject : Re: [Quantlib-users] yield curve bootstrapping > > > > > On Wed, Apr 21, 2010 at 5:06 PM, stefano sampietro > > > <[hidden email]> wrote: > > > > Hi, I have also worked with "Yield curve bootstrapping" file and I'm > > noticed a numerical instability of the function (with discount factor as > > output). > > > > The attached file contains real data and, as you can see, the function > > gives #NUM!. > > > > The problem comes from the red cells (3m and 9m deposits): I know they > > look like "strange" numbers, but they are real numbers... so my questions > > are: can quantlibXL functions handle this kind of (real) situation? Is it > > possible to increase the numerical robustness? > > > > > > > > P.S. Is the point the monotonicity of the discount factor curve? > > > > > > yes, the 3M rate generates a discount factor lower than the one > > > implied by the 4M rate, implying negative forward rate between 3M-4M. > > > They might be "real numbers" but are "fake values"... > > > > > > If you ever need to allow negative forward rates you have to compile > > > the library with QL_NEGATIVE_RATES defined, so even this dummy > > > unrealistic situation could be handled. > > > > > > Trust me: QuantLib's bootstrapping is numerically very robust and has > > > handled all curve shapes emerged in the last 6 years. > > > > > > ciao -- Nando > > > > > > > > ------------------------------------------------------------------------------ _______________________________________________ QuantLib-users mailing list [hidden email] https://lists.sourceforge.net/lists/listinfo/quantlib-users |
Hi,
since this discussion is fairly new please allow me to butt in: I also tried to understand the bootstrapping process, but failed on reaching the first (2 year) swap point. I used "DF(2Y) = ( DF(Settle) - CF(1Y) * DF(1Y) ) / ( 1 + CF(2Y) )" to calcuate my expected value, but Quant Lib seems think differently? Furthermore the I get the impression that I do something wrong with the business day adjustment since the resulting dates in the term structure do not fit?
I include the sample calculation based on the QuantLibXL example
YieldCurveBootstrappingTest.xls
Thanks,
Gert
View this message in context: Re: yield curve bootstrapping Sent from the quantlib-users mailing list archive at Nabble.com. ------------------------------------------------------------------------------ _______________________________________________ QuantLib-users mailing list [hidden email] https://lists.sourceforge.net/lists/listinfo/quantlib-users |
In reply to this post by Ferdinando M. Ametrano-3
Hi,
since this discussion is fairly new please allow me to butt in: I also tried to understand the bootstrapping process, but failed on reaching the first (2 year) swap point. I used "DF(2Y) = ( DF(Settle) - CF(1Y) * DF(1Y) ) / ( 1 + CF(2Y) )" to calcuate my expected value, but Quant Lib seems think differently? Furthermore I get the impression that I do something wrong with the business day adjustment since the resulting dates in the term structure do not fit? I include the sample calculation based on the QuantLibXL example YieldCurveBootstrappingTest.xls Thanks, Gert |
On Fri, Apr 23, 2010 at 4:25 PM, Gert H <[hidden email]> wrote:
> I used "DF(2Y) = ( DF(Settle) - CF(1Y) * DF(1Y) ) / ( 1 + > CF(2Y) )" to calcuate my expected value, but Quant Lib seems think > differently? Yes it does. You are using the floating leg's telescopic property approximation, while QuantLib expand all floating leg cashflows properly ciao -- Nando ------------------------------------------------------------------------------ _______________________________________________ QuantLib-users mailing list [hidden email] https://lists.sourceforge.net/lists/listinfo/quantlib-users |
Hi Nando, thanks for the reply, but ... a plain float leg with calculated forwards and payments based on these forwards will always boil down to (DF(Effective) - DF(End))? Since Paolo couldn't find my example any more, I extended the calculation to include properly calculated cashflows on the float side, still yielding a different DF then QuantLib?
New version of example:YieldCurveBootstrappingTest.xls
Maybe I made a mistake in the setup of the calculation? Dates are off as well?
Thanks, Gert
|
In reply to this post by Luigi Ballabio
Hi Luigi,
so even if I use as first rate a Depo1M, the qlxl function calculates the df of his "start date" and use it in the calculation of the curve? In market practice do you think is better to use all the data available (in qlxl function) or you can skip someone of them?
Thanks ciao Paolo 2010/4/23 Luigi Ballabio <[hidden email]>
------------------------------------------------------------------------------ _______________________________________________ QuantLib-users mailing list [hidden email] https://lists.sourceforge.net/lists/listinfo/quantlib-users |
Hi,
since I don't want to annoy all of you with my questions about the math finance and the market practice behind the "yield curve bootstrapping" can someone suggest me some paper or a reference where I can find these information?
Thanks Ciao Paolo
2010/4/26 Paolo Baroni <[hidden email]> Hi Luigi, ------------------------------------------------------------------------------ _______________________________________________ QuantLib-users mailing list [hidden email] https://lists.sourceforge.net/lists/listinfo/quantlib-users |
In reply to this post by paolo baroni
On Mon, 2010-04-26 at 17:27 +0200, Paolo Baroni wrote:
> so even if I use as first rate a Depo1M, the qlxl function calculates > the df of his "start date" and use it in the calculation of the curve? Yes. The bootstrap process will fix the discount factor at the end date and will interpolate between the end-date and today to find the discount at the start date. Both will be used to reprice the deposit rate. > In market practice do you think is better to use all the data > available (in qlxl function) or you can skip someone of them? It depends on which instruments you're trying to price, I guess. But I'll leave the say on market practice to someone more qualified. Luigi -- The wisdom of the wise and the experience of the ages are perpetuated by quotations. -- Benjamin Disraeli ------------------------------------------------------------------------------ _______________________________________________ QuantLib-users mailing list [hidden email] https://lists.sourceforge.net/lists/listinfo/quantlib-users |
Great thanks
ciao Paolo
2010/4/28 Luigi Ballabio <[hidden email]>
------------------------------------------------------------------------------ _______________________________________________ QuantLib-users mailing list [hidden email] https://lists.sourceforge.net/lists/listinfo/quantlib-users |
Hi,
sorry for my ignorance but which kind of rate is the "DepoSN"?
Thanks
Paolo
2010/4/29 Paolo Baroni <[hidden email]> Great thanks ------------------------------------------------------------------------------ _______________________________________________ QuantLib-users mailing list [hidden email] https://lists.sourceforge.net/lists/listinfo/quantlib-users |
Free forum by Nabble | Edit this page |