mirror of
https://github.com/wassname/catalyst.git
synced 2026-06-29 17:35:15 +08:00
BUG: Getting continuous future current contract failed on None
This commit is contained in:
@@ -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)
|
||||
|
||||
@@ -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)
|
||||
|
||||
|
||||
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user