Skip to content

Commit d1f4271

Browse files
authored
Merge pull request quantopian#121 from philiptromans/xcbf-good-friday-always-a-holiday
Made Good Friday always a holiday in XCBF
2 parents 6f7e482 + b163c64 commit d1f4271

File tree

3 files changed

+2
-48
lines changed

3 files changed

+2
-48
lines changed

exchange_calendars/exchange_calendar_xcbf.py

Lines changed: 1 addition & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,8 @@
11
from datetime import time
22
from itertools import chain
33

4-
import pandas as pd
54
from pandas.tseries.holiday import (
65
GoodFriday,
7-
Holiday,
86
USLaborDay,
97
USPresidentsDay,
108
USThanksgivingDay,
@@ -25,33 +23,6 @@
2523
)
2624

2725

28-
def good_friday_unless_christmas_nye_friday(dt):
29-
"""
30-
Good Friday is a valid trading day if Christmas Day or New Years Day fall
31-
on a Friday.
32-
"""
33-
year_str = str(dt.year)
34-
christmas_weekday = Christmas.observance(
35-
pd.Timestamp(year_str + "-12-25")
36-
).weekday()
37-
nyd_weekday = USNewYearsDay.observance(pd.Timestamp(year_str + "-01-01")).weekday()
38-
if christmas_weekday != 4 and nyd_weekday != 4:
39-
return GoodFriday._apply_rule(
40-
pd.Timestamp(str(dt.year) + "-" + str(dt.month) + "-" + str(dt.day))
41-
)
42-
else:
43-
# compatibility for pandas 0.18.1
44-
return pd.NaT
45-
46-
47-
GoodFridayUnlessChristmasNYEFriday = Holiday(
48-
name="Good Friday XCBF",
49-
month=1,
50-
day=1,
51-
observance=good_friday_unless_christmas_nye_friday,
52-
)
53-
54-
5526
class XCBFExchangeCalendar(ExchangeCalendar):
5627
"""
5728
Exchange calendar for the CBOE Futures Exchange (XCBF).
@@ -79,7 +50,7 @@ def regular_holidays(self):
7950
USNewYearsDay,
8051
USMartinLutherKingJrAfter1998,
8152
USPresidentsDay,
82-
GoodFridayUnlessChristmasNYEFriday,
53+
GoodFriday,
8354
USIndependenceDay,
8455
USMemorialDay,
8556
USLaborDay,

tests/resources/xcbf.csv

Lines changed: 0 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -580,7 +580,6 @@
580580
1992-04-14T00:00:00Z,1992-04-14T13:30:00Z,1992-04-14T20:15:00Z,,
581581
1992-04-15T00:00:00Z,1992-04-15T13:30:00Z,1992-04-15T20:15:00Z,,
582582
1992-04-16T00:00:00Z,1992-04-16T13:30:00Z,1992-04-16T20:15:00Z,,
583-
1992-04-17T00:00:00Z,1992-04-17T13:30:00Z,1992-04-17T20:15:00Z,,
584583
1992-04-20T00:00:00Z,1992-04-20T13:30:00Z,1992-04-20T20:15:00Z,,
585584
1992-04-21T00:00:00Z,1992-04-21T13:30:00Z,1992-04-21T20:15:00Z,,
586585
1992-04-22T00:00:00Z,1992-04-22T13:30:00Z,1992-04-22T20:15:00Z,,
@@ -828,7 +827,6 @@
828827
1993-04-06T00:00:00Z,1993-04-06T13:30:00Z,1993-04-06T20:15:00Z,,
829828
1993-04-07T00:00:00Z,1993-04-07T13:30:00Z,1993-04-07T20:15:00Z,,
830829
1993-04-08T00:00:00Z,1993-04-08T13:30:00Z,1993-04-08T20:15:00Z,,
831-
1993-04-09T00:00:00Z,1993-04-09T13:30:00Z,1993-04-09T20:15:00Z,,
832830
1993-04-12T00:00:00Z,1993-04-12T13:30:00Z,1993-04-12T20:15:00Z,,
833831
1993-04-13T00:00:00Z,1993-04-13T13:30:00Z,1993-04-13T20:15:00Z,,
834832
1993-04-14T00:00:00Z,1993-04-14T13:30:00Z,1993-04-14T20:15:00Z,,
@@ -2093,7 +2091,6 @@
20932091
1998-04-07T00:00:00Z,1998-04-07T13:30:00Z,1998-04-07T20:15:00Z,,
20942092
1998-04-08T00:00:00Z,1998-04-08T13:30:00Z,1998-04-08T20:15:00Z,,
20952093
1998-04-09T00:00:00Z,1998-04-09T13:30:00Z,1998-04-09T20:15:00Z,,
2096-
1998-04-10T00:00:00Z,1998-04-10T13:30:00Z,1998-04-10T20:15:00Z,,
20972094
1998-04-13T00:00:00Z,1998-04-13T13:30:00Z,1998-04-13T20:15:00Z,,
20982095
1998-04-14T00:00:00Z,1998-04-14T13:30:00Z,1998-04-14T20:15:00Z,,
20992096
1998-04-15T00:00:00Z,1998-04-15T13:30:00Z,1998-04-15T20:15:00Z,,
@@ -2340,7 +2337,6 @@
23402337
1999-03-30T00:00:00Z,1999-03-30T14:30:00Z,1999-03-30T21:15:00Z,,
23412338
1999-03-31T00:00:00Z,1999-03-31T14:30:00Z,1999-03-31T21:15:00Z,,
23422339
1999-04-01T00:00:00Z,1999-04-01T14:30:00Z,1999-04-01T21:15:00Z,,
2343-
1999-04-02T00:00:00Z,1999-04-02T14:30:00Z,1999-04-02T21:15:00Z,,
23442340
1999-04-05T00:00:00Z,1999-04-05T13:30:00Z,1999-04-05T20:15:00Z,,
23452341
1999-04-06T00:00:00Z,1999-04-06T13:30:00Z,1999-04-06T20:15:00Z,,
23462342
1999-04-07T00:00:00Z,1999-04-07T13:30:00Z,1999-04-07T20:15:00Z,,
@@ -3607,7 +3603,6 @@
36073603
2004-04-06T00:00:00Z,2004-04-06T13:30:00Z,2004-04-06T20:15:00Z,,
36083604
2004-04-07T00:00:00Z,2004-04-07T13:30:00Z,2004-04-07T20:15:00Z,,
36093605
2004-04-08T00:00:00Z,2004-04-08T13:30:00Z,2004-04-08T20:15:00Z,,
3610-
2004-04-09T00:00:00Z,2004-04-09T13:30:00Z,2004-04-09T20:15:00Z,,
36113606
2004-04-12T00:00:00Z,2004-04-12T13:30:00Z,2004-04-12T20:15:00Z,,
36123607
2004-04-13T00:00:00Z,2004-04-13T13:30:00Z,2004-04-13T20:15:00Z,,
36133608
2004-04-14T00:00:00Z,2004-04-14T13:30:00Z,2004-04-14T20:15:00Z,,
@@ -4867,7 +4862,6 @@
48674862
2009-04-07T00:00:00Z,2009-04-07T13:30:00Z,2009-04-07T20:15:00Z,,
48684863
2009-04-08T00:00:00Z,2009-04-08T13:30:00Z,2009-04-08T20:15:00Z,,
48694864
2009-04-09T00:00:00Z,2009-04-09T13:30:00Z,2009-04-09T20:15:00Z,,
4870-
2009-04-10T00:00:00Z,2009-04-10T13:30:00Z,2009-04-10T20:15:00Z,,
48714865
2009-04-13T00:00:00Z,2009-04-13T13:30:00Z,2009-04-13T20:15:00Z,,
48724866
2009-04-14T00:00:00Z,2009-04-14T13:30:00Z,2009-04-14T20:15:00Z,,
48734867
2009-04-15T00:00:00Z,2009-04-15T13:30:00Z,2009-04-15T20:15:00Z,,
@@ -5114,7 +5108,6 @@
51145108
2010-03-30T00:00:00Z,2010-03-30T13:30:00Z,2010-03-30T20:15:00Z,,
51155109
2010-03-31T00:00:00Z,2010-03-31T13:30:00Z,2010-03-31T20:15:00Z,,
51165110
2010-04-01T00:00:00Z,2010-04-01T13:30:00Z,2010-04-01T20:15:00Z,,
5117-
2010-04-02T00:00:00Z,2010-04-02T13:30:00Z,2010-04-02T20:15:00Z,,
51185111
2010-04-05T00:00:00Z,2010-04-05T13:30:00Z,2010-04-05T20:15:00Z,,
51195112
2010-04-06T00:00:00Z,2010-04-06T13:30:00Z,2010-04-06T20:15:00Z,,
51205113
2010-04-07T00:00:00Z,2010-04-07T13:30:00Z,2010-04-07T20:15:00Z,,
@@ -6374,7 +6367,6 @@
63746367
2015-03-31T00:00:00Z,2015-03-31T13:30:00Z,2015-03-31T20:15:00Z,,
63756368
2015-04-01T00:00:00Z,2015-04-01T13:30:00Z,2015-04-01T20:15:00Z,,
63766369
2015-04-02T00:00:00Z,2015-04-02T13:30:00Z,2015-04-02T20:15:00Z,,
6377-
2015-04-03T00:00:00Z,2015-04-03T13:30:00Z,2015-04-03T20:15:00Z,,
63786370
2015-04-06T00:00:00Z,2015-04-06T13:30:00Z,2015-04-06T20:15:00Z,,
63796371
2015-04-07T00:00:00Z,2015-04-07T13:30:00Z,2015-04-07T20:15:00Z,,
63806372
2015-04-08T00:00:00Z,2015-04-08T13:30:00Z,2015-04-08T20:15:00Z,,
@@ -6621,7 +6613,6 @@
66216613
2016-03-22T00:00:00Z,2016-03-22T13:30:00Z,2016-03-22T20:15:00Z,,
66226614
2016-03-23T00:00:00Z,2016-03-23T13:30:00Z,2016-03-23T20:15:00Z,,
66236615
2016-03-24T00:00:00Z,2016-03-24T13:30:00Z,2016-03-24T20:15:00Z,,
6624-
2016-03-25T00:00:00Z,2016-03-25T13:30:00Z,2016-03-25T20:15:00Z,,
66256616
2016-03-28T00:00:00Z,2016-03-28T13:30:00Z,2016-03-28T20:15:00Z,,
66266617
2016-03-29T00:00:00Z,2016-03-29T13:30:00Z,2016-03-29T20:15:00Z,,
66276618
2016-03-30T00:00:00Z,2016-03-30T13:30:00Z,2016-03-30T20:15:00Z,,

tests/test_xcbf_calendar.py

Lines changed: 1 addition & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ def regular_holidays_sample(self):
2121
"2016-01-01", # new years: jan 1
2222
"2016-01-18", # mlk: jan 18
2323
"2016-02-15", # presidents: feb 15
24+
"2016-03-25", # good friday: mar 25
2425
"2016-05-30", # mem day: may 30
2526
"2016-07-04", # independence day: july 4
2627
"2016-09-05", # labor day: sep 5
@@ -39,15 +40,6 @@ def adhoc_holidays_sample(self):
3940
"2012-10-30", # - jan 2 2007
4041
]
4142

42-
@pytest.fixture
43-
def non_holidays_sample(self):
44-
yield [
45-
# Good Friday is not a holiday when Christas Day or New Year's Day falls
46-
# on a Friday.
47-
"2015-04-03",
48-
"2016-03-25",
49-
]
50-
5143
@pytest.fixture
5244
def early_closes_sample(self):
5345
yield ["2016-11-25"]

0 commit comments

Comments
 (0)