Re: Coupons and Fixed Rate Legs

Posted by FORNAROLA CHIARA on
URL: http://quantlib.414.s1.nabble.com/Coupons-and-Fixed-Rate-Legs-tp1151p1154.html

>Hi Toyin,
>
>to be honest I've obtained the right schedule using QuantLibXL (to be
>quick) and all the parameters passed by John...
>The "1D" period works both if you pass it as it is or as period(daily).

>-----Original Message-----
>From: Toyin Akin [mailto:[hidden email]]
>Sent: Friday, July 20, 2007 4:35 PM
>To: FORNAROLA CHIARA; [hidden email]
>Cc: [hidden email]; [hidden email]
>Subject: RE: [Quantlib-users] Coupons and Fixed Rate Legs
>
>
>Hi,
>
>I was refering to John's original code (email).
>
>There is a frequency of daily, but yet the schedule (from the Fixed
leg)
>produced is not... hence the bug.
>
>Unless of course John only provided only a snapshot of the generated
>schedule, but they are certainly not daily. Whether the bug is in the
>schedule or the FixedLeg object is the issue I was raising.
>
>There could also be the possibility that the schedule that John
provided
>didn't really come from the code snippet he posted.
>
>If you are saying that when you run his code you get daily periods,
then

>all
>is well, but that is not what John originally reported...
>
>I noticed in the latest code of his, he has changed the frequency to
>semi-annual.
>
>John, did the schedule you posted actually come from the code snippet
>posted
>too? This is important because there are cases where one would like to
>price
>averging legs (OIS swaps for example) where pricing via a Bond is not
the

>way to go.
>
>Toy out.
>
>>From: "FORNAROLA CHIARA" <[hidden email]>
>>To: "Toyin Akin" <[hidden email]>, <[hidden email]>
>>CC: <[hidden email]>, <[hidden email]>
>>Subject: RE: [Quantlib-users] Coupons and Fixed Rate Legs
>>Date: Fri, 20 Jul 2007 14:30:09 +0200
>>
>>Hi Toyin,
>>
>>to be honest I've obtained the right schedule using QuantLibXL (to be
>>quick) and all the parameters passed by John...
>>The "1D" period works both if you pass it as it is or as
period(daily).

>>So I can't replicate what you mentioned to be a "bug".
>>For me it isn't a bug since I can replicate the correct schedule...
>>
>>Chiara
>>
>>Ps may I ask what release are you using?
>>
>> >-----Original Message-----
>> >From: Toyin Akin [mailto:[hidden email]]
>> >Sent: Friday, July 20, 2007 1:53 PM
>> >To: FORNAROLA CHIARA; [hidden email]
>> >Cc: [hidden email]; [hidden email]
>> >Subject: RE: [Quantlib-users] Coupons and Fixed Rate Legs
>> >
>> >
>> >Hi,
>> >
>> >So if this version works with the "1D" tenor, then there must be a
bug

>>in
>> >converting from a frequency type to a period object.
>> >
>> >I understand though, that you guys are advocating the use of Period
>>objects
>> >as the way to go thus one should not go through a Frequency type.
>> >
>> >Can someone let us know if the "1D" period type actually works?
>> >
>> >Toy out.
>> >
>> >>From: "FORNAROLA CHIARA" <[hidden email]>
>> >>To: "Stefan Johansson" <[hidden email]>
>> >>CC: "Toyin Akin" <[hidden email]>,
>> >><[hidden email]>,<[hidden email]>
>> >>Subject: RE: [Quantlib-users] Coupons and Fixed Rate Legs
>> >>Date: Fri, 20 Jul 2007 11:47:55 +0200
>> >>
>> >>Thanks Stefan for the example!
>> >>Anyway the schedule object in quantlib can be created also with
>> >>period=1d.
>> >>Chiara
>> >>
>> >> >-----Original Message-----
>> >> >From: Stefan Johansson [mailto:[hidden email]]
>> >> >Sent: Friday, July 20, 2007 11:43 AM
>> >> >To: FORNAROLA CHIARA
>> >> >Cc: Toyin Akin; [hidden email];
>> >>[hidden email]
>> >> >Subject: Re: [Quantlib-users] Coupons and Fixed Rate Legs
>> >> >
>> >> >Hi,
>> >> >
>> >> >Synthetic discount bonds with daily coupons may very well be
>>components
>> >> >in "structured products", so support for it may be useful and may
>> >> >broaden the field of applications for quantlib, if not yet
included.

