def get_early_closes(start, end): # TSX closed at 1:00 PM on december 24th. start = canonicalize_datetime(start) end = canonicalize_datetime(end) start = max(start, datetime(1993, 1, 1, tzinfo=pytz.utc)) end = max(end, datetime(1993, 1, 1, tzinfo=pytz.utc)) # Not included here are early closes prior to 1993 # or unplanned early closes early_close_rules = [] christmas_eve = rrule.rrule( rrule.MONTHLY, bymonth=12, bymonthday=24, byweekday=(rrule.MO, rrule.TU, rrule.WE, rrule.TH, rrule.FR), cache=True, dtstart=start, until=end ) early_close_rules.append(christmas_eve) early_close_ruleset = rrule.rruleset() for rule in early_close_rules: early_close_ruleset.rrule(rule) early_closes = early_close_ruleset.between(start, end, inc=True) early_closes.sort() return pd.DatetimeIndex(early_closes)
def signal(self, *args, **kwargs): ''' Entry point for the rule_func All arguments are passed to rule_func ''' now = get_datetime() dt = calendar.canonicalize_datetime(get_datetime()) if self.next_event_date is None: self.next_event_date = dt times = self.open_and_close(dt) self.market_open = times['market_open'] self.market_close = times['market_close'] if self.format_datetime(now) < self.format_datetime(self.market_open): return False #print self.format_datetime(now) >= self.format_datetime(self.market_close) if (self.frequency == '1m'): # decide if it is the entry time for today's trading decision = self._trade_timing_func(*args, **kwargs) if decision: self.remaining_hits -= 1 self.set_next_event_date() elif (self.frequency == '1d'): decision = self.format_datetime(now) >= \ self.format_datetime(self.market_close) if decision: self.set_next_event_date() return decision
def get_non_trading_days(start, end): non_trading_rules = [] start = canonicalize_datetime(start) end = canonicalize_datetime(end) non_trading_rules.append(weekends) non_trading_rules.append(new_year) # Good Friday good_friday = rrule.rrule( rrule.DAILY, byeaster=-2, cache=True, dtstart=start, until=end ) non_trading_rules.append(good_friday) non_trading_rules.append(easter_monday) non_trading_rules.append(ch_himm) non_trading_rules.append(pfinst_mon_13) non_trading_rules.append(pfinst_mon_15) non_trading_rules.append(may_bank) non_trading_rules.append(tde) non_trading_rules.append(christmas_eve) non_trading_rules.append(christmas) non_trading_rules.append(boxing_day) non_trading_rules.append(newyears_eve) non_trading_ruleset = rrule.rruleset() for rule in non_trading_rules: non_trading_ruleset.rrule(rule) non_trading_days = sorted( non_trading_ruleset.between( start, end, inc=True)) return pd.DatetimeIndex(non_trading_days)
def get_market_close(): """ Returns the market close time for the current trading day """ closes = tradingcalendar.open_and_closes['market_close'] today = tradingcalendar.canonicalize_datetime(get_datetime()) return closes[today]
def get_early_closes(start, end): # TSX closed at 1:00 PM on december 24th. start = canonicalize_datetime(start) end = canonicalize_datetime(end) early_close_rules = [] early_close_rules.append(quarta_cinzas) early_close_ruleset = rrule.rruleset() for rule in early_close_rules: early_close_ruleset.rrule(rule) early_closes = early_close_ruleset.between(start, end, inc=True) early_closes.sort() return pd.DatetimeIndex(early_closes)
def shift_quandl(df): tdays = tradingcalendar.trading_days last_bar = df.iloc[-1].copy() last_date = pd.to_datetime(last_bar['Date']) last_dt = tradingcalendar.canonicalize_datetime(last_date) next_dt = tdays[tdays.searchsorted(last_dt) + 1] last_bar['Date'] = next_dt last_bar.name = df.index[-1] + 1 df = df.append(last_bar) return df
def minutes_till_close(): """ Returns the number of minutes until the market close """ now = get_datetime() open_and_closes = tradingcalendar.open_and_closes dt = tradingcalendar.canonicalize_datetime(now) idx = open_and_closes.index.searchsorted(dt) close = open_and_closes.iloc[idx]['market_close'] return (close - now).seconds / 60
def signal(self, *args, **kwargs): ''' Entry point for the rule_func All arguments are passed to rule_func ''' now = get_datetime() dt = calendar.canonicalize_datetime(now) if self.next_event_date is None: self.next_event_date = dt times = self.open_and_close(dt) self.market_open = times['market_open'] self.market_close = times['market_close'] if now < self.market_open: return False if now == self.market_close: self.set_next_event_date() decision = self._rule_func(*args, **kwargs) if decision: self.remaining_hits -= 1 if self.remaining_hits <= 0: self.set_next_event_date() return decision
def next_trading_day(dt): tdays = tradingcalendar.trading_days normalized_dt = tradingcalendar.canonicalize_datetime(dt) idx = tdays.searchsorted(normalized_dt) return tdays[idx + 1]
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)
def todays_index(self): dt = calendar.canonicalize_datetime(get_datetime()) return calendar.trading_days.searchsorted(dt)
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) # Universal confraternization conf_universal = rrule.rrule(rrule.MONTHLY, byyearday=1, cache=True, dtstart=start, until=end) non_trading_rules.append(conf_universal) # Sao Paulo city birthday aniversario_sao_paulo = rrule.rrule(rrule.MONTHLY, bymonth=1, bymonthday=25, cache=True, dtstart=start, until=end) non_trading_rules.append(aniversario_sao_paulo) # Carnival Monday carnaval_segunda = rrule.rrule(rrule.MONTHLY, byeaster=-48, cache=True, dtstart=start, until=end) non_trading_rules.append(carnaval_segunda) # Carnival Tuesday carnaval_terca = rrule.rrule(rrule.MONTHLY, byeaster=-47, cache=True, dtstart=start, until=end) non_trading_rules.append(carnaval_terca) # Passion of the Christ sexta_paixao = rrule.rrule(rrule.MONTHLY, byeaster=-2, cache=True, dtstart=start, until=end) non_trading_rules.append(sexta_paixao) # Corpus Christi corpus_christi = rrule.rrule(rrule.MONTHLY, byeaster=60, cache=True, dtstart=start, until=end) non_trading_rules.append(corpus_christi) tiradentes = rrule.rrule(rrule.MONTHLY, bymonth=4, bymonthday=21, cache=True, dtstart=start, until=end) non_trading_rules.append(tiradentes) # Labor day dia_trabalho = rrule.rrule(rrule.MONTHLY, bymonth=5, bymonthday=1, cache=True, dtstart=start, until=end) non_trading_rules.append(dia_trabalho) # Constitutionalist Revolution constitucionalista = rrule.rrule( rrule.MONTHLY, bymonth=7, bymonthday=9, cache=True, dtstart=datetime(1997, 1, 1, tzinfo=pytz.utc), until=end ) non_trading_rules.append(constitucionalista) # Independency day independencia = rrule.rrule(rrule.MONTHLY, bymonth=9, bymonthday=7, cache=True, dtstart=start, until=end) non_trading_rules.append(independencia) # Our Lady of Aparecida aparecida = rrule.rrule(rrule.MONTHLY, bymonth=10, bymonthday=12, cache=True, dtstart=start, until=end) non_trading_rules.append(aparecida) # All Souls' day finados = rrule.rrule(rrule.MONTHLY, bymonth=11, bymonthday=2, cache=True, dtstart=start, until=end) non_trading_rules.append(finados) # Proclamation of the Republic proclamacao_republica = rrule.rrule(rrule.MONTHLY, bymonth=11, bymonthday=15, cache=True, dtstart=start, until=end) non_trading_rules.append(proclamacao_republica) # Day of Black Awareness consciencia_negra = rrule.rrule( rrule.MONTHLY, bymonth=11, bymonthday=20, cache=True, dtstart=datetime(2004, 1, 1, tzinfo=pytz.utc), until=end ) non_trading_rules.append(consciencia_negra) # Christmas Eve vespera_natal = rrule.rrule(rrule.MONTHLY, bymonth=12, bymonthday=24, cache=True, dtstart=start, until=end) non_trading_rules.append(vespera_natal) # Christmas natal = rrule.rrule(rrule.MONTHLY, bymonth=12, bymonthday=25, cache=True, dtstart=start, until=end) non_trading_rules.append(natal) # New Year Eve ano_novo = rrule.rrule(rrule.MONTHLY, bymonth=12, bymonthday=31, cache=True, dtstart=start, until=end) non_trading_rules.append(ano_novo) # New Year Eve on saturday ano_novo_sab = rrule.rrule( rrule.MONTHLY, bymonth=12, bymonthday=30, byweekday=rrule.FR, cache=True, dtstart=start, until=end ) non_trading_rules.append(ano_novo_sab) 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) non_trading_days.sort() return pd.DatetimeIndex(non_trading_days)
def subsequent_trading_date(date): tdays = tradingcalendar.trading_days last_date = pd.to_datetime(date) last_dt = tradingcalendar.canonicalize_datetime(last_date) next_dt = tdays[tdays.searchsorted(last_dt) + 1] return next_dt
def is_market_close(dt): ref = tradingcalendar.canonicalize_datetime(dt) return dt == tradingcalendar.open_and_closes.T[ref]['market_close']
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) # Universal confraternization conf_universal = rrule.rrule(rrule.MONTHLY, byyearday=1, cache=True, dtstart=start, until=end) non_trading_rules.append(conf_universal) # Sao Paulo city birthday aniversario_sao_paulo = rrule.rrule(rrule.MONTHLY, bymonth=1, bymonthday=25, cache=True, dtstart=start, until=end) non_trading_rules.append(aniversario_sao_paulo) # Carnival Monday carnaval_segunda = rrule.rrule(rrule.MONTHLY, byeaster=-48, cache=True, dtstart=start, until=end) non_trading_rules.append(carnaval_segunda) # Carnival Tuesday carnaval_terca = rrule.rrule(rrule.MONTHLY, byeaster=-47, cache=True, dtstart=start, until=end) non_trading_rules.append(carnaval_terca) # Passion of the Christ sexta_paixao = rrule.rrule(rrule.MONTHLY, byeaster=-2, cache=True, dtstart=start, until=end) non_trading_rules.append(sexta_paixao) # Corpus Christi corpus_christi = rrule.rrule(rrule.MONTHLY, byeaster=60, cache=True, dtstart=start, until=end) non_trading_rules.append(corpus_christi) tiradentes = rrule.rrule(rrule.MONTHLY, bymonth=4, bymonthday=21, cache=True, dtstart=start, until=end) non_trading_rules.append(tiradentes) # Labor day dia_trabalho = rrule.rrule(rrule.MONTHLY, bymonth=5, bymonthday=1, cache=True, dtstart=start, until=end) non_trading_rules.append(dia_trabalho) # Constitutionalist Revolution constitucionalista = rrule.rrule(rrule.MONTHLY, bymonth=7, bymonthday=9, cache=True, dtstart=datetime(1997, 1, 1, tzinfo=pytz.utc), until=end) non_trading_rules.append(constitucionalista) # Independency day independencia = rrule.rrule(rrule.MONTHLY, bymonth=9, bymonthday=7, cache=True, dtstart=start, until=end) non_trading_rules.append(independencia) # Our Lady of Aparecida aparecida = rrule.rrule(rrule.MONTHLY, bymonth=10, bymonthday=12, cache=True, dtstart=start, until=end) non_trading_rules.append(aparecida) # All Souls' day finados = rrule.rrule(rrule.MONTHLY, bymonth=11, bymonthday=2, cache=True, dtstart=start, until=end) non_trading_rules.append(finados) # Proclamation of the Republic proclamacao_republica = rrule.rrule(rrule.MONTHLY, bymonth=11, bymonthday=15, cache=True, dtstart=start, until=end) non_trading_rules.append(proclamacao_republica) # Day of Black Awareness consciencia_negra = rrule.rrule(rrule.MONTHLY, bymonth=11, bymonthday=20, cache=True, dtstart=datetime(2004, 1, 1, tzinfo=pytz.utc), until=end) non_trading_rules.append(consciencia_negra) # Christmas Eve vespera_natal = rrule.rrule(rrule.MONTHLY, bymonth=12, bymonthday=24, cache=True, dtstart=start, until=end) non_trading_rules.append(vespera_natal) # Christmas natal = rrule.rrule(rrule.MONTHLY, bymonth=12, bymonthday=25, cache=True, dtstart=start, until=end) non_trading_rules.append(natal) # New Year Eve ano_novo = rrule.rrule(rrule.MONTHLY, bymonth=12, bymonthday=31, cache=True, dtstart=start, until=end) non_trading_rules.append(ano_novo) # New Year Eve on saturday ano_novo_sab = rrule.rrule(rrule.MONTHLY, bymonth=12, bymonthday=30, byweekday=rrule.FR, cache=True, dtstart=start, until=end) non_trading_rules.append(ano_novo_sab) 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) non_trading_days.sort() return pd.DatetimeIndex(non_trading_days)
import pandas as pd from dateutil import rrule from zipline.utils.tradingcalendar import end, canonicalize_datetime __author__ = 'Warren' start = pd.Timestamp('2013-01-01', tz='UTC') end_base = pd.Timestamp('today', tz='UTC') start = canonicalize_datetime(start) end = canonicalize_datetime(end) weekends = rrule.rrule( rrule.YEARLY, byweekday=(rrule.SA, rrule.SU), cache=True, dtstart=start, until=end ) # New Year's Day new_year = rrule.rrule( rrule.MONTHLY, byyearday=1, cache=True, dtstart=start, until=end )