Calendars and Day Counters in the Finance Package
Overview
Day Count Conventions
Working with Calendars
Standard Calendars
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.
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.
DayCount⁡Jan-01-2006,July-01-2006,ISDA
181
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
YearFraction⁡Jan-01-2006,July-01-2006,ISDA
0.4958904110
The denominator for ISDA is 365 since the year of 2006 is not leap year:
DayCount⁡Jan-01-2006,July-01-2006,ISDA365
181365
evalf
DayCount⁡Jan-01-2008,April-20-2008,ISDA
110
YearFraction⁡Jan-01-2008,April-20-2008,ISDA
0.3005464481
DayCount⁡Jan-01-2008,April-20-2008,ISDA366
55183
DayCount⁡April-20-2008,Jan-01-2009, ISDA
256
YearFraction⁡April-20-2008,Jan-01-2009, ISDA
0.6994535519
DayCount⁡April-20-2008,Jan-01-2009, ISDA366
128183
In the second example we will use the ISMA convention.
DayCount⁡Jan-01-2006,July-01-2006,ISMA
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.
YearFraction⁡Jan-01-2006,July-01-2006,ISMA
0.5000000000
The denominator is the actual number of days in the coupon period multiplied by the number of coupon periods in the year.
DayCount⁡Jan-01-2008,April-20-2008,ISMA
YearFraction⁡Jan-01-2008,April-20-2008,ISMA
0.3333333333
DayCount⁡Jan-01-2008,April-01-2008,ISMA
91
YearFraction⁡Jan-01-2008,April-01-2008,ISMA
0.2500000000
Finally, consider the AFB day counting convention.
DayCount⁡Jan-01-2006,July-01-2006,AFB
YearFraction⁡Jan-01-2006,July-01-2006,AFB
The denominator is either 365 if the calculation period does not contain February 29th, or 366 if the calculation period includes February 29th.
DayCount⁡Jan-01-2006,July-01-2006,AFB365
DayCount⁡Jan-01-2008,April-20-2008,AFB
YearFraction⁡Jan-01-2008,April-20-2008,AFB
DayCount⁡Jan-01-2008,April-20-2008,AFB366
DayCount⁡April-20-2008,Jan-01-2009, AFB
YearFraction⁡April-20-2008,Jan-01-2009, AFB
0.7013698630
DayCount⁡April-20-2008,Jan-01-2009, AFB366
DayCount⁡April-20-2008,Jan-01-2009, AFB365
256365
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).
DayCount⁡Jan-01-2006,Jan-03-2007,Actual360
367
YearFraction⁡Jan-01-2006,Nov-01-2006, Actual360
0.8444444444
The denominator is always 360.
DayCount⁡Jan-01-2006,Jan-03-2007,Actual360360
367360
evalf⁡
1.019444444
DayCount⁡Jan-01-2006,Jan-01-2007,Actual360
365
YearFraction⁡Jan-01-2006,Jan-01-2007,Actual360
1.013888889
DayCount⁡Jan-01-2006,Jan-01-2007,Actual360360
7372
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).
DayCount⁡Jan-01-2008,Jan-01-2009,Actual365Fixed
366
YearFraction⁡Jan-01-2008,Jan-01-2009,Actual365Fixed
1.002739726
DayCount⁡Jan-01-2008,Jan-01-2009,Actual365Fixed365
366365
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:
DayCount⁡Jan-01-2006,Nov-01-2006,Thirty360USA
300
The numerator is 10 time of 30.
If the end day is October 31st, 2006, it returns the same results:
DayCount⁡Jan-01-2006,Oct-31-2006,Thirty360USA
DayCount⁡Jan-01-2006,Oct-30-2006,Thirty360USA
299
DayCount⁡Jan-01-2006,Oct-2-2006,Thirty360USA
271
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.
DayCount⁡Jan-01-2006,Nov-01-2006,Thirty360European
DayCount⁡Jan-01-2006,Oct-31-2006,Thirty360European
DayCount⁡Jan-01-2006,Oct-30-2006,Thirty360European
We also assume that February has 30 days too:
DayCount⁡Jan-01-2006,Feb-28-2006,Thirty360European
57
DayCount⁡Jan-01-2006,March-1-2006,Thirty360European
60
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.
DayCount⁡Jan-01-2006,Feb-27-2006,Thirty360Italian
56
DayCount⁡Jan-01-2006,Feb-28-2006,Thirty360Italian
59
DayCount⁡Jan-01-2006,March-1-2006,Thirty360Italian
Other Day Count Conventions
The Simple day counting convention tries to ensure that the whole month distances are returned as a simple fraction.
DayCount⁡Jan-01-2008,Nov-21-2008,Simple
320
The above result is: 30*10 + 20 which simply takes 30 days per month for the 10 months plus 20 days in November.
YearFraction⁡Jan-01-2008,Nov-21-2008, Simple
0.8888888889
The denominator is always taken 360 days per year.
DayCount⁡Jan-01-2008,Nov-21-2008,Simple360
89
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.
IsHoliday⁡Sep-03-2007,NewYork;
true
We can adjust this date using one of several supported business day conventions.
FinanceAdjustDate⁡Sep-03-2007,NewYork,convention=Following;
Sep-04-2007
FinanceAdjustDate⁡Sep-03-2007,NewYork,convention=Preceding;
Aug-31-2007
FinanceAdjustDate⁡Sep-03-2007,NewYork,convention=Unadjusted;
Sep-03-2007
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
In the next example we will create new calendar data structure and add holidays to this calendar.
C1:=Calendar⁡:
IsHoliday⁡Aug-18-2006,C1;
false
AddHoliday⁡C1, Aug−18−2006;
AddHoliday⁡C1, Aug−19−2006;
How August 18, 2006 is a holiday in the new calendar.
C2:=Calendar⁡Toronto:
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:=JoinHolidays⁡C1,C2:
C4:=JoinBusinessDays⁡C1,C2:
map⁡t→IsHoliday⁡Aug-18-2006,t,C1,C2,C3,C4;
true,false,true,false
map⁡t→IsHoliday⁡Aug-19-2006,t,C1,C2,C3,C4;
true,true,true,true
Bratislava Stock Exchange
Holidays
Saturdays
Sundays
New Year's Day, January 1st
Epiphany, January 6th
Good Friday
Easter Monday
May Day, May 1st
Liberation of the Republic, May 8th
SS. Cyril and Methodius, July 5th
Slovak National Uprising, August 29th
Constitution of the Slovak Republic, September 1st
Our Lady of the Seven Sorrows, September 15th
All Saints Day, November 1st
Freedom and Democracy of the Slovak Republic, November 17th
Christmas Eve, December 24th
Christmas, December 25th
St. Stephen, December 26th
References
http://www.bsse.sk
Budapest Stock Exchange
http://www.bse.hu
Copenhagen Stock Exchange
Maunday Thursday
General Prayer Day, 25 days after Easter Monday
Ascension
Whit (Pentecost) Monday
Constitution Day, June 5th
Boxing Day, December 26th
http://www.sce.dk
Frankfurt Stock Exchange
Labour Day, May 1st
Christmas' Eve, December 24th
Christmas Holiday, December 26th
New Year's Eve, December 31st
http://www.deutsche-boerse.com
Helsinki Stock Exchange
Ascension Thursday
Midsummer Eve (Friday between June 18-24)
Independence Day, December 6th
http://www.hex.com
Johannesburg Securities Exchange
New Year's Day, January 1st (possibly moved to Monday)
Family Day, Easter Monday
Human Rights Day, March 21st (possibly moved to Monday)
Freedom Day, April 27th (possibly moved to Monday)
Workers Day, May 1st (possibly moved to Monday)
Youth Day, June 16th (possibly moved to Monday)
National Women's Day, August 9th (possibly moved to Monday)
Heritage Day, September 24th (possibly moved to Monday)
Day of Reconciliation, December 16th (possibly moved to Monday)
Christmas December 25th
Day of Goodwill December 26th (possibly moved to Monday)
http://www.jse.co.za
Milan Stock Exchange
Assumption, August 15th
http://www.borsaitalia.it
London Stock Exchange
Early May Bank Holiday, first Monday of May
Spring Bank Holiday, last Monday of May
Summer Bank Holiday, last Monday of August
Christmas Day, December 25th (possibly moved to Monday or Tuesday)
Boxing Day, December 26th (possibly moved to Monday or Tuesday)
http://www.londonstockexchange.com/en-gb/about/cooverview/businessdays/
New York Stock Exchange
New Year's Day, January 1st (possibly moved to Monday if falls on Sunday)
Martin Luther King's birthday, third Monday in January (since 1998)
Presidents' Day (a.k.a. Washington's birthday), third Monday in February
Memorial Day, last Monday in May
Independence Day, July 4th (moved to Monday if falls on Sunday or Friday if falls on Saturday)
Labor Day, first Monday in September
Thanksgiving Day, fourth Thursday in November
Presidential election day, first Tuesday in November of election years (until 1980)
Christmas, December 25th (moved to Monday if falls on Sunday or Friday if falls on Saturday)
Special historic closings
http://www.nyse.com
http://www.nyse.com/about/newsevents/1176373643795.html
Oslo Stock Exchange
Holy Thursday
Whit(Pentecost) Monday
National Independence Day, May 17st
http://www.oslobors.no
Prague Stock Exchange
Liberation Day, May 8th
Jan Hus Day, July 6th
Czech Statehood Day, September 28th
Independence Day, October 28th
Struggle for Freedom and Democracy Day, November 17th
http://www.pse.cz
Stockholm Stock Exchange
National Day, June 6th
Christmas Day, December 25th
New Year's Eve, December 31th
http://www.stockholmsborsen.se
Sydney Stock Exchange
Australia Day, January 26th (possibly moved to Monday)
ANZAC Day. April 25th (possibly moved to Monday)
Queen's Birthday, second Monday in June
Bank Holiday, first Monday in August
Labour Day, first Monday in October
Christmas, December 25th (possibly moved to Monday or Tuesday)
http://www.asx.com.au/
Tokyo Stock Exchange
Bank Holiday, January 2nd
Bank Holiday, January 3rd
Coming of Age Day, 2nd Monday in January
National Foundation Day, February 11th
Vernal Equinox
Greenery Day, April 29th
Constitution Memorial Day, May 3rd
Holiday for a Nation, May 4th
Children's Day, May 5th
Marine Day, 3rd Monday in July
Respect for the Aged Day, 3rd Monday in September
Autumnal Equinox
Health and Sports Day, 2nd Monday in October
National Culture Day, November 3rd
Labor Thanksgiving Day, November 23rd
Emperor's Birthday, December 23rd
Bank Holiday, December 31st
http://www.tse.or.jp
Toronto Stock Exchange
Victoria Day, The Monday on or preceding 24 May
Canada Day, July 1st (possibly moved to Monday)
Provincial Holiday, first Monday of August
Labour Day, first Monday of September
Thanksgiving Day, second Monday of October
Remembrance Day, November 11th
http://www.tsx.com
Warsaw Stock Exchange
Corpus Christi
Constitution Day, May 3rd
Assumption of the Blessed Virgin Mary, August 15th
Independence Day, November 11th
2nd Day of Christmas, December 26th
http://www.gpw.com.pl
Wellington Stock Exchange
New Year's Day, January 1st (possibly moved to Monday or Tuesday)
Day after New Year's Day, January 2st (possibly moved to Monday or Tuesday)
Anniversary Day, Monday nearest January 22nd
Waitangi Day. February 6th
ANZAC Day. April 25th
Queen's Birthday, first Monday in June
Labour Day, fourth Monday in October
http://www.nzx.com
United Kingdom General
Sundays.
New Year's Day, January 1st (possibly moved to Monday).
Good Friday.
Easter Monday.
Early May Bank Holiday, first Monday of May.
Spring Bank Holiday, last Monday of May.
Summer Bank Holiday, last Monday of August.
Christmas Day, December 25th (possibly moved to Monday or Tuesday).
Boxing Day, December 26th (possibly moved to Monday or Tuesday).
http://www.dti.gov.uk/er/bankhol.htm
United States Bond Market
New Year's Day, January 1st (possibly moved to Monday if falls on Sunday).
Martin Luther King's birthday, third Monday in January.
Presidents' Day (a.k.a. Washington's birthday), third Monday in February.
Memorial Day, last Monday in May.
Independence Day, July 4th (moved to Monday if falls on Sunday or Friday if falls on Saturday).
Labor Day, first Monday in September.
Columbus Day, second Monday in October.
Veterans' Day, November 11th (moved to Monday if falls on Sunday or Friday if falls on Saturday).
Thanksgiving Day, fourth Thursday in November.
Christmas, December 25th (moved to Monday if falls on Sunday or Friday if falls on Saturday).
http://www.sifma.org/Services/Holiday-Schedule/
United States General
New Year's Day, January 1st (possibly moved to Monday if falls on Sunday, or to Friday if falls on Saturday)
Martin Luther King's birthday, third Monday in January
Independence Day, July 4th (moved to Monday if falls on Sunday or to Friday if falls on Saturday)
Columbus Day, second Monday in October
Veterans' Day, November 11th (moved to Monday if falls on Sunday or to Friday if falls on Saturday)
Christmas, December 25th (moved to Monday if falls on Sunday or to Friday if falls on Saturday)
http://www.opm.gov/fedhol
Zurich Stock Exchange
Berchtoldstag, January 2nd
Ascension Day
Whit Monday
National Day, August 1st
St. Stephen's Day, December 26th
http://www.swx.com
Download Help Document