diff --git a/zipline/transforms/batch_transform.py b/zipline/transforms/batch_transform.py index 7d5f9d6b..40b7074b 100644 --- a/zipline/transforms/batch_transform.py +++ b/zipline/transforms/batch_transform.py @@ -32,14 +32,9 @@ from six import ( iteritems ) +from zipline.utils.algo_instance import get_algo_instance from zipline.utils.data import MutableIndexRollingPanel from zipline.protocol import Event -from zipline.finance.trading import TradingEnvironment - -# HACK the BatchTransform module stores a trading environment to be used by -# the transforms -# TODO remove this hack, if not this whole module -_batch_transform_env = TradingEnvironment() log = logbook.Logger('BatchTransform') func_map = {'open_price': 'first', @@ -71,8 +66,9 @@ def downsample_panel(minute_rp, daily_rp, mkt_close): cur_panel = minute_rp.get_current() sids = minute_rp.minor_axis day_frame = pd.DataFrame(columns=sids, index=cur_panel.items) - dt1 = _batch_transform_env.normalize_date(mkt_close) - dt2 = _batch_transform_env.next_trading_day(mkt_close) + env = get_algo_instance().trading_environment + dt1 = env.normalize_date(mkt_close) + dt2 = env.next_trading_day(mkt_close) by_close = functools.partial(get_date, mkt_close, dt1, dt2) for item in minute_rp.items: frame = cur_panel[item] @@ -337,11 +333,12 @@ class BatchTransform(object): # we may get events from non-trading sources which occurr on # non-trading days. The book-keeping for market close and # trading day counting should only consider trading days. - if _batch_transform_env.is_trading_day(event.dt): - _, mkt_close = _batch_transform_env.get_open_and_close(event.dt) + env = get_algo_instance().trading_environment + if env.is_trading_day(event.dt): + _, mkt_close = env.get_open_and_close(event.dt) if self.bars == 'daily': # Daily bars have their dt set to midnight. - mkt_close = _batch_transform_env.normalize_date(mkt_close) + mkt_close = env.normalize_date(mkt_close) if event.dt == mkt_close: if self.downsample: downsample_panel(self.rolling_panel,