コード例 #1
0
def all_labor(start, end):
    labors = rrule.rrule(rrule.YEARLY,
                         bymonth=9,
                         byweekday=rrule.MO(1),
                         dtstart=start,
                         until=end)
    return [d.date() for d in labors]
コード例 #2
0
ファイル: cb2_3_6_sol_1.py プロジェクト: ch1huizong/study
def all_labor(start, end):
    # return the list of Labor Day dates within start..end
    labors = rrule.rrule(rrule.YEARLY,
                         bymonth=9,
                         byweekday=rrule.MO(1),
                         dtstart=start,
                         until=end)
    return [d.date() for d in labors]  # no need to test for in-between here
コード例 #3
0
 def _labor_day(self, dtstart=None, until=None, count=None):
     """Labor day is the first monday of September"""
     kwargs = {
         "freq": rrule.YEARLY,
         "bymonth": 9,
         "byweekday": rrule.MO(1),
         "dtstart": dtstart,
         "until": until,
         "count": count,
     }
     return self._irule(**kwargs)
コード例 #4
0
 def _spring_withdraw_deadline(self, dtstart=None, until=None, count=None):
     """Spring withdraw deadline is the third Monday in March"""
     kwargs = {
         "freq": rrule.YEARLY,
         "bymonth": 3,
         "byweekday": rrule.MO(3),
         "dtstart": dtstart,
         "until": until,
         "count": count,
     }
     return self._irule(**kwargs)
コード例 #5
0
 def _fall_start(self, dtstart=None, until=None, count=None):
     """Fall term starts the second to last Monday of August"""
     kwargs = {
         "freq": rrule.YEARLY,
         "bymonth": 8,
         "byweekday": rrule.MO(-2),
         "dtstart": dtstart,
         "until": until,
         "count": count,
     }
     return self._irule(**kwargs)
コード例 #6
0
 def _fall_break_start(self, dtstart=None, until=None, count=None):
     """Fall break starts the second to last Monday of October"""
     kwargs = {
         "freq": rrule.YEARLY,
         "bymonth": 10,
         "byweekday": rrule.MO(-2),
         "dtstart": dtstart,
         "until": until,
         "count": count,
     }
     return self._irule(**kwargs)
コード例 #7
0
 def _mlk_day(self, dtstart=None, until=None, count=None):
     """MLK day is the third monday of January"""
     kwargs = {
         "freq": rrule.YEARLY,
         "bymonth": 1,
         "byweekday": rrule.MO(3),
         "dtstart": dtstart,
         "until": until,
         "count": count,
     }
     return self._irule(**kwargs)
コード例 #8
0
 def _memorial_day(self, dtstart=None, until=None, count=None):
     """Memorial day is the last monday of March"""
     kwargs = {
         "freq": rrule.YEARLY,
         "bymonth": 3,
         "byweekday": rrule.MO(-1),
         "dtstart": dtstart,
         "until": until,
         "count": count,
     }
     return self._irule(**kwargs)
コード例 #9
0
def NYSE_holidays(a=datetime.date.today(), b=datetime.date.today()+datetime.timedelta(days=365)):
    rs = rrule.rruleset()
# Include all potential holiday observances
    rs.rrule(rrule.rrule(rrule.YEARLY, dtstart=a, until=b, bymonth=12, bymonthday=31, byweekday=rrule.FR)) # New Years Day
    rs.rrule(rrule.rrule(rrule.YEARLY, dtstart=a, until=b, bymonth= 1, bymonthday= 1))                     # New Years Day
    rs.rrule(rrule.rrule(rrule.YEARLY, dtstart=a, until=b, bymonth= 1, bymonthday= 2, byweekday=rrule.MO)) # New Years Day
    rs.rrule(rrule.rrule(rrule.YEARLY, dtstart=a, until=b, bymonth= 1, byweekday= rrule.MO(3)))            # Martin Luther King Day
    rs.rrule(rrule.rrule(rrule.YEARLY, dtstart=a, until=b, bymonth= 2, byweekday= rrule.MO(3)))            # Washington's Birthday
    rs.rrule(rrule.rrule(rrule.YEARLY, dtstart=a, until=b, byeaster= -2))                                  # Good Friday
    rs.rrule(rrule.rrule(rrule.YEARLY, dtstart=a, until=b, bymonth= 5, byweekday= rrule.MO(-1)))           # Memorial Day
    rs.rrule(rrule.rrule(rrule.YEARLY, dtstart=a, until=b, bymonth= 7, bymonthday= 3, byweekday=rrule.FR)) # Independence Day
    rs.rrule(rrule.rrule(rrule.YEARLY, dtstart=a, until=b, bymonth= 7, bymonthday= 4))                     # Independence Day
    rs.rrule(rrule.rrule(rrule.YEARLY, dtstart=a, until=b, bymonth= 7, bymonthday= 5, byweekday=rrule.MO)) # Independence Day
    rs.rrule(rrule.rrule(rrule.YEARLY, dtstart=a, until=b, bymonth= 9, byweekday= rrule.MO(1)))            # Labor Day
    rs.rrule(rrule.rrule(rrule.YEARLY, dtstart=a, until=b, bymonth=11, byweekday= rrule.TH(4)))            # Thanksgiving Day
    rs.rrule(rrule.rrule(rrule.YEARLY, dtstart=a, until=b, bymonth=12, bymonthday=24, byweekday=rrule.FR)) # Christmas
    rs.rrule(rrule.rrule(rrule.YEARLY, dtstart=a, until=b, bymonth=12, bymonthday=25))                     # Christmas
    rs.rrule(rrule.rrule(rrule.YEARLY, dtstart=a, until=b, bymonth=12, bymonthday=26, byweekday=rrule.MO)) # Christmas
