def get_spot_values(self, assets, field, dt, data_frequency, reset_reader=False): values = [] try: reader = self.get_reader(data_frequency) if reset_reader: del self._readers[reader._rootdir] reader = self.get_reader(data_frequency) for asset in assets: value = reader.get_value(sid=asset.sid, dt=dt, field=field) values.append(value) return values except Exception: symbols = [asset.symbol.encode('utf-8') for asset in assets] raise PricingDataNotLoadedError( field=field, first_trading_day=min([asset.start_date for asset in assets]), exchange=self.exchange.name, symbols=symbols, symbol_list=','.join(symbols), data_frequency=data_frequency)
def get_spot_values(self, assets, field, dt, data_frequency, reset_reader=False ): """ The spot values for the gives assets, field and date. Reads from the exchange data bundle. Parameters ---------- assets: list[TradingPair] field: str dt: pd.Timestamp data_frequency: str reset_reader: Returns ------- float """ values = [] try: reader = self.get_reader(data_frequency) if reset_reader: del self._readers[reader._rootdir] reader = self.get_reader(data_frequency) for asset in assets: value = reader.get_value( sid=asset.sid, dt=dt, field=field ) values.append(value) return values except Exception: symbols = [asset.symbol for asset in assets] raise PricingDataNotLoadedError( field=field, first_trading_day=min([asset.start_date for asset in assets]), exchange=self.exchange_name, symbols=symbols, symbol_list=','.join(symbols), data_frequency=data_frequency, start_dt=dt, end_dt=dt )
def get_spot_values(self, assets, field, dt, data_frequency, reset_reader=False): """ The spot values for the gives assets, field and date. Reads from the exchange data bundle. :param assets: :param field: :param dt: :param data_frequency: :param reset_reader: :return: """ values = [] try: reader = self.get_reader(data_frequency) if reset_reader: del self._readers[reader._rootdir] reader = self.get_reader(data_frequency) for asset in assets: value = reader.get_value(sid=asset.sid, dt=dt, field=field) values.append(value) return values except Exception: symbols = [asset.symbol for asset in assets] raise PricingDataNotLoadedError( field=field, first_trading_day=min([asset.start_date for asset in assets]), exchange=self.exchange.name, symbols=symbols, symbol_list=','.join(symbols), data_frequency=data_frequency)
def get_history_window_series(self, assets, end_dt, bar_count, field, data_frequency, trailing_bar_count=None, reset_reader=False): start_dt = get_start_dt(end_dt, bar_count, data_frequency, False) start_dt, _ = self.get_adj_dates(start_dt, end_dt, assets, data_frequency) if trailing_bar_count: delta = get_delta(trailing_bar_count, data_frequency) end_dt += delta # This is an attempt to resolve some caching with the reader # when auto-ingesting data. # TODO: needs more work reader = self.get_reader(data_frequency) if reset_reader: del self._readers[reader._rootdir] reader = self.get_reader(data_frequency) if reader is None: symbols = [asset.symbol for asset in assets] raise PricingDataNotLoadedError( field=field, first_trading_day=min([asset.start_date for asset in assets]), exchange=self.exchange_name, symbols=symbols, symbol_list=','.join(symbols), data_frequency=data_frequency, start_dt=start_dt, end_dt=end_dt) series = dict() for asset in assets: asset_start_dt, _ = self.get_adj_dates(start_dt, end_dt, assets, data_frequency) in_bundle = range_in_bundle(asset, asset_start_dt, end_dt, reader) if not in_bundle: raise PricingDataNotLoadedError( field=field, first_trading_day=asset.start_date, exchange=self.exchange_name, symbols=asset.symbol, symbol_list=asset.symbol, data_frequency=data_frequency, start_dt=asset_start_dt, end_dt=end_dt) periods = self.get_calendar_periods_range(asset_start_dt, end_dt, data_frequency) # This does not behave well when requesting multiple assets # when the start or end date of one asset is outside of the range # looking at the logic in load_raw_arrays(), we are not achieving # any performance gain by requesting multiple sids at once. It's # looping through the sids and making separate requests anyway. arrays = reader.load_raw_arrays(sids=[asset.sid], fields=[field], start_dt=start_dt, end_dt=end_dt) if len(arrays) == 0: raise DataCorruptionError(exchange=self.exchange_name, symbols=asset.symbol, start_dt=asset_start_dt, end_dt=end_dt) field_values = arrays[0][:, 0] try: value_series = pd.Series(field_values, index=periods) series[asset] = value_series except ValueError as e: raise PricingDataValueError(exchange=asset.exchange, symbol=asset.symbol, start_dt=asset_start_dt, end_dt=end_dt, error=e) return series
def get_history_window_series(self, assets, end_dt, bar_count, field, data_frequency, reset_reader=False): start_dt = get_start_dt(end_dt, bar_count, data_frequency, False) start_dt, end_dt = self.get_adj_dates(start_dt, end_dt, assets, data_frequency) reader = self.get_reader(data_frequency) if reset_reader: del self._readers[reader._rootdir] reader = self.get_reader(data_frequency) if reader is None: symbols = [asset.symbol for asset in assets] raise PricingDataNotLoadedError( field=field, first_trading_day=min([asset.start_date for asset in assets]), exchange=self.exchange.name, symbols=symbols, symbol_list=','.join(symbols), data_frequency=data_frequency, start_dt=start_dt, end_dt=end_dt) for asset in assets: asset_start_dt, asset_end_dt = self.get_adj_dates( start_dt, end_dt, assets, data_frequency) in_bundle = range_in_bundle(asset, asset_start_dt, asset_end_dt, reader) if not in_bundle: raise PricingDataNotLoadedError( field=field, first_trading_day=asset.start_date, exchange=self.exchange.name, symbols=asset.symbol, symbol_list=asset.symbol, data_frequency=data_frequency, start_dt=asset_start_dt, end_dt=asset_end_dt) series = dict() try: arrays = reader.load_raw_arrays( sids=[asset.sid for asset in assets], fields=[field], start_dt=start_dt, end_dt=end_dt) except Exception: symbols = [asset.symbol.encode('utf-8') for asset in assets] raise PricingDataNotLoadedError( field=field, first_trading_day=min([asset.start_date for asset in assets]), exchange=self.exchange.name, symbols=symbols, symbol_list=','.join(symbols), data_frequency=data_frequency, start_dt=start_dt, end_dt=end_dt) periods = self.get_calendar_periods_range(start_dt, end_dt, data_frequency) for asset_index, asset in enumerate(assets): asset_values = arrays[asset_index] value_series = pd.Series(asset_values.flatten(), index=periods) series[asset] = value_series return series