def create_ts_calendar(df, ts_settings, additional_events=None): """ df: pandas df ts_settings: dict Parameters for time series project additional_events: pandas df(optional) df of additional events to add to calendar Returns: -------- Calendar of events """ date_col = ts_settings['date_col'] cal = USFederalHolidayCalendar(AbstractHolidayCalendar) black_friday = Holiday( "Black Friday", month=11, day=1, offset=[pd.DateOffset(weekday=TH(4)), pd.DateOffset(1)]) cyber_monday = Holiday( "Cyber Monday", month=11, day=1, offset=[pd.DateOffset(weekday=TH(4)), pd.DateOffset(4)]) cal.rules.append(black_friday) cal.rules.append(cyber_monday) cal.rules[9] = Holiday('Christmas', month=12, day=25) cal.rules[4] = Holiday('July 4th', month=7, day=4) events = pd.DataFrame( cal.holidays( start=pd.to_datetime(df[date_col].min()), end=pd.to_datetime(df[date_col].max()) + dt.timedelta(days=365), return_name=True, )) events = events.reset_index() events.columns = ['Date', 'Event'] if additional_events is not None: assert additional_events.shape[ 1] == 2, 'additional events must be a df with 2 columns' additional_events.columns = ['Date', 'Event'] additional_events['Date'] = pd.to_datetime(additional_events['Date']) events = events.append(additional_events) events['Date'] = [ dt.datetime.strftime(pd.to_datetime(date), '%Y-%m-%d') for date in events['Date'] ] return events.drop_duplicates().sort_values(by='Date').reset_index( drop=True)
class US_Stocks_Trading_Calendar(AbstractHolidayCalendar): rules= [ Holiday("New Year's Day", month=1, day=1, observance=sunday_to_monday), Holiday("Martin Luther King, Jr. Day", month=1, day=1, offset=DateOffset(weekday=MO(3))), Holiday("Washington’s Birthday", month=2, day=1, offset=DateOffset(weekday=MO(3))), Holiday("Good Friday", month=1, day=1, offset=[Easter(),Day(-2)]), Holiday("Memorial Day", month=5, day=31, offset=DateOffset(weekday=MO(-1))), Holiday("Independence Day", month=7, day=4, observance=nearest_workday), Holiday("Labor Day", month=9, day=1, offset=DateOffset(weekday=MO(1))), Holiday("Thanksgiving Day", month=11, day=1, offset=DateOffset(weekday=TH(4))), Holiday("Christmas Day", month=12, day=25, observance=nearest_workday), Holiday("Day before Independence Day - Half day", month=7, day=3, observance=previous_friday), Holiday("Day following Thanksgiving - Half day", month=11, day=1, offset=DateOffset(weekday=WE(4))), Holiday("Christmas Eve - Half day", month=12, day=24, observance=previous_friday) ]
# holiday. In this case, the smaller distance (182 days) is returned. return (index - holiday_date[0]).days return distance_to_day EasterSunday = Holiday("Easter Sunday", month=1, day=1, offset=[Easter(), Day(0)]) NewYearsDay = Holiday("New Years Day", month=1, day=1) SuperBowl = Holiday("Superbowl", month=2, day=1, offset=DateOffset(weekday=SU(1))) MothersDay = Holiday("Mothers Day", month=5, day=1, offset=DateOffset(weekday=SU(2))) IndependenceDay = Holiday("Independence Day", month=7, day=4) ChristmasEve = Holiday("Christmas", month=12, day=24) ChristmasDay = Holiday("Christmas", month=12, day=25) NewYearsEve = Holiday("New Years Eve", month=12, day=31) BlackFriday = Holiday( "Black Friday", month=11, day=1, offset=[pd.DateOffset(weekday=TH(4)), Day(1)] ) CyberMonday = Holiday( "Cyber Monday", month=11, day=1, offset=[pd.DateOffset(weekday=TH(4)), Day(4)], ) NEW_YEARS_DAY = "new_years_day" MARTIN_LUTHER_KING_DAY = "martin_luther_king_day" SUPERBOWL = "superbowl" PRESIDENTS_DAY = "presidents_day" GOOD_FRIDAY = "good_friday" EASTER_SUNDAY = "easter_sunday"
european_labour_day, maundy_thursday, new_years_day, new_years_eve, whit_monday, ) from .exchange_calendar import HolidayCalendar, ExchangeCalendar NewYearsDay = new_years_day() # This falls on the first Thursday after 18 April. FirstDayOfSummer = Holiday( "First Day of Summer", month=4, day=19, offset=DateOffset(weekday=TH(1)), ) LabourDay = european_labour_day() MaundyThursday = maundy_thursday() AscensionDay = ascension_day() WhitMonday = whit_monday() NationalDay = Holiday("Icelandic Republic Day", month=6, day=17) # This falls on the first Monday of August. CommerceDay = Holiday( "Commerce Day", month=8, day=1,
SuperBowl = Holiday("Superbowl", month=2, day=1, offset=DateOffset(weekday=SU(1))) MothersDay = Holiday("Mothers Day", month=5, day=1, offset=DateOffset(weekday=SU(2))) IndependenceDay = Holiday("Independence Day", month=7, day=4) ChristmasEve = Holiday("Christmas", month=12, day=24) ChristmasDay = Holiday("Christmas", month=12, day=25) NewYearsEve = Holiday("New Years Eve", month=12, day=31) BlackFriday = Holiday("Black Friday", month=11, day=1, offset=[pd.DateOffset(weekday=TH(4)), Day(1)]) CyberMonday = Holiday( "Cyber Monday", month=11, day=1, offset=[pd.DateOffset(weekday=TH(4)), Day(4)], ) NEW_YEARS_DAY = "new_years_day" MARTIN_LUTHER_KING_DAY = "martin_luther_king_day" SUPERBOWL = "superbowl" PRESIDENTS_DAY = "presidents_day" GOOD_FRIDAY = "good_friday" EASTER_SUNDAY = "easter_sunday" EASTER_MONDAY = "easter_monday"
# 2008 was the last year SIFMA observed early close the day prior to Columbus Day FridayBeforeColumbusDayBefore2009 = Holiday( 'Early Close Friday Before Columbus Day', month=10, day=1, offset=[DateOffset(weekday=MO(2)), DateOffset(-3)], end_date=Timestamp('2009-01-01'), ) WednesdayBeforeThanksgiving = Holiday( 'Early Close Wednesday Before Thanksgiving Day', month=11, day=1, offset=[DateOffset(weekday=TH(4)), DateOffset(-1)], ) # 2008 was the last year SIFMA observed early close for Black Friday BlackFridayBefore2009 = Holiday( 'Early Close Wednesday Before Thanksgiving Day', month=11, day=1, offset=[DateOffset(weekday=TH(4)), DateOffset(1)], end_date=Timestamp('2009-01-01'), ) ChristmasEve = Holiday( 'Christmas Eve',