# Exclude potential holidays that fall on weekends
    rs.exrule(rrule.rrule(rrule.WEEKLY, dtstart=a, until=b, byweekday=(rrule.SA,rrule.SU)))
コード例 #10
0
ファイル: snippet.py プロジェクト: szabo92/gistable
def get_schedule_holidays_rrules():
    return [
        rrule.rrule(rrule.YEARLY,
                    dtstart=datetime.now(),
                    bymonth=1,
                    bymonthday=1),  # New Years
        rrule.rrule(rrule.YEARLY,
                    dtstart=datetime.now(),
                    bymonth=5,
                    byweekday=rrule.MO(-1)),  # Memorial
        rrule.rrule(rrule.YEARLY,
                    dtstart=datetime.now(),
                    bymonth=7,
                    bymonthday=4),  # Independence
        rrule.rrule(rrule.YEARLY,
                    dtstart=datetime.now(),
                    bymonth=11,
                    byweekday=rrule.TH(4)),  # Thanksgiving
        rrule.rrule(rrule.YEARLY,
                    dtstart=datetime.now(),
                    bymonth=12,
                    bymonthday=25),  # Christmas
    ]
コード例 #11
0
# ------- YOUR CODE -------------#
from dateutil import rrule
from datetime import datetime

MLK_DAY = rrule.rrule(
    dtstart=datetime(1986, 1, 20),  # First celebration
    freq=rrule.YEARLY,  # Occurs once per year
    bymonth=1,  # In January
    byweekday=rrule.MO(+3),  # On the 3rd Monday
)

# -------------------------------#

from datetime import datetime

MLK_TEST_CASES = [
    ((datetime(1970, 1, 1), datetime(1980, 1, 1)), []),
    ((datetime(1980, 1, 1), datetime(1989, 1, 1)),
     [datetime(1986, 1, 20),
      datetime(1987, 1, 19),
      datetime(1988, 1, 18)]),
    ((datetime(2017, 2, 1), datetime(2022, 2, 1)), [
        datetime(2018, 1, 15, 0, 0),
        datetime(2019, 1, 21, 0, 0),
        datetime(2020, 1, 20, 0, 0),
        datetime(2021, 1, 18, 0, 0),
        datetime(2022, 1, 17, 0, 0)
    ]),
]

