def test_week_and_time_composed_rule(self, rule_type): week_rule = NthTradingDayOfWeek(0) if rule_type == 'week_start' else \ NDaysBeforeLastTradingDayOfWeek(4) time_rule = AfterOpen(minutes=60) week_rule.cal = self.cal time_rule.cal = self.cal composed_rule = week_rule & time_rule should_trigger = composed_rule.should_trigger week_minutes = self.cal.minutes_for_sessions_in_range( pd.Timestamp("2014-01-06", tz='UTC'), pd.Timestamp("2014-01-10", tz='UTC')) dt = pd.Timestamp('2014-01-06 14:30:00', tz='UTC') trigger_day_offset = 0 trigger_minute_offset = 60 n_triggered = 0 for m in week_minutes: if should_trigger(m): self.assertEqual( m, dt + timedelta(days=trigger_day_offset) + timedelta(minutes=trigger_minute_offset)) n_triggered += 1 self.assertEqual(n_triggered, 1)
def test_week_and_time_composed_rule(self, type): week_rule = NthTradingDayOfWeek(0) if type == 'week_start' else \ NDaysBeforeLastTradingDayOfWeek(4) time_rule = AfterOpen(minutes=60) week_rule.cal = self.cal time_rule.cal = self.cal composed_rule = week_rule & time_rule should_trigger = composed_rule.should_trigger week_minutes = self.cal.minutes_for_sessions_in_range( pd.Timestamp("2014-01-06", tz='UTC'), pd.Timestamp("2014-01-10", tz='UTC') ) dt = pd.Timestamp('2014-01-06 14:30:00', tz='UTC') trigger_day_offset = 0 trigger_minute_offset = 60 n_triggered = 0 for m in week_minutes: if should_trigger(m): self.assertEqual(m, dt + timedelta(days=trigger_day_offset) + timedelta(minutes=trigger_minute_offset)) n_triggered += 1 self.assertEqual(n_triggered, 1)
def test_week_and_time_composed_rule(self, type): week_rule = NthTradingDayOfWeek(0) if type == 'week_start' else \ NDaysBeforeLastTradingDayOfWeek(4) time_rule = AfterOpen(minutes=60) week_rule.cal = self.nyse_cal time_rule.cal = self.nyse_cal composed_rule = week_rule & time_rule should_trigger = composed_rule.should_trigger week_minutes = self.nyse_cal.trading_minutes_for_days_in_range( datetime.date(year=2014, month=1, day=6), datetime.date(year=2014, month=1, day=10)) dt = pd.Timestamp('2014-01-06 14:30:00', tz='UTC') trigger_day_offset = 0 trigger_minute_offset = 60 n_triggered = 0 for m in week_minutes: if should_trigger(m): self.assertEqual( m, dt + timedelta(days=trigger_day_offset) + timedelta(minutes=trigger_minute_offset)) n_triggered += 1 self.assertEqual(n_triggered, 1)
def test_far_after_open(self): minute_groups = minutes_for_days(self.cal, ordered_days=True) after_open = AfterOpen(hours=9, minutes=25) after_open.cal = self.cal for session_minutes in minute_groups: for i, minute in enumerate(session_minutes): if i != 564: self.assertFalse(after_open.should_trigger(minute)) else: self.assertTrue(after_open.should_trigger(minute))
def test_offset_too_far(self): minute_groups = minutes_for_days(self.cal, ordered_days=True) # Neither rule should ever fire, since they are configured to fire # 11+ hours after the open or before the close. a NYSE session is # never longer than 6.5 hours. after_open_rule = AfterOpen(hours=11, minutes=11) after_open_rule.cal = self.cal before_close_rule = BeforeClose(hours=11, minutes=5) before_close_rule.cal = self.cal for session_minutes in minute_groups: for minute in session_minutes: self.assertFalse(after_open_rule.should_trigger(minute)) self.assertFalse(before_close_rule.should_trigger(minute))