示例#1
0
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)
示例#2
0
 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
示例#3
0
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]
示例#5
0
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)
示例#6
0
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)
示例#7
0
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
示例#8
0
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
示例#10
0
 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 next_trading_day(dt):
    tdays = tradingcalendar.trading_days
    normalized_dt = tradingcalendar.canonicalize_datetime(dt)
    idx = tdays.searchsorted(normalized_dt)
    return tdays[idx + 1]
示例#13
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)
示例#14
0
 def todays_index(self):
     dt = calendar.canonicalize_datetime(get_datetime())
     return calendar.trading_days.searchsorted(dt)
示例#15
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)

    # 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)
示例#16
0
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
示例#17
0
def is_market_close(dt):
    ref = tradingcalendar.canonicalize_datetime(dt)
    return dt == tradingcalendar.open_and_closes.T[ref]['market_close']
示例#18
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)

    # 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)
示例#19
0
文件: Model1.py 项目: Karagul/Thesis
def is_market_close(dt):
    ref = tradingcalendar.canonicalize_datetime(dt)
    return dt == tradingcalendar.open_and_closes.T[ref]['market_close']
示例#20
0
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
)