コード例 #12
0
def get_non_trading_days(start, end):
    non_trading_rules = []

    start = canonicalize_datetime(start)
    end = canonicalize_datetime(end)

    weekends = rrule.rrule(
        rrule.YEARLY,
        byweekday=(rrule.SA, rrule.SU),
        cache=True,
        dtstart=start,
        until=end
    )
    non_trading_rules.append(weekends)

    new_years = rrule.rrule(
        rrule.MONTHLY,
        byyearday=1,
        cache=True,
        dtstart=start,
        until=end
    )
    non_trading_rules.append(new_years)

    new_years_sunday = rrule.rrule(
        rrule.MONTHLY,
        byyearday=2,
        byweekday=rrule.MO,
        cache=True,
        dtstart=start,
        until=end
    )
    non_trading_rules.append(new_years_sunday)

    new_years_saturday = rrule.rrule(
        rrule.MONTHLY,
        byyearday=3,
        byweekday=rrule.MO,
        cache=True,
        dtstart=start,
        until=end
    )
    non_trading_rules.append(new_years_saturday)

    # Family day in Ontario, starting in 2008, third monday of February
    family_day = rrule.rrule(
        rrule.MONTHLY,
        bymonth=2,
        byweekday=(rrule.MO(3)),
        cache=True,
        dtstart=datetime(2008, 1, 1, tzinfo=pytz.utc),
        until=end
    )
    non_trading_rules.append(family_day)

    good_friday = rrule.rrule(
        rrule.DAILY,
        byeaster=-2,
        cache=True,
        dtstart=start,
        until=end
    )
    non_trading_rules.append(good_friday)

    # Monday prior to May 25th.
    victoria_day = rrule.rrule(
        rrule.MONTHLY,
        bymonth=5,
        byweekday=rrule.MO,
        bymonthday=[24, 23, 22, 21, 20, 19, 18],
        cache=True,
        dtstart=start,
        until=end
    )
    non_trading_rules.append(victoria_day)

    july_1st = rrule.rrule(
        rrule.MONTHLY,
        bymonth=7,
        bymonthday=1,
        cache=True,
        dtstart=start,
        until=end
    )
    non_trading_rules.append(july_1st)

    july_1st_sunday = rrule.rrule(
        rrule.MONTHLY,
        bymonth=7,
        bymonthday=2,
        byweekday=rrule.MO,
        cache=True,
        dtstart=start,
        until=end
    )
    non_trading_rules.append(july_1st_sunday)

    july_1st_saturday = rrule.rrule(
        rrule.MONTHLY,
        bymonth=7,
        bymonthday=3,
        byweekday=rrule.MO,
        cache=True,
        dtstart=start,
        until=end
    )
    non_trading_rules.append(july_1st_saturday)

    civic_holiday = rrule.rrule(
        rrule.MONTHLY,
        bymonth=8,
        byweekday=rrule.MO(1),
        cache=True,
        dtstart=start,
        until=end
    )
    non_trading_rules.append(civic_holiday)

    labor_day = rrule.rrule(
        rrule.MONTHLY,
        bymonth=9,
        byweekday=(rrule.MO(1)),
        cache=True,
        dtstart=start,
        until=end
    )
    non_trading_rules.append(labor_day)

    thanksgiving = rrule.rrule(
        rrule.MONTHLY,
        bymonth=10,
        byweekday=(rrule.MO(2)),
        cache=True,
        dtstart=start,
        until=end
    )
    non_trading_rules.append(thanksgiving)

    christmas = rrule.rrule(
        rrule.MONTHLY,
        bymonth=12,
        bymonthday=25,
        cache=True,
        dtstart=start,
        until=end
    )
    non_trading_rules.append(christmas)

    # If Christmas is a Sunday then the 26th, a Monday is observed.
    # (but that would be boxing day), so the 27th is also observed.
    christmas_sunday = rrule.rrule(
        rrule.MONTHLY,
        bymonth=12,
        bymonthday=27,
        byweekday=rrule.TU,
        cache=True,
        dtstart=start,
        until=end
    )
    non_trading_rules.append(christmas_sunday)

    # If Christmas is a Saturday then the 27th, a monday is observed.
    christmas_saturday = rrule.rrule(
        rrule.MONTHLY,
        bymonth=12,
        bymonthday=27,
        byweekday=rrule.MO,
        cache=True,
        dtstart=start,
        until=end
    )
    non_trading_rules.append(christmas_saturday)

    boxing_day = rrule.rrule(
        rrule.MONTHLY,
        bymonth=12,
        bymonthday=26,
        cache=True,
        dtstart=start,
        until=end
    )
    non_trading_rules.append(boxing_day)

    # if boxing day is a sunday, the Christmas was saturday.
    # Christmas is observed on the 27th, a month and boxing day is observed
    # on the 28th, a tuesday.
    boxing_day_sunday = rrule.rrule(
        rrule.MONTHLY,
        bymonth=12,
        bymonthday=28,
        byweekday=rrule.TU,
        cache=True,
        dtstart=start,
        until=end
    )
    non_trading_rules.append(boxing_day_sunday)

    # If boxing day is a Saturday then the 28th, a monday is observed.
    boxing_day_saturday = rrule.rrule(
        rrule.MONTHLY,
        bymonth=12,
        bymonthday=28,
        byweekday=rrule.MO,
        cache=True,
        dtstart=start,
        until=end
    )
    non_trading_rules.append(boxing_day_saturday)

    non_trading_ruleset = rrule.rruleset()

    for rule in non_trading_rules:
        non_trading_ruleset.rrule(rule)

    non_trading_days = non_trading_ruleset.between(start, end, inc=True)

    # Add September 11th closings
    # The TSX was open for 71 minutes on September 11, 2011.
    # It was closed on the 12th and reopened on the 13th.
    # http://www.cbc.ca/news2/interactives/map-tsx/
    #
    #    September 2001
    # Su Mo Tu We Th Fr Sa
    #                    1
    #  2  3  4  5  6  7  8
    #  9 10 11 12 13 14 15
    # 16 17 18 19 20 21 22
    # 23 24 25 26 27 28 29
    # 30

    non_trading_days.append(
        datetime(2001, 9, 12, tzinfo=pytz.utc))

    non_trading_days.sort()
    return pd.DatetimeIndex(non_trading_days)
コード例 #13
0
def get_nyse_holidays(year_start_, year_end_):
    a = datetime.date(year_start_, 1, 1)
    b = datetime.date(year_end_, 12, 31)
    rs = rrule.rruleset()
    rs.rrule(
        rrule.rrule(rrule.YEARLY,
                    dtstart=a,
                    until=b,
                    bymonth=12,
                    bymonthday=31,
                    byweekday=rrule.FR))  # New Years Day
    rs.rrule(
        rrule.rrule(rrule.YEARLY, dtstart=a, until=b, bymonth=1,
                    bymonthday=1))  # New Years Day
    rs.rrule(
        rrule.rrule(rrule.YEARLY,
                    dtstart=a,
                    until=b,
                    bymonth=1,
                    bymonthday=2,
                    byweekday=rrule.MO))  # New Years Day
    rs.rrule(
        rrule.rrule(rrule.YEARLY,
                    dtstart=a,
                    until=b,
                    bymonth=1,
                    byweekday=rrule.MO(3)))  # Martin Luther King Day
    rs.rrule(
        rrule.rrule(rrule.YEARLY,
                    dtstart=a,
                    until=b,
                    bymonth=2,
                    byweekday=rrule.MO(3)))  # Washington's Birthday
    rs.rrule(rrule.rrule(rrule.YEARLY, dtstart=a, until=b,
                         byeaster=-2))  # Good Friday
    rs.rrule(
        rrule.rrule(rrule.YEARLY,
                    dtstart=a,
                    until=b,
                    bymonth=5,
                    byweekday=rrule.MO(-1)))  # Memorial Day
    rs.rrule(
        rrule.rrule(rrule.YEARLY,
                    dtstart=a,
                    until=b,
                    bymonth=7,
                    bymonthday=3,
                    byweekday=rrule.FR))  # Independence Day
    rs.rrule(
        rrule.rrule(rrule.YEARLY, dtstart=a, until=b, bymonth=7,
                    bymonthday=4))  # Independence Day
    rs.rrule(
        rrule.rrule(rrule.YEARLY,
                    dtstart=a,
                    until=b,
                    bymonth=7,
                    bymonthday=5,
                    byweekday=rrule.MO))  # Independence Day
    rs.rrule(
        rrule.rrule(rrule.YEARLY,
                    dtstart=a,
                    until=b,
                    bymonth=9,
                    byweekday=rrule.MO(1)))  # Labor Day
    rs.rrule(
        rrule.rrule(rrule.YEARLY,
                    dtstart=a,
                    until=b,
                    bymonth=11,
                    byweekday=rrule.TH(4)))  # Thanksgiving Day
    rs.rrule(
        rrule.rrule(rrule.YEARLY,
                    dtstart=a,
                    until=b,
                    bymonth=12,
                    bymonthday=24,
                    byweekday=rrule.FR))  # Christmas
    rs.rrule(
        rrule.rrule(rrule.YEARLY,
                    dtstart=a,
                    until=b,
                    bymonth=12,
                    bymonthday=25))  # Christmas
    rs.rrule(
        rrule.rrule(rrule.YEARLY,
                    dtstart=a,
                    until=b,
                    bymonth=12,
                    bymonthday=26,
                    byweekday=rrule.MO))  # Christmas
    # Exclude potential holidays that fall on weekends
    rs.exrule(
        rrule.rrule(rrule.WEEKLY,
                    dtstart=a,
                    until=b,
                    byweekday=(rrule.SA, rrule.SU)))
    return list(rs)
