Example #1
0
    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)
Example #2
0
    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
            )
Example #3
0
    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)
Example #4
0
    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
Example #5
0
    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