Пример #1
0
    def __init__(self,
                 asset_finder,
                 trading_calendar,
                 first_trading_day,
                 equity_daily_reader=None,
                 equity_minute_reader=None,
                 future_daily_reader=None,
                 future_minute_reader=None,
                 adjustment_reader=None):

        self.trading_calendar = trading_calendar
        self.asset_finder = asset_finder

        self.views = {}

        self._carrays = {
            'open': {},
            'high': {},
            'low': {},
            'close': {},
            'volume': {},
            'sid': {},
        }

        self._adjustment_reader = adjustment_reader

        # caches of sid -> adjustment list
        self._splits_dict = {}
        self._mergers_dict = {}
        self._dividends_dict = {}

        # Cache of sid -> the first trading day of an asset.
        self._asset_start_dates = {}
        self._asset_end_dates = {}

        # Handle extra sources, like Fetcher.
        self._augmented_sources_map = {}
        self._extra_source_df = None

        self._equity_daily_reader = equity_daily_reader
        if self._equity_daily_reader is not None:
            self._equity_history_loader = USEquityDailyHistoryLoader(
                self.trading_calendar,
                self._equity_daily_reader,
                self._adjustment_reader
            )
        self._equity_minute_reader = equity_minute_reader
        self._future_daily_reader = future_daily_reader
        self._future_minute_reader = future_minute_reader

        self._pricing_readers = {
            Equity: {
                'minute': equity_minute_reader,
                'daily': equity_daily_reader,
            },
            Future: {
                'minute': future_minute_reader,
                'daily': future_daily_reader
            }
        }

        if self._equity_minute_reader is not None:
            self._equity_daily_aggregator = DailyHistoryAggregator(
                self.trading_calendar.schedule.market_open,
                self._equity_minute_reader,
                self.trading_calendar
            )
            self._equity_minute_history_loader = USEquityMinuteHistoryLoader(
                self.trading_calendar,
                self._equity_minute_reader,
                self._adjustment_reader
            )

        self._first_trading_day = first_trading_day

        # Get the first trading minute
        self._first_trading_minute, _ = (
            self.trading_calendar.open_and_close_for_session(
                self._first_trading_day
            )
            if self._first_trading_day is not None else (None, None)
        )

        # Store the locs of the first day and first minute
        self._first_trading_day_loc = (
            self.trading_calendar.all_sessions.get_loc(self._first_trading_day)
            if self._first_trading_day is not None else None
        )
        self._first_trading_minute_loc = (
            self.trading_calendar.all_minutes.get_loc(
                self._first_trading_minute
            )
            if self._first_trading_minute is not None else None
        )