BUG: Fixes bcolz padding to not always pad 390 minutes

If minutes already exist for the last existing day, adjust the number of
minutes padded to account for them. Previously we would always pad 390,
leading to a mismatch in the number of rows.
This commit is contained in:
Andrew Daniels
2016-05-25 14:24:39 -04:00
parent d0890085bd
commit f1cfe1f2db
2 changed files with 18 additions and 2 deletions
+12 -1
View File
@@ -475,7 +475,9 @@ class BcolzMinuteBarTestCase(TestCase):
self.assertEqual(last_date, TEST_CALENDAR_START)
freq = self.market_opens.index.freq
minute = self.market_opens[TEST_CALENDAR_START + freq]
day = TEST_CALENDAR_START + freq
minute = self.market_opens[day]
data = DataFrame(
data={
'open': [15.0],
@@ -507,6 +509,15 @@ class BcolzMinuteBarTestCase(TestCase):
self.assertEquals(100.0, volume_price)
# Check that if we then pad the rest of this day, we end up with
# 2 days worth of minutes.
self.writer.pad(sid, day)
self.assertEqual(
len(self.writer._ensure_ctable(sid)),
self.writer._minutes_per_day * 2,
)
def test_nans(self):
"""
Test writing empty data.
+6 -1
View File
@@ -393,7 +393,12 @@ class BcolzMinuteBarWriter(object):
return bcolz.ctable(rootdir=sidpath, mode='a')
def _zerofill(self, table, numdays):
num_to_prepend = numdays * self._minutes_per_day
# Compute the number of minutes to be filled, accounting for the
# possibility of a partial day's worth of minutes existing for
# the previous day.
minute_offset = len(table) % self._minutes_per_day
num_to_prepend = numdays * self._minutes_per_day - minute_offset
prepend_array = np.zeros(num_to_prepend, np.uint32)
# Fill all OHLCV with zeros.
table.append([prepend_array] * 5)