BUG: EventWindow now always contains constant number of days.

This commit is contained in:
Thomas Wiecki
2012-12-06 12:33:18 -05:00
parent ac8ae973bc
commit 7a0a6f5231
2 changed files with 7 additions and 34 deletions
+2 -6
View File
@@ -123,11 +123,7 @@ class TestEventWindow(TestCase):
# Record the length of the window after each event.
lengths.append(len(window.ticks))
# The window stretches out during the weekend because we wait
# to drop events until the weekend ends. The last window is
# briefly longer because it doesn't complete a full day. The
# window then shrinks once the day completes
assert lengths == [1, 2, 3, 3, 3, 4, 5, 5, 5, 3, 4, 3]
assert lengths == [1, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3]
assert window.added == events
assert window.removed == events[:-3]
@@ -146,7 +142,7 @@ class TestEventWindow(TestCase):
# Record the length of the window after each event.
lengths.append(len(window.ticks))
assert lengths == [1, 2, 3, 3, 2]
assert lengths == [1, 2, 2, 2, 2]
assert window.added == events
assert window.removed == events[:-2]
+5 -28
View File
@@ -239,9 +239,6 @@ class EventWindow(object):
# adding new ticks.
self.handle_add(event)
if self.market_aware:
self.add_new_holidays(event.dt)
# Clear out any expired events. drop_condition changes depending
# on whether or not we are running in market_aware mode.
#
@@ -257,33 +254,13 @@ class EventWindow(object):
# behavior for removing ticks.
self.handle_remove(popped)
def add_new_holidays(self, newest):
# Add to our tracked window any untracked holidays that are
# older than our newest event. (newest should always be
# self.ticks[-1])
while len(self.all_holidays) > 0 and self.all_holidays[0] <= newest:
self.cur_holidays.append(self.all_holidays.popleft())
def drop_old_holidays(self, oldest):
# Drop from our tracked window any holidays that are older
# than our oldest tracked event. (oldest should always
# be self.ticks[0])
while len(self.cur_holidays) > 0 and self.cur_holidays[0] < oldest:
self.cur_holidays.popleft()
def out_of_market_window(self, oldest, newest):
self.drop_old_holidays(oldest)
calendar_dates_between = (newest.date() - oldest.date()).days
holidays_between = len(self.cur_holidays)
trading_days_between = calendar_dates_between - holidays_between
# Find number of unique days in window
# Note that this assumes that each day we received an
# event is a trading day.
unique_dts = set([event.dt.date() for event in self.ticks])
# "Put back" a day if oldest is earlier in its day than newest,
# reflecting the fact that we haven't yet completed the last
# day in the window.
if oldest.time() > newest.time():
trading_days_between -= 1
return trading_days_between >= self.window_length
return len(unique_dts) > self.window_length
def out_of_delta(self, oldest, newest):
return (newest - oldest) >= self.delta