def get_history( self, tickers: Union[CcyTicker, Sequence[CcyTicker]], fields: Union[None, str, Sequence[str]] = None, start_date: datetime = None, end_date: datetime = None, **kwargs) \ -> Union[QFSeries, QFDataFrame, QFDataArray]: tickers, got_single_ticker = convert_to_list(tickers, CcyTicker) got_single_date = start_date is not None and (start_date == end_date) if fields is not None: fields, got_single_field = convert_to_list(fields, (PriceField, str)) else: got_single_field = False # all existing fields will be present in the result tickers_data_dict = {} with Session() as session: for ticker in tickers: single_ticker_data = self._get_single_ticker( ticker, fields, start_date, end_date, session) tickers_data_dict[ticker] = single_ticker_data if fields is None: fields = get_fields_from_tickers_data_dict(tickers_data_dict) result_data_array = tickers_dict_to_data_array(tickers_data_dict, tickers, fields) result = normalize_data_array(result_data_array, tickers, fields, got_single_date, got_single_ticker, got_single_field) return result
def _get_history( self, convert_to_prices_types: bool, tickers: Union[QuandlTicker, Sequence[QuandlTicker]], fields: Union[None, str, Sequence[str], PriceField, Sequence[PriceField]] = None, start_date: datetime = None, end_date: datetime = None) -> \ Union[QFSeries, QFDataFrame, QFDataArray]: """ NOTE: Only use one Quandl Database at the time. Do not mix multiple databases in one query - this is the natural limitation coming from the fact that column names (fields) are different across databases. """ tickers, got_single_ticker = convert_to_list(tickers, QuandlTicker) got_single_date = start_date is not None and (start_date == end_date) if fields is not None: fields, got_single_field = convert_to_list(fields, (PriceField, str)) else: got_single_field = False # all existing fields will be present in the result result_dict = {} for db_name, ticker_group in groupby(tickers, lambda t: t.database_name): ticker_group = list(ticker_group) partial_result_dict = self._get_result_for_single_database( convert_to_prices_types, ticker_group, fields, start_date, end_date) result_dict.update(partial_result_dict) if fields is None: fields = get_fields_from_tickers_data_dict(result_dict) result_data_array = tickers_dict_to_data_array(result_dict, tickers, fields) normalized_result = normalize_data_array( result_data_array, tickers, fields, got_single_date, got_single_ticker, got_single_field, use_prices_types=convert_to_prices_types) return normalized_result