コード例 #14
0
def get_non_trading_days(start, end):
    non_trading_rules = []

    start = canonicalize_datetime(start)
    end = canonicalize_datetime(end)

    weekends = rrule.rrule(rrule.YEARLY,
                           byweekday=(rrule.SA, rrule.SU),
                           cache=True,
                           dtstart=start,
                           until=end)
    non_trading_rules.append(weekends)

    new_years = rrule.rrule(rrule.MONTHLY,
                            byyearday=1,
                            cache=True,
                            dtstart=start,
                            until=end)
    non_trading_rules.append(new_years)

    new_years_sunday = rrule.rrule(rrule.MONTHLY,
                                   byyearday=2,
                                   byweekday=rrule.MO,
                                   cache=True,
                                   dtstart=start,
                                   until=end)
    non_trading_rules.append(new_years_sunday)

    mlk_day = rrule.rrule(rrule.MONTHLY,
                          bymonth=1,
                          byweekday=(rrule.MO(+3)),
                          cache=True,
                          dtstart=datetime(1998, 1, 1, tzinfo=pytz.utc),
                          until=end)
    non_trading_rules.append(mlk_day)

    presidents_day = rrule.rrule(rrule.MONTHLY,
                                 bymonth=2,
                                 byweekday=(rrule.MO(3)),
                                 cache=True,
                                 dtstart=start,
                                 until=end)
    non_trading_rules.append(presidents_day)

    good_friday = rrule.rrule(rrule.DAILY,
                              byeaster=-2,
                              cache=True,
                              dtstart=start,
                              until=end)
    non_trading_rules.append(good_friday)

    memorial_day = rrule.rrule(rrule.MONTHLY,
                               bymonth=5,
                               byweekday=(rrule.MO(-1)),
                               cache=True,
                               dtstart=start,
                               until=end)
    non_trading_rules.append(memorial_day)

    july_4th = rrule.rrule(rrule.MONTHLY,
                           bymonth=7,
                           bymonthday=4,
                           cache=True,
                           dtstart=start,
                           until=end)
    non_trading_rules.append(july_4th)

    july_4th_sunday = rrule.rrule(rrule.MONTHLY,
                                  bymonth=7,
                                  bymonthday=5,
                                  byweekday=rrule.MO,
                                  cache=True,
                                  dtstart=start,
                                  until=end)
    non_trading_rules.append(july_4th_sunday)

    july_4th_saturday = rrule.rrule(rrule.MONTHLY,
                                    bymonth=7,
                                    bymonthday=3,
                                    byweekday=rrule.FR,
                                    cache=True,
                                    dtstart=start,
                                    until=end)
    non_trading_rules.append(july_4th_saturday)

    labor_day = rrule.rrule(rrule.MONTHLY,
                            bymonth=9,
                            byweekday=(rrule.MO(1)),
                            cache=True,
                            dtstart=start,
                            until=end)
    non_trading_rules.append(labor_day)

    thanksgiving = rrule.rrule(rrule.MONTHLY,
                               bymonth=11,
                               byweekday=(rrule.TH(4)),
                               cache=True,
                               dtstart=start,
                               until=end)
    non_trading_rules.append(thanksgiving)

    christmas = rrule.rrule(rrule.MONTHLY,
                            bymonth=12,
                            bymonthday=25,
                            cache=True,
                            dtstart=start,
                            until=end)
    non_trading_rules.append(christmas)

    christmas_sunday = rrule.rrule(rrule.MONTHLY,
                                   bymonth=12,
                                   bymonthday=26,
                                   byweekday=rrule.MO,
                                   cache=True,
                                   dtstart=start,
                                   until=end)
    non_trading_rules.append(christmas_sunday)

    # If Christmas is a Saturday then 24th, a Friday is observed.
    christmas_saturday = rrule.rrule(rrule.MONTHLY,
                                     bymonth=12,
                                     bymonthday=24,
                                     byweekday=rrule.FR,
                                     cache=True,
                                     dtstart=start,
                                     until=end)
    non_trading_rules.append(christmas_saturday)

    non_trading_ruleset = rrule.rruleset()

    for rule in non_trading_rules:
        non_trading_ruleset.rrule(rule)

    non_trading_days = non_trading_ruleset.between(start, end, inc=True)

    # Add September 11th closings
    # https://en.wikipedia.org/wiki/Aftermath_of_the_September_11_attacks
    # Due to the terrorist attacks, the stock market did not open on 9/11/2001
    # It did not open again until 9/17/2001.
    #
    #    September 2001
    # Su Mo Tu We Th Fr Sa
    #                    1
    #  2  3  4  5  6  7  8
    #  9 10 11 12 13 14 15
    # 16 17 18 19 20 21 22
    # 23 24 25 26 27 28 29
    # 30

    for day_num in range(11, 17):
        non_trading_days.append(datetime(2001, 9, day_num, tzinfo=pytz.utc))

    # Add closings due to Hurricane Sandy in 2012
    # https://en.wikipedia.org/wiki/Hurricane_sandy
    #
    # The stock exchange was closed due to Hurricane Sandy's
    # impact on New York.
    # It closed on 10/29 and 10/30, reopening on 10/31
    #     October 2012
    # Su Mo Tu We Th Fr Sa
    #     1  2  3  4  5  6
    #  7  8  9 10 11 12 13
    # 14 15 16 17 18 19 20
    # 21 22 23 24 25 26 27
    # 28 29 30 31

    for day_num in range(29, 31):
        non_trading_days.append(datetime(2012, 10, day_num, tzinfo=pytz.utc))

    # Misc closings from NYSE listing.
    # http://www.nyse.com/pdfs/closings.pdf
    #
    # National Days of Mourning
    # - President Richard Nixon
    non_trading_days.append(datetime(1994, 4, 27, tzinfo=pytz.utc))
    # - President Ronald W. Reagan - June 11, 2004
    non_trading_days.append(datetime(2004, 6, 11, tzinfo=pytz.utc))
    # - President Gerald R. Ford - Jan 2, 2007
    non_trading_days.append(datetime(2007, 1, 2, tzinfo=pytz.utc))

    non_trading_days.sort()
    return pd.DatetimeIndex(non_trading_days)
