Re: Coupons and Fixed Rate Legs

Posted by Toyin Akin on
URL: http://quantlib.414.s1.nabble.com/Coupons-and-Fixed-Rate-Legs-tp1151p1159.html


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