>> >> >
>> >> >BR,
>> >> >Stefan
>> >> >
>> >> >FORNAROLA CHIARA wrote:
>> >> >
>> >> >>Hi Toyin
>> >> >>
>> >> >>I was answering to John's question....I didn't meant to say
>>anything
>> >> >>about your email..
>> >> >>Anyway John in his email mentioned:
>> >> >>" a 4.75 fixed rate bond that goes from
>> >> >>
>> >> >>
>> >> >>>>today
>> >> >>>>
>> >> >>>>
>> >> >>>>>(July 19, 2007) to February 1, 2008."
>> >> >>>>>
>> >> >>>>>
>> >> >>(I'm just quoting his email)
>> >> >>The schedule behaves as I described replying to John's email
also
>>for
>> >> >>fixed rate, floating rate, cms rate leg not just for bonds.
>> >> >>FirstDate and Next to last date are optional parameters, you
need
>>them
>> >> >>only if the deal you have as an odd coupon.
>> >> >>Now I'm sorry I can't think of a deal which has daily payments
(I
>>will
>> >> >>appreciate an input from you since I believe you see different
>> >>markets).
>> >> >>I always dealt with Euro denominated bonds and Swaps so usually
the

>> >> >>period is 3m, 6m and 1y.
>> >> >>
>> >> >>Chiara
>> >> >>
>> >> >>
>> >> >>
>> >> >>
>> >> >>>-----Original Message-----
>> >> >>>From: Toyin Akin [mailto:[hidden email]]
>> >> >>>Sent: Friday, July 20, 2007 10:52 AM
>> >> >>>To: FORNAROLA CHIARA; [hidden email]; quantlib-
>> >> >>>[hidden email]
>> >> >>>Subject: Re: [Quantlib-users] Coupons and Fixed Rate Legs
>> >> >>>
>> >> >>>
>> >> >>>Hi,
>> >> >>>
>> >> >>>I'm a bit confused.
>> >> >>>
>> >> >>>This does not answer the question of why a daily frequency
builds
>>an
>> >> >>>
>> >> >>>
>> >> >>output
>> >> >>
>> >> >>
>> >> >>>of non-daily periods.
>> >> >>>
>> >> >>>Are you saying the schedule constructor used before is
incorrect

>>for
>> >> >>>
>> >> >>>
>> >> >>daily
>> >> >>
>> >> >>
>> >> >>>frequencies and that the one you propose with the additional
>> >>parameters
>> >> >>>does?
>> >> >>>
>> >> >>>Also, John is construting a fixed leg leg object and not a Bond
>> >>object.
>> >> >>>With
>> >> >>>fixed leg objects, you should be able to construct legs without
>>the
>> >> >>>additional stub dates. These should be considered optional.
>> >> >>>
>> >> >>>Best Regards,
>> >> >>>Toyin Akin.
>> >> >>>
>> >> >>>
>> >> >>>
>> >> >>>>From: "FORNAROLA CHIARA" <[hidden email]>
>> >> >>>>To: "John Maiden"
>> >> >>>><[hidden email]>,<[hidden email]>
>> >> >>>>Subject: Re: [Quantlib-users] Coupons and Fixed Rate Legs
>> >> >>>>Date: Fri, 20 Jul 2007 10:06:13 +0200
>> >> >>>>
>> >> >>>>Hi John,
>> >> >>>>
>> >> >>>>In order to correctly reproduce the schedule of: fixed rate
bond,

>> >> >>>>floating rate bond, and cms rate bond, you have pass the
>>following
>> >> >>>>parameters to the schedule:
>> >> >>>>
>> >> >>>>datedDate_ i.e. the first interest accrual date of the bond;
>> >> >>>>
>> >> >>>>maturityDate_, i.e. the maturity date of the bond;
>> >> >>>>
>> >> >>>>Period(frequency_), i.e. 3m, 6m, 1y depending on the payment
>> >>frequency
>> >> >>>>of the bonds (quarterly, semiannual, annual);
>> >> >>>>
>> >> >>>>calendar_, i.e. the calendar quoted in the prospectus of the
>>bond;
>> >> >>>>
>> >> >>>>accrualConvention, i.e. the adjustment applied to accrual
start

>>and
>> >> >>>>
>> >> >>>>
>> >> >>end
>> >> >>
>> >> >>
>> >> >>>>dates of the bond (usually for Euro denominated bonds is
>> >> >>>>
>> >> >>>>
>> >> >>"unadjusted");
>> >> >>
>> >> >>
>> >> >>>>accrualConventionTermination, i.e. the adjustment applied to
the
>> >> >>>>maturity date (usually "unadjusted" if not differently
specified

>>in
>> >> >>>>
>> >> >>>>
>> >> >>the
>> >> >>
>> >> >>
>> >> >>>>prospectus);
>> >> >>>>
>> >> >>>>fromEnd, i.e. TRUE if you want to build the schedule backward,
>>FALSE
>> >> >>>>
>> >> >>>>
>> >> >>if
>> >> >>
>> >> >>
>> >> >>>>you want to start building the schedule rolling from the first
>> >>payment
>> >> >>>>date (uasually the schedule is generated BACKWARD unless you
have
>> >>odd
>> >> >>>>last or first coupon).
>> >> >>>>EOM, i.e. TRUE if you have a payment date which falls for
example
>>on
>> >> >>>>
>> >> >>>>
>> >> >>the
>> >> >>
>> >> >>
>> >> >>>>28th of February and, lets say pays semiannually, you want
that

>>the
>> >> >>>>
>> >> >>>>
>> >> >>next
>> >> >>
>> >> >>
>> >> >>>>nominal date is 31st August (i.e. the last day of the month)
>>rather
>> >> >>>>
>> >> >>>>
>> >> >>than
>> >> >>
>> >> >>
>> >> >>>>the 28th of August. Usually this parameter is equal to FALSE
>>unless
>> >> >>>>differently specified in the bond's prospectus;
>> >> >>>>
>> >> >>>>firstDate, i.e. the nominal date in which the first coupon
date
>>is
>> >> >>>>scheduled (unless you have odd cpn you don't need to pass this
>> >> >>>>parameter, but if you input this information you have to input
a
>> >>date
>> >> >>>>without business adjustment);
>> >> >>>>
>> >> >>>>nextToLastDate, i.e. the nominal date in which the next to
last
>> >>coupon
>> >> >>>>date is schedule (unless you have odd cpn you don't need to
pass
>> >>this
>> >> >>>>parameter but if you input this information you have to input
a

>>date
>> >> >>>>without business adjustment).
>> >> >>>>
>> >> >>>>So your correct schedule will be:
>> >> >>>>
>> >> >>>>  Schedule schedule(datedDate_, maturityDate_,
>>Period(frequency_),
>> >> >>>>                          calendar_, accrualConvention,
>> >> >>>>accrualConvention,
>> >> >>>>                          fromEnd, EOM, firstDate,
>>nextToLastDate);
>> >> >>>>
>> >> >>>>In the example you mentioned, since the first accrual date of
>>your
>> >> >>>>
>> >> >>>>
>> >> >>bond
>> >> >>
>> >> >>
>> >> >>>>is 19 july 2007 and the maturity date is February 1, 2008 or
>> >>February
>> >> >>>>
>> >> >>>>
>> >> >>1,
>> >> >>
>> >> >>
>> >> >>>>2009 (I don't know which is the actual date), there should be
an
>>odd
>> >> >>>>coupon (you should read all the prospectus to see if it occurs
at
>> >>the
>> >> >>>>beginning or at the end), so you have to use the proper
schedule

>> >> >>>>generation (backward or forward) and input the correct next to
>>last
>> >> >>>>
>> >> >>>>
>> >> >>date
>> >> >>
>> >> >>
>> >> >>>>and/or first date.
>> >> >>>>Regarding zero coupon bond, you don't need to generate the
>>schedule,
>> >> >>>>
>> >> >>>>
>> >> >>you
>> >> >>
>> >> >>
>> >> >>>>can just use zerocouponbond class.
>> >> >>>>
>> >> >>>>Hope this will help.
>> >> >>>>
>> >> >>>>Chiara
>> >> >>>>
>> >> >>>>
>> >> >>>>
>> >> >>>>
>> >> >>>>
>> >> >>>>>-----Original Message-----
>> >> >>>>>From: [hidden email]
>> >> >>>>>
>> >> >>>>>
>> >> >>>>[mailto:quantlib-users-
>> >> >>>>
>> >> >>>>
>> >> >>>>>[hidden email]] On Behalf Of John Maiden
>> >> >>>>>Sent: Thursday, July 19, 2007 9:37 PM
>> >> >>>>>To: [hidden email]
>> >> >>>>>Subject: [Quantlib-users] Coupons and Fixed Rate Legs
>> >> >>>>>
>> >> >>>>>How exactly does the fixed rate leg work? I'm asking because
I'd

>> >> >>>>>
>> >> >>>>>
>> >> >>like
>> >> >>
>> >> >>
>> >> >>>>to
>> >> >>>>
>> >> >>>>
>> >> >>>>>know
>> >> >>>>>how it determines a coupon date (and set up my own coupon
>>dates).
>> >> >>>>>
>> >> >>>>>
>> >> >>For
>> >> >>
>> >> >>
>> >> >>>>>example, I
>> >> >>>>>get a weird coupon schedule for a 4.75 fixed rate bond that
goes

>> >> >>>>>
>> >> >>>>>
>> >> >>from
>> >> >>
>> >> >>
>> >> >>>>today
>> >> >>>>
>> >> >>>>
>> >> >>>>>(July 19, 2007) to February 1, 2008. Weird as in I don't
>>understand
>> >> >>>>>
>> >> >>>>>
>> >> >>the
>> >> >>
>> >> >>
>> >> >>>>>logic of
>> >> >>>>>how it was set up. Assuming that a zero coupon amount means a
>> >>coupon
>> >> >>>>>payment,
>> >> >>>>>the code below gives me the following coupon dates:
>> >> >>>>>
>> >> >>>>>Aug 1, 2007
>> >> >>>>>Sept 1, 2007
>> >> >>>>>Nov 1, 2007
>> >> >>>>>Jan 1, 2008
>> >> >>>>>Feb 1, 2008
>> >> >>>>>Apr 1, 2008
>> >> >>>>>Jun 1, 2008
>> >> >>>>>Aug 1, 2008
>> >> >>>>>Sept 1, 2008
>> >> >>>>>Nov 1, 2008
>> >> >>>>>Jan 1, 2009
>> >> >>>>>Feb 1, 2009
>> >> >>>>>
>> >> >>>>>Here's the code:
>> >> >>>>>
>> >> >>>>>// TestQuantLib.cpp : Defines the entry point for the console
>> >> >>>>>
>> >> >>>>>
>> >> >>>>application.
>> >> >>>>
>> >> >>>>
>> >> >>>>>//
>> >> >>>>>#include "stdafx.h"
>> >> >>>>>#include <ql/quantlib.hpp>
>> >> >>>>>#include <boost/timer.hpp>
>> >> >>>>>
>> >> >>>>>using namespace std;
>> >> >>>>>using namespace QuantLib;
>> >> >>>>>
>> >> >>>>>int _tmain(int argc, _TCHAR* argv[])
>> >> >>>>>{
>> >> >>>>> try{
>> >> >>>>>
>> >> >>>>> std::vector<Real> coupons(1, 0.0475);
>> >> >>>>> std::vector<Real> faceAmount_(1, 100);
>> >> >>>>>
>> >> >>>>> Calendar calendar =
>> >> >>>>>
>> >> >>>>>
>> >> >>>>UnitedStates(UnitedStates::Market::NYSE);
>> >> >>>>
>> >> >>>>
>> >> >>>>> Date today =
>>calendar.adjust(Date::todaysDate());
>> >> >>>>>
>> >> >>>>> BusinessDayConvention convention = Unadjusted;
>> >> >>>>>
>> >> >>>>> Frequency frequency = Daily;
>> >> >>>>>
>> >> >>>>> Date exerciseDate = Date(2, February, 2009);
>> >> >>>>>
>> >> >>>>> Schedule schedule_(today, exerciseDate,
>> >> >>>>>
>> >> >>>>>
>> >> >>>>Period(frequency),
>> >> >>>>
>> >> >>>>
>> >> >>>>>calendar,
>> >> >>>>>convention, convention,
>> >> >>>>> true, false);
>> >> >>>>>
>> >> >>>>> DayCounter dayCount = Thirty360();
>> >> >>>>>
>> >> >>>>> Leg cashFlows_ = FixedRateLeg(faceAmount_,
>>schedule_,
>> >> >>>>>
>> >> >>>>>
>> >> >>>>coupons,
>> >> >>>>
>> >> >>>>
>> >> >>>>>dayCount,
>> >> >>>>> schedule_.businessDayConvention());
>> >> >>>>>
>> >> >>>>> for(int i = 0; i < cashFlows_.size(); i++){
>> >> >>>>> cout << cashFlows_[i]->amount() << endl;
>> >> >>>>> if(i % 10 == 0)
>> >> >>>>> system("PAUSE");
>> >> >>>>> }
>> >> >>>>>
>> >> >>>>> } catch (std::exception& e) {
>> >> >>>>> cout << e.what() << endl;
>> >> >>>>> }
>> >> >>>>>
>> >> >>>>> system("PAUSE");
>> >> >>>>> return 0;
>> >> >>>>>}
>> >> >>>>>
>> >> >>>>>Thanks in advance for any help.
>> >> >>>>>
>> >> >>>>>
>> >> >>>>>
>> >> >>>>>
>> >> >>>>>
>> >>
>>
>>>---------------------------------------------------------------------
>> >>--
>> >> >>>
>> >> >>>
>> >> >>>>--
>> >> >>>>
>> >> >>>>
>> >> >>>>>This SF.net email is sponsored by: Microsoft
>> >> >>>>>Defy all challenges. Microsoft(R) Visual Studio 2005.
>> >> >>>>>http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/
>> >> >>>>>_______________________________________________
>> >> >>>>>QuantLib-users mailing list
>> >> >>>>>[hidden email]
>> >> >>>>>https://lists.sourceforge.net/lists/listinfo/quantlib-users
>> >> >>>>>
>> >> >>>>>
>> >>
>>
>>>>--------------------------------------------------------------------
>> >>--
>> >> >>>>
>> >> >>>>
>> >> >>---
>> >> >>
>> >> >>
>> >> >>>>This SF.net email is sponsored by: Microsoft
>> >> >>>>Defy all challenges. Microsoft(R) Visual Studio 2005.
>> >> >>>>http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/
>> >> >>>>_______________________________________________
>> >> >>>>QuantLib-users mailing list
>> >> >>>>[hidden email]
>> >> >>>>https://lists.sourceforge.net/lists/listinfo/quantlib-users
>> >> >>>>
>> >> >>>>
>> >>
>>>_________________________________________________________________
>> >> >>>Tell MSN about your most memorable emails!
>> >> >>>
>> >> >>>
>> >> >>http://www.emailbritain.co.uk/
>> >> >>
>> >> >>
>> >>
>>
>>----------------------------------------------------------------------
>> >>---
>> >> >>This SF.net email is sponsored by: Microsoft
>> >> >>Defy all challenges. Microsoft(R) Visual Studio 2005.
>> >> >>http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/
>> >> >>_______________________________________________
>> >> >>QuantLib-users mailing list
>> >> >>[hidden email]
>> >> >>https://lists.sourceforge.net/lists/listinfo/quantlib-users
>> >> >>
>> >> >>
>> >> >>
>> >> >>
>> >> >
>> >>
>> >
>> >_________________________________________________________________
>> >Watch all 9 Live Earth concerts live on MSN.
>>http://liveearth.uk.msn.com
>>
>
>_________________________________________________________________
>The next generation of Hotmail is here!  http://www.newhotmail.co.uk


-------------------------------------------------------------------------
This SF.net email is sponsored by: Microsoft
Defy all challenges. Microsoft(R) Visual Studio 2005.
http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/
_______________________________________________
QuantLib-users mailing list
[hidden email]
https://lists.sourceforge.net/lists/listinfo/quantlib-users