コード例 #15
0
def workingdays(startdate, enddate):
    # Business days (working days) between the start date and end date
    days = list(rrule.rrule(rrule.DAILY, byweekday = range(0,5), dtstart = startdate, until = enddate))

    # List of company holidays, Memorial Day, Independence Day, Labor Day, Thanksgiving, Company Shutdown, MLK Birthday
    holidays = list(rrule.rrule(rrule.YEARLY, dtstart = startdate, until = enddate, bymonth = 5, byweekday = rrule.MO(-1))) +\
    list(rrule.rrule(rrule.YEARLY, dtstart = startdate, until = enddate, bymonth = 7, bymonthday = 4)) +\
    list(rrule.rrule(rrule.YEARLY, dtstart = startdate, until = enddate, bymonth = 9, byweekday = rrule.MO(1))) +\
    list(rrule.rrule(rrule.YEARLY, dtstart = startdate, until = enddate, bymonth = 11, byweekday = rrule.TH(4))) +\
    list(rrule.rrule(rrule.YEARLY, dtstart = startdate, until = enddate, bymonth = 11, byweekday = rrule.FR(4))) +\
    list(rrule.rrule(rrule.YEARLY, dtstart = startdate, until = enddate, bymonth = 12, bymonthday = 25)) +\
    list(rrule.rrule(rrule.YEARLY, dtstart = startdate, until = enddate, bymonth = 12, bymonthday = 26)) +\
    list(rrule.rrule(rrule.YEARLY, dtstart = startdate, until = enddate, bymonth = 12, bymonthday = 27)) +\
    list(rrule.rrule(rrule.YEARLY, dtstart = startdate, until = enddate, bymonth = 12, bymonthday = 28)) +\
    list(rrule.rrule(rrule.YEARLY, dtstart = startdate, until = enddate, bymonth = 12, bymonthday = 29)) +\
    list(rrule.rrule(rrule.YEARLY, dtstart = startdate, until = enddate, bymonth = 12, bymonthday = 30)) +\
    list(rrule.rrule(rrule.YEARLY, dtstart = startdate, until = enddate, bymonth = 12, bymonthday = 31)) +\
    list(rrule.rrule(rrule.YEARLY, dtstart = startdate, until = enddate, bymonth = 1, bymonthday = 1)) +\
    list(rrule.rrule(rrule.YEARLY, dtstart = startdate, until = enddate, bymonth = 1, byweekday = rrule.MO(3)))
    
    # Total number of working days
    totaldays = len(set(days) - set(holidays))
    return totaldays
