Calendars and Day Counters in the Finance Package - Maple Help

Online Help

All Products    Maple    MapleSim


Home : Support : Online Help : Mathematics : Finance : Date Arithmetic : Finance/Examples/CalendarsAndDayCounters

Calendars and Day Counters in the Finance Package

Overview

The Financial Modeling package supports over 15 calendars which include New York, London, Tokyo and Toronto stock exchanges. In addition, the package provides tools for creating new calendars and manipulating already existing calendars. In addition to this, the Financial Modeling package supports most standard day count conventions used in the industry, which include Actual/Actual, Actual/360 and 30/360 conventions.

 

Day counting convention defines the way in which interest accrues over time. Generally, we know the interest earned over some reference period (e.g., the time between coupon payments, and we are interested in calculating the interest earned over some other period.

 

The day counting convention is usually expressed as X/Y, where X defines the way in which the number of days between the two dates is calculated, and Y defines the way in which the total number of days in the reference period is measured. The interest earned between the two dates is

 

Number_of_days_between_two_datesNumber_of_days_in_reference_period×Interest_earned_in_reference_period

                     

Three day counting conventions commonly used in the United States are Actual/Actual, Actual/360, and 30/360.

Day Count Conventions

Actual/Actual Conventions

The actual/actual interest accrual convention is the recommended for euro-denominated bonds, there are at least three different interpretations of actual/actual. These three interpretations are identified as:

 

Actual/Actual (ISDA)

Actual/Actual (ISMA)

Actual/Actual (AFB)

 

The difference between the ISDA, ISMA and AFB methods can be reduced to a consideration of the denominator to be used when calculating accrued interest. The numerator will, in all three cases, be equal to the actual number of days from and including the last coupon payment date ( or period end date) to, but excluding, the current value date (or period end date) therefore:

 

Under the Actual/Actual (ISDA) approach, the denominator varies depending on whether a portion of the relevant calculation period falls within a leap year. For the portion of the calculation period falling within a leap year, the denominator is 366, for the other portion the denominator is 365. The ISDA convention, also known as Actual/Actual (Historical), Actual/Actual, Act/Act, and according to ISDA also Actual/365, Act/365, and A/365.

 

Under the Actual/Actual (ISMA) approach, the denominator is the actual number of days in the coupon period multiplied by the number of coupon periods in the year. The ISMA and US Treasury convention, also known as Actual/Actual (Bond).

 

Under the Actual/Actual (AFB) approach, the denominator is either 365 if the calculation period does not contain February 29th, or 366 if the calculation period includes February 29th. The AFB convention, also known as actual/actual (Euro).

 

Let's consider some examples.

 

withFinance:

 

First we will use a day counter which follows the ISDA convention.

 

DayCountJan-01-2006,July-01-2006,ISDA

181

(2.1.1)

 

The numerator is equal to the actual number of days from and including the last coupon payment date ( or period end date) to, but excluding, the current value date (or period end date) therefore from January 1st, 2006 to July 1st, 2006 can be calculated by adding the number of days in January, February, March, April, May, and June together:

 

31+28+31+30+31+30

181

(2.1.2)

YearFractionJan-01-2006,July-01-2006,ISDA

0.4958904110

(2.1.3)

 

The denominator for ISDA is 365 since the year of 2006 is not leap year:

 

DayCountJan-01-2006,July-01-2006,ISDA365

181365

(2.1.4)

evalf

0.4958904110

(2.1.5)

DayCountJan-01-2008,April-20-2008,ISDA

110

(2.1.6)

YearFractionJan-01-2008,April-20-2008,ISDA

0.3005464481

(2.1.7)

DayCountJan-01-2008,April-20-2008,ISDA366

55183

(2.1.8)

evalf

0.3005464481

(2.1.9)

DayCountApril-20-2008,Jan-01-2009, ISDA

256

(2.1.10)

YearFractionApril-20-2008,Jan-01-2009, ISDA

0.6994535519

(2.1.11)

DayCountApril-20-2008,Jan-01-2009, ISDA366

128183

(2.1.12)

evalf

0.6994535519

(2.1.13)

 

 

In the second example we will use the ISMA convention.

 

DayCountJan-01-2006,July-01-2006,ISMA

181

(2.1.14)

 

As you can see the number of days between January 1st, 2006 and July 1st, 2006  is the same according to both conventions. The length of the period from January 1st, 2006 to July 1st, 2006 as a fraction of the year is different.

 

YearFractionJan-01-2006,July-01-2006,ISMA

0.5000000000

(2.1.15)

 

The denominator is the actual number of days in the coupon period multiplied by the number of coupon periods in the year.

 

DayCountJan-01-2008,April-20-2008,ISMA

110

(2.1.16)

YearFractionJan-01-2008,April-20-2008,ISMA

0.3333333333

(2.1.17)

DayCountJan-01-2008,April-01-2008,ISMA

91

(2.1.18)

YearFractionJan-01-2008,April-01-2008,ISMA

0.2500000000

(2.1.19)

 

Finally, consider the AFB day counting convention.

 

DayCountJan-01-2006,July-01-2006,AFB

181

(2.1.20)

YearFractionJan-01-2006,July-01-2006,AFB

0.4958904110

(2.1.21)

 

The denominator is either 365 if the calculation period does not contain February 29th, or 366 if the calculation period includes February 29th.

 

DayCountJan-01-2006,July-01-2006,AFB365

181365

(2.1.22)

evalf

0.4958904110

(2.1.23)

DayCountJan-01-2008,April-20-2008,AFB

110

(2.1.24)

YearFractionJan-01-2008,April-20-2008,AFB

0.3005464481

(2.1.25)

DayCountJan-01-2008,April-20-2008,AFB366

55183

(2.1.26)

evalf

0.3005464481

(2.1.27)

DayCountApril-20-2008,Jan-01-2009, AFB

256

(2.1.28)

YearFractionApril-20-2008,Jan-01-2009, AFB

0.7013698630

(2.1.29)

DayCountApril-20-2008,Jan-01-2009, AFB366

128183

(2.1.30)

evalf

0.6994535519

(2.1.31)

DayCountApril-20-2008,Jan-01-2009, AFB365

256365

(2.1.32)

evalf

0.7013698630

(2.1.33)

Actual/360 Conventions

 

Actual/360 is used for U.S. Treasury bills and other money market instruments. The numerator is equal to the actual number of days from and including the last coupon payment date ( or period end date) to, but excluding, the current value date (or period end date) ; while the denominator is always 360. Note that the interest earned in a whole year of 365 is 365/360 times the quoted rate. The actual/360 day count convention, also known as Act/360 or A/360.

 

 

The numerator is equal to the actual number of days from and including the last coupon payment date ( or period end date) to, but excluding, the current value date (or period end date).

 

DayCountJan-01-2006,Jan-03-2007,Actual360

367

(2.2.1)

YearFractionJan-01-2006,Nov-01-2006, Actual360

0.8444444444

(2.2.2)

 

The denominator is always 360.

 

DayCountJan-01-2006,Jan-03-2007,Actual360360

367360

(2.2.3)

evalf

1.019444444

(2.2.4)

DayCountJan-01-2006,Jan-01-2007,Actual360

365

(2.2.5)

YearFractionJan-01-2006,Jan-01-2007,Actual360

1.013888889

(2.2.6)

DayCountJan-01-2006,Jan-01-2007,Actual360360

7372

(2.2.7)

evalf

1.013888889

(2.2.8)

 

There is an another day count convention, Actual/365 (Fixed), which is very similar with Actual/360, except that the denominator is always 365.  Actual/365 (Fixed) day count convention, also know as Act/365 (Fixed), A/365 (Fixed), or A/365F. But Actual/365 (without Fixed) is an alias for Actual/Actual (ISDA).

 

DayCountJan-01-2008,Jan-01-2009,Actual365Fixed

366

(2.2.9)

YearFractionJan-01-2008,Jan-01-2009,Actual365Fixed

1.002739726

(2.2.10)

DayCountJan-01-2008,Jan-01-2009,Actual365Fixed365

366365

(2.2.11)

evalf

1.002739726

(2.2.12)

30/360 Conventions

 

The use of 30/360 for corporate and municipal bonds indicates that we assume 30 days per month and 360 days per year when we carry out calculations. This convention is very simple since it doesn't need to consider how many days each month has or whether the year is leap or not. There are three 30/360 day count conventions:

 

Thirty360USA

If the ending date is the 31th of a month and the starting date is earlier than the 30th of a month, the ending date becomes equal to the 1st of the next month day, otherwise the ending date becomes equal to the 30th of the same month.

Thirty360European

Starting dates or ending dates that occur on the 31st of a month become equal to the 30th of the same month.

Thirty360Italian

Starting or ending dates that occur in February and are greater than 27 become equal to 30 for computational sake.

 

Let's consider some examples:

 

DayCountJan-01-2006,Nov-01-2006,Thirty360USA

300

(2.3.1)

 

The numerator is 10 time of 30.

 

 

If the end day is October 31st, 2006, it returns the same results:

 

DayCountJan-01-2006,Oct-31-2006,Thirty360USA

300

(2.3.2)

DayCountJan-01-2006,Oct-30-2006,Thirty360USA

299

(2.3.3)

DayCountJan-01-2006,Oct-2-2006,Thirty360USA

271

(2.3.4)

 

From the above three interesting results, you can see that if the ending date is the 31th of a month and the starting date is earlier than the 30th of a month, the ending date becomes equal to the 1st of the next month day, otherwise the ending date becomes equal to the 30th of the same month.

 

For Thirty360European convention,  starting dates or ending dates that occur on the 31st of a month become equal to the 30th of the same month.

 

DayCountJan-01-2006,Nov-01-2006,Thirty360European

300

(2.3.5)

DayCountJan-01-2006,Oct-31-2006,Thirty360European

299

(2.3.6)

DayCountJan-01-2006,Oct-30-2006,Thirty360European

299

(2.3.7)

 

We also assume that February has 30 days too:

 

DayCountJan-01-2006,Feb-28-2006,Thirty360European

57

(2.3.8)

DayCountJan-01-2006,March-1-2006,Thirty360European

60

(2.3.9)

 

Finally, the Thirty360Italian day counting convention, assumes that starting or ending dates that occur in February and are greater than 27 become equal to 30.

 

DayCountJan-01-2006,Feb-27-2006,Thirty360Italian

56

(2.3.10)

DayCountJan-01-2006,Feb-28-2006,Thirty360Italian

59

(2.3.11)

DayCountJan-01-2006,March-1-2006,Thirty360Italian

60

(2.3.12)

Working with Calendars

 

 Here is the list of related commands.

 

AddHoliday

-

add a holiday to the given calendar

AdvanceDate

-

adjust a non-business day according to the given convention

AdjustDate

-

advance a non-business day according to the given convention

IsBusinessDay

-

check if a given date is a business day according to a given calendar

IsEndOfMonth

-

check if a given date corresponds to the end of a month according to a given calendar

JoinBusinessDays

-

create a new calendar obtained by joining business days of the given two calendars

JoinHolidays

-

create a new calendar obtained by joining holidays of the given two calendars

IsHoliday

-

check if a given date is a holiday according to a given calendar

 

Here are some examples.

 

restart;withFinance:

 

For example, to check whether the 3rd of September, 2007 is a holiday according to the New York Stock Exchange.

 

IsHolidaySep-03-2007,NewYork;

true

(3.1)

We can adjust this date using one of several supported business day conventions.

 

FinanceAdjustDateSep-03-2007,NewYork,convention=Following;

Sep-04-2007

(3.2)

FinanceAdjustDateSep-03-2007,NewYork,convention=Preceding;

Aug-31-2007

(3.3)

FinanceAdjustDateSep-03-2007,NewYork,convention=Unadjusted;

Sep-03-2007

(3.4)

We can use StringTools[ParseTime] to determine what day of the week 3rd of September, 2007 is.

 

StringTools:-ParseTime%b-%d-%Y,Sep-03-2007:-weekDay;

2

(3.5)

In the next example we will create new calendar data structure and add holidays to this calendar.

 

C1:=Calendar:

IsHolidayAug-18-2006,C1;

false

(3.6)

AddHolidayC1, Aug−18−2006;

AddHolidayC1, Aug−19−2006;

 

How August 18, 2006 is a holiday in the new calendar.

 

IsHolidayAug-18-2006,C1;

true

(3.7)

C2:=CalendarToronto:

 

Let us construct two calendars. One obtained by joining holidays and the other one obtained by joining business days from the two calendars above.

 

C3:=JoinHolidaysC1,C2:

C4:=JoinBusinessDaysC1,C2:

mapt→IsHolidayAug-18-2006,t,C1,C2,C3,C4;

true,false,true,false

(3.8)

mapt→IsHolidayAug-19-2006,t,C1,C2,C3,C4;

true,true,true,true

(3.9)

Standard Calendars