mirror of
https://github.com/wassname/catalyst.git
synced 2026-07-08 18:22:54 +08:00
Merge pull request #1442 from quantopian/schedule-all-the-hours
ENH: Let event offsets be up to 12 hours.
This commit is contained in:
@@ -312,6 +312,19 @@ class StatelessRulesTests(RuleTestCase):
|
||||
else:
|
||||
self.assertTrue(should_trigger(minute))
|
||||
|
||||
def test_invalid_offset(self):
|
||||
with self.assertRaises(ValueError):
|
||||
AfterOpen(hours=12, minutes=1)
|
||||
|
||||
with self.assertRaises(ValueError):
|
||||
AfterOpen(hours=0, minutes=0)
|
||||
|
||||
with self.assertRaises(ValueError):
|
||||
BeforeClose(hours=12, minutes=1)
|
||||
|
||||
with self.assertRaises(ValueError):
|
||||
BeforeClose(hours=0, minutes=0)
|
||||
|
||||
def test_BeforeClose(self):
|
||||
minute_groups = minutes_for_days(self.cal, ordered_days=True)
|
||||
should_trigger = self.before_close.should_trigger
|
||||
|
||||
@@ -15,7 +15,9 @@
|
||||
from unittest import TestCase
|
||||
import pandas as pd
|
||||
|
||||
from test_events import StatefulRulesTests, StatelessRulesTests
|
||||
from test_events import StatefulRulesTests, StatelessRulesTests, \
|
||||
minutes_for_days
|
||||
from zipline.utils.events import AfterOpen
|
||||
|
||||
|
||||
class TestStatelessRulesCME(StatelessRulesTests, TestCase):
|
||||
@@ -24,6 +26,18 @@ class TestStatelessRulesCME(StatelessRulesTests, TestCase):
|
||||
HALF_SESSION = pd.Timestamp("2014-07-04", tz='UTC')
|
||||
FULL_SESSION = pd.Timestamp("2014-09-24", tz='UTC')
|
||||
|
||||
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))
|
||||
|
||||
|
||||
class TestStatefulRulesCME(StatefulRulesTests, TestCase):
|
||||
CALENDAR_STRING = "CME"
|
||||
|
||||
@@ -18,10 +18,12 @@ import pandas as pd
|
||||
from nose_parameterized import parameterized
|
||||
|
||||
from zipline.testing import parameter_space
|
||||
from zipline.utils.events import NDaysBeforeLastTradingDayOfWeek, AfterOpen
|
||||
from zipline.utils.events import NDaysBeforeLastTradingDayOfWeek, AfterOpen, \
|
||||
BeforeClose
|
||||
from zipline.utils.events import NthTradingDayOfWeek
|
||||
|
||||
from test_events import StatelessRulesTests, StatefulRulesTests
|
||||
from test_events import StatelessRulesTests, StatefulRulesTests, \
|
||||
minutes_for_days
|
||||
|
||||
|
||||
class TestStatelessRulesNYSE(StatelessRulesTests, TestCase):
|
||||
@@ -140,6 +142,23 @@ class TestStatelessRulesNYSE(StatelessRulesTests, TestCase):
|
||||
|
||||
self.assertEqual(n_triggered, 1)
|
||||
|
||||
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))
|
||||
|
||||
|
||||
class TestStatefulRulesNYSE(StatefulRulesTests, TestCase):
|
||||
CALENDAR_STRING = "NYSE"
|
||||
|
||||
Reference in New Issue
Block a user