コード例 #16
0
def NYSE_holidays2(a, b):
    # Generate ruleset for holiday observances on the NYSE
    rs = rrule.rruleset()

    # Include all potential holiday observances
    ###############################################

    # New Years Day
    rs.rrule(
        rrule.rrule(rrule.YEARLY,
                    dtstart=a,
                    until=b,
                    bymonth=12,
                    bymonthday=31,
                    byweekday=rrule.FR))
    # New Years Day
    rs.rrule(
        rrule.rrule(rrule.YEARLY, dtstart=a, until=b, bymonth=1, bymonthday=1))
    # New Years Day
    rs.rrule(
        rrule.rrule(rrule.YEARLY,
                    dtstart=a,
                    until=b,
                    bymonth=1,
                    bymonthday=2,
                    byweekday=rrule.MO))
    # MLK Day
    rs.rrule(
        rrule.rrule(rrule.YEARLY,
                    dtstart=a,
                    until=b,
                    bymonth=1,
                    byweekday=rrule.MO(3)))
    # Washington's Bday
    rs.rrule(
        rrule.rrule(rrule.YEARLY,
                    dtstart=a,
                    until=b,
                    bymonth=2,
                    byweekday=rrule.MO(3)))
    # Good Friday
    rs.rrule(rrule.rrule(rrule.YEARLY, dtstart=a, until=b, byeaster=-2))
    # Memorial Day
    rs.rrule(
        rrule.rrule(rrule.YEARLY,
                    dtstart=a,
                    until=b,
                    bymonth=5,
                    byweekday=rrule.MO(-1)))
    # Independence Day
    rs.rrule(
        rrule.rrule(rrule.YEARLY,
                    dtstart=a,
                    until=b,
                    bymonth=7,
                    bymonthday=3,
                    byweekday=rrule.FR))
    # Independence Day
    rs.rrule(
        rrule.rrule(rrule.YEARLY, dtstart=a, until=b, bymonth=7, bymonthday=4))
    # Independence Day
    rs.rrule(
        rrule.rrule(rrule.YEARLY,
                    dtstart=a,
                    until=b,
                    bymonth=7,
                    bymonthday=5,
                    byweekday=rrule.MO))
    # Labor Day
    rs.rrule(
        rrule.rrule(rrule.YEARLY,
                    dtstart=a,
                    until=b,
                    bymonth=9,
                    byweekday=rrule.MO(1)))
    # Thanksgiving Day
    rs.rrule(
        rrule.rrule(rrule.YEARLY,
                    dtstart=a,
                    until=b,
                    bymonth=11,
                    byweekday=rrule.TH(4)))
    # Christmas
    rs.rrule(
        rrule.rrule(rrule.YEARLY,
                    dtstart=a,
                    until=b,
                    bymonth=12,
                    bymonthday=24,
                    byweekday=rrule.FR))
    # Christmas
    rs.rrule(
        rrule.rrule(rrule.YEARLY,
                    dtstart=a,
                    until=b,
                    bymonth=12,
                    bymonthday=25))
    # Christmas
    rs.rrule(
        rrule.rrule(rrule.YEARLY,
                    dtstart=a,
                    until=b,
                    bymonth=12,
                    bymonthday=26,
                    byweekday=rrule.MO))

    ######################################################
    # Exclude potential holidays that fall on weekends
    rs.exrule(
        rrule.rrule(rrule.WEEKLY,
                    dtstart=a,
                    until=b,
                    byweekday=(rrule.SA, rrule.SU)))
    return rs
