mirror of
https://github.com/wassname/catalyst.git
synced 2026-07-03 12:34:52 +08:00
MAINT: Modify ReindexBarReader.get_value to handle missing data
Instead of raising an exception, return 0.0 for volume, and nan for everything else.
This commit is contained in:
@@ -16,12 +16,11 @@ from numbers import Real
|
||||
|
||||
from nose_parameterized import parameterized
|
||||
from numpy.testing import assert_almost_equal
|
||||
from numpy import nan, array, full
|
||||
from numpy import nan, array, full, isnan
|
||||
import pandas as pd
|
||||
from pandas import DataFrame
|
||||
from six import iteritems
|
||||
|
||||
from zipline.data.bar_reader import NoDataOnDate
|
||||
from zipline.data.resample import (
|
||||
minute_frame_to_session_frame,
|
||||
DailyHistoryAggregator,
|
||||
@@ -863,11 +862,9 @@ class TestReindexSessionBars(WithBcolzEquityDailyBarReader,
|
||||
"first session should be 10.")
|
||||
tday = pd.Timestamp('2015-11-26', tz='UTC')
|
||||
|
||||
with self.assertRaises(NoDataOnDate):
|
||||
self.reader.get_value(1, tday, 'close')
|
||||
self.assertTrue(isnan(self.reader.get_value(1, tday, 'close')))
|
||||
|
||||
with self.assertRaises(NoDataOnDate):
|
||||
self.reader.get_value(1, tday, 'volume')
|
||||
self.assertEqual(self.reader.get_value(1, tday, 'volume'), 0)
|
||||
|
||||
def test_last_availabe_dt(self):
|
||||
self.assertEqual(self.reader.last_available_dt, self.END_DATE)
|
||||
|
||||
@@ -25,6 +25,7 @@ from zipline.data._resample import (
|
||||
_minute_to_session_close,
|
||||
_minute_to_session_volume,
|
||||
)
|
||||
from zipline.data.bar_reader import NoDataOnDate
|
||||
from zipline.data.minute_bars import MinuteBarReader
|
||||
from zipline.data.session_bars import SessionBarReader
|
||||
from zipline.utils.memoize import lazyval
|
||||
@@ -606,10 +607,6 @@ class ReindexBarReader(with_metaclass(ABCMeta)):
|
||||
Currently only supports a ``trading_calendar`` which is a superset of the
|
||||
``reader``'s calendar.
|
||||
|
||||
Also, the currenty implementation only reindexes the results from
|
||||
``load_raw_arrays``, but in the future, `get_value` may also be made to
|
||||
provide an empty result instead of raising on error.
|
||||
|
||||
Parameters
|
||||
----------
|
||||
|
||||
@@ -652,7 +649,14 @@ class ReindexBarReader(with_metaclass(ABCMeta)):
|
||||
return self._reader.first_trading_day
|
||||
|
||||
def get_value(self, sid, dt, field):
|
||||
return self._reader.get_value(sid, dt, field)
|
||||
# Give an empty result if no data is present.
|
||||
try:
|
||||
return self._reader.get_value(sid, dt, field)
|
||||
except NoDataOnDate:
|
||||
if field == 'volume':
|
||||
return 0
|
||||
else:
|
||||
return np.nan
|
||||
|
||||
@abstractmethod
|
||||
def _outer_dts(self, start_dt, end_dt):
|
||||
|
||||
Reference in New Issue
Block a user