ENH: Make reader.get_value raise NoDataOnDate if the date is not in the calendar.

DataPortal now catches the NoDataOnDate exception and returns nan for
OHLC and 0 for V.

Price is still forward filled, unchanged.
This commit is contained in:
Jean Bredeche
2016-09-14 22:21:43 -04:00
parent 5e52d29e88
commit ae0d41af6f
8 changed files with 96 additions and 35 deletions
+16 -12
View File
@@ -35,6 +35,7 @@ from pandas import (
date_range,
)
from zipline.data.bar_reader import NoDataOnDate
from zipline.data.minute_bars import (
BcolzMinuteBarMetadata,
BcolzMinuteBarWriter,
@@ -854,18 +855,19 @@ class BcolzMinuteBarTestCase(WithTradingCalendars,
'open'),
780)
self.assertEqual(
with self.assertRaises(NoDataOnDate):
self.reader.get_value(
sid,
Timestamp('2015-06-02', tz='UTC'),
'open'),
390)
self.assertEqual(
'open'
)
with self.assertRaises(NoDataOnDate):
self.reader.get_value(
sid,
Timestamp('2015-06-02 20:01:00', tz='UTC'),
'open'),
780)
'open'
)
def test_adjust_non_trading_minutes_half_days(self):
# half day
@@ -908,18 +910,20 @@ class BcolzMinuteBarTestCase(WithTradingCalendars,
Timestamp('2015-11-27 18:01:00', tz='UTC'),
'open'),
210)
self.assertEqual(
with self.assertRaises(NoDataOnDate):
self.reader.get_value(
sid,
Timestamp('2015-11-30', tz='UTC'),
'open'),
210)
self.assertEqual(
'open'
)
with self.assertRaises(NoDataOnDate):
self.reader.get_value(
sid,
Timestamp('2015-11-30 21:01:00', tz='UTC'),
'open'),
600)
'open'
)
def test_set_sid_attrs(self):
"""Confirm that we can set the attributes of a sid's file correctly.
+7 -6
View File
@@ -21,6 +21,7 @@ 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_to_session,
DailyHistoryAggregator,
@@ -803,12 +804,12 @@ class TestReindexSessionBars(WithBcolzEquityDailyBarReader,
err_msg="The open of the fixture data on the "
"first session should be 10.")
tday = pd.Timestamp('2015-11-26', tz='UTC')
assert_almost_equal(self.reader.get_value(1, tday, 'close'), nan,
err_msg="Thanksgiving is a NYSE holiday, but "
"futures trading is open. Result should be nan.")
assert_almost_equal(self.reader.get_value(1, tday, 'volume'), 0,
err_msg="Thanksgiving is a NYSE holiday, but "
"futures trading is open. Result should be 0.")
with self.assertRaises(NoDataOnDate):
self.reader.get_value(1, tday, 'close')
with self.assertRaises(NoDataOnDate):
self.reader.get_value(1, tday, 'volume')
def test_last_availabe_dt(self):
self.assertEqual(self.reader.last_available_dt, self.END_DATE)