def start_shell(algorithm, algomodule): algomodule['context'] = algorithm algomodule['data'] = BarData(algorithm.data_portal, algorithm.data_frequency) algorithm.on_dt_changed(pd.Timestamp.utcnow().floor('1min')) algomodule['data'].datetime = algorithm.datetime InteractiveShellEmbed()('*** pylivetrader shell ***', local_ns=algomodule)
def __init__(self, algo, data_portal): self.data_portal = data_portal self.algo = algo # This object is the way that user algorithms interact with OHLCV data, # fetcher data, and some API methods like `data.can_trade`. self.current_data = BarData( data_portal, self.algo.data_frequency, ) before_trading_start_minute = \ (datetime.time(8, 45), 'America/New_York') self.clock = RealtimeClock( self.algo.trading_calendar, before_trading_start_minute, minute_emission=algo.data_frequency == 'minute', time_skew=self.algo._backend.time_skew, )
def test_bardata(): portal = get_fixture_data_portal() asset0 = portal.asset_finder.retrieve_asset('asset-0') asset1 = portal.asset_finder.retrieve_asset('asset-1') data = BarData(portal, 'minute') # current last_in_fields = { 'open': 780 + 10 - 1, 'high': 780 + 15 - 1, 'low': 780 + 8 - 1, 'close': 780 + 10 - 1, 'price': 780 + 10 - 1, 'volume': 100, } for k, v in last_in_fields.items(): assert data.current(asset0, k) == v o = data.current([asset0, asset1], k) assert len(o) == 2 assert type(o) == pd.Series o = data.current(asset0, ['open', 'close']) assert len(o) == 2 assert type(o) == pd.Series o = data.current([asset0, asset1], ['open', 'close']) assert set(list(o.columns)) == set(['open', 'close']) assert set(list(o.index)) == set([asset0, asset1]) # history day_values = { 'open': 2 + 10 - 1, 'high': 2 + 15 - 1, 'low': 2 + 8 - 1, 'close': 2 + 10 - 1, 'price': 2 + 10 - 1, 'volume': 100, } for k, v in last_in_fields.items(): assert data.history(asset0, k, 1, 'minute').iloc[0] == v assert data.history(asset0, k, 1, 'day').iloc[0] == day_values[k] o = data.history([asset0, asset1], 'open', 1, 'minute') assert type(o) == pd.DataFrame assert len(o.index) == 1 assert len(o.columns) == 2 o = data.history([asset0, asset1], ['open', 'close'], 1, 'minute') assert type(o) == pd.Panel # can_trade data.datetime = pd.Timestamp('2018-08-13', tz='UTC') asset_to_check = Asset( 'asset-0', 'NYSE', symbol='ASSET', start_date=pd.Timestamp('2018-01-01', tz='UTC'), end_date=pd.Timestamp('2018/08/13', tz='UTC'), ) assert data.can_trade(asset_to_check) assert not data.is_stale(asset_to_check) # data.datetime = pd.Timestamp('2018-08-14', tz='UTC') # assert not data.can_trade(asset_to_check) # when asset is not tradable, return false assert not data.is_stale(asset_to_check)