diff --git a/tests/test_continuous_futures.py b/tests/test_continuous_futures.py index 4a2c46f2..c00fef85 100644 --- a/tests/test_continuous_futures.py +++ b/tests/test_continuous_futures.py @@ -32,6 +32,7 @@ from zipline.assets.continuous_futures import OrderedContracts from zipline.data.minute_bars import FUTURES_MINUTES_PER_DAY from zipline.testing.fixtures import ( WithCreateBarData, + WithDataPortal, WithBcolzFutureMinuteBarReader, WithSimParams, ZiplineTestCase, @@ -39,6 +40,7 @@ from zipline.testing.fixtures import ( class ContinuousFuturesTestCase(WithCreateBarData, + WithDataPortal, WithSimParams, WithBcolzFutureMinuteBarReader, ZiplineTestCase): @@ -220,10 +222,29 @@ class ContinuousFuturesTestCase(WithCreateBarData, 'Auto close at beginning of session so FOG16 is now ' 'the current contract.') - bar_data = self.create_bardata( - lambda: pd.Timestamp('2016-01-27', tz='UTC')) - contract = bar_data.current(cf_primary, 'contract') - self.assertEqual(contract.symbol, 'FOG16') + def test_get_spot_value_contract_daily(self): + cf_primary = self.asset_finder.create_continuous_future( + 'FO', 0, 'calendar') + + contract = self.data_portal.get_spot_value( + cf_primary, + 'contract', + pd.Timestamp('2016-01-26', tz='UTC'), + 'daily', + ) + + self.assertEqual(contract.symbol, 'FOF16') + + contract = self.data_portal.get_spot_value( + cf_primary, + 'contract', + pd.Timestamp('2016-01-27', tz='UTC'), + 'daily', + ) + + self.assertEqual(contract.symbol, 'FOG16', + 'Auto close at beginning of session so FOG16 is now ' + 'the current contract.') def test_current_contract_volume_roll(self): cf_primary = self.asset_finder.create_continuous_future( diff --git a/zipline/data/data_portal.py b/zipline/data/data_portal.py index 566b97fa..1b688481 100644 --- a/zipline/data/data_portal.py +++ b/zipline/data/data_portal.py @@ -464,7 +464,10 @@ class DataPortal(object): return None if data_frequency == "daily": - return self._get_daily_spot_value(asset, field, session_label) + if field == "contract": + return self._get_current_contract(asset, session_label) + else: + return self._get_daily_spot_value(asset, field, session_label) else: if field == "last_traded": return self.get_last_traded_dt(asset, dt, 'minute')