コード例 #17
0
def get_nontrading_days(start, end):
    non_trading_rules = []

    weekends = rrule.rrule(rrule.YEARLY,
                           byweekday=(rrule.SA, rrule.SU),
                           cache=True,
                           dtstart=start,
                           until=end)
    non_trading_rules.append(weekends)

    new_years = rrule.rrule(rrule.MONTHLY,
                            byyearday=1,
                            cache=True,
                            dtstart=start,
                            until=end)
    non_trading_rules.append(new_years)

    new_years_sun = rrule.rrule(rrule.MONTHLY,
                                byyearday=2,
                                byweekday=(rrule.MO),
                                cache=True,
                                dtstart=start,
                                until=end)
    non_trading_rules.append(new_years_sun)

    mlk_day = rrule.rrule(rrule.MONTHLY,
                          bymonth=1,
                          byweekday=(rrule.MO(+3)),
                          cache=True,
                          dtstart=datetime(1998, 01, 01),
                          until=end)
    non_trading_rules.append(mlk_day)

    presidents_day = rrule.rrule(rrule.MONTHLY,
                                 bymonth=2,
                                 bymonthday=22,
                                 cache=True,
                                 dtstart=datetime(1950, 01, 01),
                                 until=datetime(1971, 01, 01))
    non_trading_rules.append(presidents_day)

    presidents_day_mon = rrule.rrule(rrule.MONTHLY,
                                     bymonth=2,
                                     byweekday=(rrule.MO(3)),
                                     cache=True,
                                     dtstart=datetime(1971, 01, 01),
                                     until=end)
    non_trading_rules.append(presidents_day_mon)

    good_friday = rrule.rrule(rrule.DAILY,
                              byeaster=-2,
                              cache=True,
                              dtstart=start,
                              until=end)
    non_trading_rules.append(good_friday)

    memorial_day = rrule.rrule(rrule.MONTHLY,
                               bymonth=5,
                               bymonthday=30,
                               cache=True,
                               dtstart=datetime(1950, 01, 01),
                               until=datetime(1971, 01, 01))

    non_trading_rules.append(memorial_day)

    memorial_mon = rrule.rrule(rrule.MONTHLY,
                               bymonth=5,
                               byweekday=(rrule.MO(-1)),
                               cache=True,
                               dtstart=datetime(1971, 01, 01),
                               until=end)

    non_trading_rules.append(memorial_mon)

    paperwork_crisis = rrule.rrule(rrule.WEEKLY,
                                   byweekday=rrule.WE,
                                   cache=True,
                                   dtstart=datetime(1968, 6, 11),
                                   until=datetime(1968, 12, 31))

    non_trading_rules.append(paperwork_crisis)

    july_4th_sat = rrule.rrule(rrule.MONTHLY,
                               bymonth=7,
                               byweekday=(rrule.FR),
                               bymonthday=3,
                               cache=True,
                               dtstart=start,
                               until=end)
    non_trading_rules.append(july_4th_sat)

    july_4th = rrule.rrule(rrule.MONTHLY,
                           bymonth=7,
                           bymonthday=4,
                           cache=True,
                           dtstart=start,
                           until=end)
    non_trading_rules.append(july_4th)

    july_4th_sun = rrule.rrule(rrule.MONTHLY,
                               bymonth=7,
                               byweekday=(rrule.MO),
                               bymonthday=5,
                               cache=True,
                               dtstart=start,
                               until=end)
    non_trading_rules.append(july_4th_sun)

    labor_day = rrule.rrule(rrule.MONTHLY,
                            bymonth=9,
                            byweekday=(rrule.MO(1)),
                            cache=True,
                            dtstart=start,
                            until=end)
    non_trading_rules.append(labor_day)

    thanksgiving = rrule.rrule(rrule.MONTHLY,
                               bymonth=11,
                               byweekday=(rrule.TH(4)),
                               cache=True,
                               dtstart=start,
                               until=end)
    non_trading_rules.append(thanksgiving)

    election = rrule.rrule(rrule.YEARLY,
                           bymonth=11,
                           byweekday=rrule.TU,
                           bymonthday=(2, 3, 4, 5, 6, 7, 8),
                           cache=True,
                           dtstart=datetime(1950, 01, 01),
                           until=datetime(1968, 12, 01))

    non_trading_rules.append(election)

    pres_election = rrule.rrule(rrule.YEARLY,
                                interval=4,
                                bymonth=11,
                                byweekday=rrule.TU,
                                bymonthday=(2, 3, 4, 5, 6, 7, 8),
                                cache=True,
                                dtstart=datetime(1972, 01, 01),
                                until=datetime(1980, 12, 01))

    non_trading_rules.append(pres_election)

    christmas_sat = rrule.rrule(rrule.MONTHLY,
                                bymonth=12,
                                byweekday=(rrule.FR),
                                bymonthday=24,
                                cache=True,
                                dtstart=start,
                                until=end)
    non_trading_rules.append(christmas_sat)

    christmas = rrule.rrule(rrule.MONTHLY,
                            bymonth=12,
                            bymonthday=25,
                            cache=True,
                            dtstart=start,
                            until=end)
    non_trading_rules.append(christmas)

    christmas_sun = rrule.rrule(rrule.MONTHLY,
                                bymonth=12,
                                byweekday=(rrule.MO),
                                bymonthday=26,
                                cache=True,
                                dtstart=start,
                                until=end)
    non_trading_rules.append(christmas_sun)

    non_trading_ruleset = rrule.rruleset()

    for rule in non_trading_rules:
        non_trading_ruleset.rrule(rule)

    non_trading_days = non_trading_ruleset.between(start, end, inc=True)

    # Add September 11th closings
    # http://en.wikipedia.org/wiki/Aftermath_of_the_September_11_attacks
    # Due to the terrorist attacks, the stock market did not open on 9/11/2001
    # It did not open again until 9/17/2001.
    #
    #    September 2001
    # Su Mo Tu We Th Fr Sa
    #                    1
    #  2  3  4  5  6  7  8
    #  9 10 11 12 13 14 15
    # 16 17 18 19 20 21 22
    # 23 24 25 26 27 28 29
    # 30

    for day_num in range(11, 17):
        non_trading_days.append(datetime(2001, 9, day_num))

    # Add closings due to Hurricane Sandy in 2012
    # http://en.wikipedia.org/wiki/Hurricane_sandy
    #
    # The stock exchange was closed due to Hurricane Sandy's
    # impact on New York.
    # It closed on 10/29 and 10/30, reopening on 10/31
    #     October 2012
    # Su Mo Tu We Th Fr Sa
    #     1  2  3  4  5  6
    #  7  8  9 10 11 12 13
    # 14 15 16 17 18 19 20
    # 21 22 23 24 25 26 27
    # 28 29 30 31

    for day_num in range(29, 31):
        non_trading_days.append(datetime(2012, 10, day_num))

    # Misc closings from NYSE listing.
    # http://www.nyse.com/pdfs/closings.pdf
    #
    #  Day before Decoration Day
    non_trading_days.append(datetime(1961, 5, 29))
    #  Presidents day friday one time close
    non_trading_days.append(datetime(1964, 2, 21))
    #  memorial day friday one time close
    non_trading_days.append(datetime(1964, 5, 29))
    non_trading_days.append(datetime(1965, 5, 31))
    # Lincolns birthday
    non_trading_days.append(datetime(1968, 2, 12))
    # MLK Mounrning
    non_trading_days.append(datetime(1968, 4, 9))

    # National Days of Mourning
    # - President John F. Kennedy
    non_trading_days.append(datetime(1963, 11, 25))
    # - President Richard M. Nixon - April 27, 1994
    non_trading_days.append(datetime(1994, 4, 27))
    # - President Ronald W. Reagan - June 11, 2004
    non_trading_days.append(datetime(2004, 6, 11))
    # - President Gerald R. Ford - Jan 2, 2007
    non_trading_days.append(datetime(2007, 1, 2))
    return non_trading_days
