mirror of
https://github.com/wassname/catalyst.git
synced 2026-07-02 08:44:59 +08:00
Merge pull request #1747 from quantopian/calendar-perf-improvements
Improve TradingCalendar perf with scalar-optimized accesses
This commit is contained in:
@@ -452,8 +452,10 @@ class ExchangeCalendarTestBase(object):
|
||||
(2, 1),
|
||||
])
|
||||
def test_minute_index_to_session_labels(self, interval, offset):
|
||||
minutes = self.calendar.minutes_for_sessions_in_range('2011-01-04',
|
||||
'2011-04-04')
|
||||
minutes = self.calendar.minutes_for_sessions_in_range(
|
||||
pd.Timestamp('2011-01-04', tz='UTC'),
|
||||
pd.Timestamp('2011-04-04', tz='UTC'),
|
||||
)
|
||||
minutes = minutes[range(offset, len(minutes), interval)]
|
||||
|
||||
np.testing.assert_array_equal(
|
||||
|
||||
@@ -521,7 +521,7 @@ class MinuteResampleSessionBarReader(SessionBarReader):
|
||||
sessions = self._calendar.sessions_in_range(start_dt, end_dt)
|
||||
m_closes = np.zeros(len(sessions), dtype=np.dtype('datetime64[ns]'))
|
||||
for i, s in enumerate(sessions):
|
||||
close = self._calendar.open_and_close_for_session(s)[1]
|
||||
close = self._calendar.session_close(s)
|
||||
m_closes[i] = close.value
|
||||
m_locs = np.searchsorted(dts, m_closes)
|
||||
results = []
|
||||
|
||||
@@ -460,7 +460,10 @@ class TradingCalendar(with_metaclass(ABCMeta)):
|
||||
pd.DateTimeIndex
|
||||
All the minutes for the given session.
|
||||
"""
|
||||
return self.minutes_in_range(*self.schedule.loc[session_label])
|
||||
return self.minutes_in_range(
|
||||
start_minute=self.schedule.at[session_label, 'market_open'],
|
||||
end_minute=self.schedule.at[session_label, 'market_close'],
|
||||
)
|
||||
|
||||
def minutes_window(self, start_dt, count):
|
||||
start_dt_nanos = start_dt.value
|
||||
@@ -635,22 +638,24 @@ class TradingCalendar(with_metaclass(ABCMeta)):
|
||||
(Timestamp, Timestamp)
|
||||
The open and close for the given session.
|
||||
"""
|
||||
o_and_c = self.schedule.loc[session_label]
|
||||
sched = self.schedule
|
||||
|
||||
# `market_open` and `market_close` should be timezone aware, but pandas
|
||||
# 0.16.1 does not appear to support this:
|
||||
# http://pandas.pydata.org/pandas-docs/stable/whatsnew.html#datetime-with-tz # noqa
|
||||
return (o_and_c['market_open'].tz_localize('UTC'),
|
||||
o_and_c['market_close'].tz_localize('UTC'))
|
||||
return (
|
||||
sched.at[session_label, 'market_open'].tz_localize('UTC'),
|
||||
sched.at[session_label, 'market_close'].tz_localize('UTC'),
|
||||
)
|
||||
|
||||
def session_open(self, session_label):
|
||||
return self.schedule.loc[
|
||||
return self.schedule.at[
|
||||
session_label,
|
||||
'market_open'
|
||||
].tz_localize('UTC')
|
||||
|
||||
def session_close(self, session_label):
|
||||
return self.schedule.loc[
|
||||
return self.schedule.at[
|
||||
session_label,
|
||||
'market_close'
|
||||
].tz_localize('UTC')
|
||||
|
||||
Reference in New Issue
Block a user