diff --git a/zipline/data/data_portal.py b/zipline/data/data_portal.py index c2efafd5..a6dcd093 100644 --- a/zipline/data/data_portal.py +++ b/zipline/data/data_portal.py @@ -1129,10 +1129,11 @@ class DataPortal(object): previous_session, ) - minutes_count = sum( - len(self.trading_calendar.minutes_for_session(session)) - for session in sessions - ) + minutes_count = \ + self.trading_calendar.minutes_count_for_sessions_in_range( + sessions[0], + sessions[-1] + ) # add the minutes for today today_open = self.trading_calendar.open_and_close_for_session( diff --git a/zipline/utils/calendars/trading_calendar.py b/zipline/utils/calendars/trading_calendar.py index 1d0f6fdf..01a5bf1b 100644 --- a/zipline/utils/calendars/trading_calendar.py +++ b/zipline/utils/calendars/trading_calendar.py @@ -149,6 +149,29 @@ class TradingCalendar(with_metaclass(ABCMeta)): def close_offset(self): return 0 + @lazyval + def _minutes_per_session(self): + diff = self.schedule.market_close - self.schedule.market_open + diff = diff.astype('timedelta64[m]') + return diff + 1 + + def minutes_count_for_sessions_in_range(self, start_session, end_session): + """ + Parameters + ---------- + start_session: pd.Timestamp + The first session. + + end_session: pd.Timestamp + The last session. + + Returns + ------- + int: The total number of minutes for the contiguous chunk of sessions. + between start_session and end_session, inclusive. + """ + return int(self._minutes_per_session[start_session:end_session].sum()) + @property def regular_holidays(self): """