コード例 #18
0
                          byeaster=-2,
                          cache=True,
                          dtstart=start,
                          until=end)
non_trading_rules.append(good_friday)
# Easter Monday
easter_monday = rrule.rrule(rrule.DAILY,
                            byeaster=1,
                            cache=True,
                            dtstart=start,
                            until=end)
non_trading_rules.append(easter_monday)
# Early May Bank Holiday (1st Monday in May)
may_bank = rrule.rrule(rrule.MONTHLY,
                       bymonth=5,
                       byweekday=(rrule.MO(1)),
                       cache=True,
                       dtstart=start,
                       until=end)
non_trading_rules.append(may_bank)
# Spring Bank Holiday (Last Monday in May)
spring_bank = rrule.rrule(rrule.MONTHLY,
                          bymonth=5,
                          byweekday=(rrule.MO(-1)),
                          cache=True,
                          dtstart=datetime(2003, 1, 1, tzinfo=pytz.utc),
                          until=end)
non_trading_rules.append(spring_bank)
# Summer Bank Holiday (Last Monday in August)
summer_bank = rrule.rrule(rrule.MONTHLY,
                          bymonth=8,
コード例 #19
0
ファイル: pairstrading.py プロジェクト: pkaller/hf_project
def get_nyse_holidays(year_start_, year_end_):
    '''Returns list of NYSE holidays between and included two specific years,
    source `https://gist.github.com/jckantor/d100a028027c5a6b8340`
    
    :param year_start_: integer representing the starting year
    :param year_end_: integer representing the ending year
    
    :return : list of datetime.date containing NYSE holidays
    '''
    a = dt.date(year_start_, 1, 1)
    b = dt.date(year_end_, 12, 31)
    rs = rrule.rruleset()

    # New Years Day
    rs.rrule(
        rrule.rrule(rrule.YEARLY,
                    dtstart=a,
                    until=b,
                    bymonth=12,
                    bymonthday=31,
                    byweekday=rrule.FR))
    # New Years Day
    rs.rrule(
        rrule.rrule(rrule.YEARLY, dtstart=a, until=b, bymonth=1, bymonthday=1))
    # New Years Day
    rs.rrule(
        rrule.rrule(rrule.YEARLY,
                    dtstart=a,
                    until=b,
                    bymonth=1,
                    bymonthday=2,
                    byweekday=rrule.MO))
    # Martin Luther King Day
    rs.rrule(
        rrule.rrule(rrule.YEARLY,
                    dtstart=a,
                    until=b,
                    bymonth=1,
                    byweekday=rrule.MO(3)))
    # Washington's Birthday
    rs.rrule(
        rrule.rrule(rrule.YEARLY,
                    dtstart=a,
                    until=b,
                    bymonth=2,
                    byweekday=rrule.MO(3)))
    # Good Friday
    rs.rrule(rrule.rrule(rrule.YEARLY, dtstart=a, until=b, byeaster=-2))
    # Memorial Day
    rs.rrule(
        rrule.rrule(rrule.YEARLY,
                    dtstart=a,
                    until=b,
                    bymonth=5,
                    byweekday=rrule.MO(-1)))
    # Independence Day
    rs.rrule(
        rrule.rrule(rrule.YEARLY,
                    dtstart=a,
                    until=b,
                    bymonth=7,
                    bymonthday=3,
                    byweekday=rrule.FR))
    # Independence Day
    rs.rrule(
        rrule.rrule(rrule.YEARLY, dtstart=a, until=b, bymonth=7, bymonthday=4))
    # Independence Day
    rs.rrule(
        rrule.rrule(rrule.YEARLY,
                    dtstart=a,
                    until=b,
                    bymonth=7,
                    bymonthday=5,
                    byweekday=rrule.MO))
    # Labor Day
    rs.rrule(
        rrule.rrule(rrule.YEARLY,
                    dtstart=a,
                    until=b,
                    bymonth=9,
                    byweekday=rrule.MO(1)))
    # Thanksgiving Day
    rs.rrule(
        rrule.rrule(rrule.YEARLY,
                    dtstart=a,
                    until=b,
                    bymonth=11,
                    byweekday=rrule.TH(4)))
    # Christmas
    rs.rrule(
        rrule.rrule(rrule.YEARLY,
                    dtstart=a,
                    until=b,
                    bymonth=12,
                    bymonthday=24,
                    byweekday=rrule.FR))
    # Christmas
    rs.rrule(
        rrule.rrule(rrule.YEARLY,
                    dtstart=a,
                    until=b,
                    bymonth=12,
                    bymonthday=25))
    # Christmas
    rs.rrule(
        rrule.rrule(rrule.YEARLY,
                    dtstart=a,
                    until=b,
                    bymonth=12,
                    bymonthday=26,
                    byweekday=rrule.MO))

    # Exclude potential holidays that fall on weekends
    rs.exrule(
        rrule.rrule(rrule.WEEKLY,
                    dtstart=a,
                    until=b,
                    byweekday=(rrule.SA, rrule.SU)))
    return list(rs)