BUG: Getting continuous future current contract failed on None

This commit is contained in:
dmichalowicz
2017-03-29 16:48:20 -04:00
parent 0bcdb640ca
commit 69a0e5c31b
3 changed files with 23 additions and 6 deletions
+10
View File
@@ -467,6 +467,16 @@ class ContinuousFuturesTestCase(WithCreateBarData,
'Auto close at beginning of session so FOG16 is now '
'the current contract.')
# Test that the current contract outside of the continuous future's
# start and end dates is None.
contract = self.data_portal.get_spot_value(
cf_primary,
'contract',
self.START_DATE - self.trading_calendar.day,
'daily',
)
self.assertIsNone(contract)
def test_get_value_close_daily(self):
cf_primary = self.asset_finder.create_continuous_future(
'FO', 0, 'calendar', None)
+5
View File
@@ -1,4 +1,5 @@
import numpy as np
import pandas as pd
from zipline.data.session_bars import SessionBarReader
@@ -162,6 +163,8 @@ class ContinuousFutureSessionBarReader(SessionBarReader):
sid = (rf.get_contract_center(asset.root_symbol,
dt,
asset.offset))
if sid is None:
return pd.NaT
contract = rf.asset_finder.retrieve_asset(sid)
return self._bar_reader.get_last_traded_dt(contract, dt)
@@ -346,6 +349,8 @@ class ContinuousFutureMinuteBarReader(SessionBarReader):
sid = (rf.get_contract_center(asset.root_symbol,
dt,
asset.offset))
if sid is None:
return pd.NaT
contract = rf.asset_finder.retrieve_asset(sid)
return self._bar_reader.get_last_traded_dt(contract, dt)
+8 -6
View File
@@ -500,10 +500,10 @@ class DataPortal(object):
session_label > asset.end_date):
if field == "volume":
return 0
elif field != "last_traded":
return np.NaN
elif field == "contract":
return None
elif field != "last_traded":
return np.NaN
if data_frequency == "daily":
if field == "contract":
@@ -1368,7 +1368,9 @@ class DataPortal(object):
def _get_current_contract(self, continuous_future, dt):
rf = self._roll_finders[continuous_future.roll_style]
return self.asset_finder.retrieve_asset(
rf.get_contract_center(continuous_future.root_symbol,
dt,
continuous_future.offset))
contract_sid = rf.get_contract_center(continuous_future.root_symbol,
dt,
continuous_future.offset)
if contract_sid is None:
return None
return self.asset_finder.retrieve_asset(contract_sid)