def update_dataframe(self): if self.symbol is None: return if self.data is None: self.data = AVTimeSeriesReader(symbols=self.symbol, function=self.function, api_key=self.API_KEY).read() else: last_timestamp = self.data.index[-1] new_data = AVTimeSeriesReader(symbols=self.symbol, start=last_timestamp, function=self.function, api_key=self.API_KEY).read() if len(new_data) > 0: frames = [self.data, new_data] self.data = pd.concat(frames).drop_duplicates()
def get_stock_data(symbol: str, start='1/1/1800', end='1/1/2100', function='TIME_SERIES_DAILY') -> pd.DataFrame: # Load key settings with open('config/keys.json') as f: keys = json.load(f) ts = AVTimeSeriesReader(symbols=symbol, start=start, end=end, function=function, api_key=keys['alpha_vantage_key']) df = pd.DataFrame(ts.read()) ts.close() df.index = pd.to_datetime(df.index) return df
def get_data_alphavantage(*args, **kwargs): return AVTimeSeriesReader(*args, **kwargs).read()
def DataReader( name, data_source=None, start=None, end=None, retry_count=3, pause=0.1, session=None, api_key=None, ): """ Imports data from a number of online sources. Currently supports Google Finance, St. Louis FED (FRED), and Kenneth French's data library, among others. Parameters ---------- name : str or list of strs the name of the dataset. Some data sources (IEX, fred) will accept a list of names. data_source: {str, None} the data source ("iex", "fred", "ff") start : {datetime, None} left boundary for range (defaults to 1/1/2010) end : {datetime, None} right boundary for range (defaults to today) retry_count : {int, 3} Number of times to retry query request. pause : {numeric, 0.001} Time, in seconds, to pause between consecutive queries of chunks. If single value given for symbol, represents the pause between retries. session : Session, default None requests.sessions.Session instance to be used api_key : (str, None) Optional parameter to specify an API key for certain data sources. Examples ---------- # Data from Google Finance aapl = DataReader("AAPL", "iex") # Price and volume data from IEX tops = DataReader(["GS", "AAPL"], "iex-tops") # Top of book executions from IEX gs = DataReader("GS", "iex-last") # Real-time depth of book data from IEX gs = DataReader("GS", "iex-book") # Data from FRED vix = DataReader("VIXCLS", "fred") # Data from Fama/French ff = DataReader("F-F_Research_Data_Factors", "famafrench") ff = DataReader("F-F_Research_Data_Factors_weekly", "famafrench") ff = DataReader("6_Portfolios_2x3", "famafrench") ff = DataReader("F-F_ST_Reversal_Factor", "famafrench") """ expected_source = [ "yahoo", "iex", "iex-tops", "iex-last", "iex-last", "bankofcanada", "stooq", "iex-book", "enigma", "fred", "famafrench", "oecd", "eurostat", "nasdaq", "quandl", "moex", "robinhood", "tiingo", "yahoo-actions", "yahoo-dividends", "av-forex", "av-daily", "av-daily-adjusted", "av-weekly", "av-weekly-adjusted", "av-monthly", "av-monthly-adjusted", "av-intraday", "econdb", ] if data_source not in expected_source: msg = "data_source=%r is not implemented" % data_source raise NotImplementedError(msg) if data_source == "yahoo": return YahooDailyReader( symbols=name, start=start, end=end, adjust_price=False, chunksize=25, retry_count=retry_count, pause=pause, session=session, ).read() elif data_source == "iex": return IEXDailyReader( symbols=name, start=start, end=end, chunksize=25, api_key=api_key, retry_count=retry_count, pause=pause, session=session, ).read() elif data_source == "iex-tops": return IEXTops( symbols=name, start=start, end=end, retry_count=retry_count, pause=pause, session=session, ).read() elif data_source == "iex-last": return IEXLasts( symbols=name, start=start, end=end, retry_count=retry_count, pause=pause, session=session, ).read() elif data_source == "bankofcanada": return BankOfCanadaReader( symbols=name, start=start, end=end, retry_count=retry_count, pause=pause, session=session, ).read() elif data_source == "stooq": return StooqDailyReader( symbols=name, chunksize=25, retry_count=retry_count, pause=pause, session=session, ).read() elif data_source == "iex-book": return IEXDeep( symbols=name, service="book", start=start, end=end, retry_count=retry_count, pause=pause, session=session, ).read() elif data_source == "enigma": return EnigmaReader(dataset_id=name, api_key=api_key).read() elif data_source == "fred": return FredReader( symbols=name, start=start, end=end, retry_count=retry_count, pause=pause, session=session, ).read() elif data_source == "famafrench": return FamaFrenchReader( symbols=name, start=start, end=end, retry_count=retry_count, pause=pause, session=session, ).read() elif data_source == "oecd": return OECDReader( symbols=name, start=start, end=end, retry_count=retry_count, pause=pause, session=session, ).read() elif data_source == "eurostat": return EurostatReader( symbols=name, start=start, end=end, retry_count=retry_count, pause=pause, session=session, ).read() elif data_source == "nasdaq": if name != "symbols": raise ValueError("Only the string 'symbols' is supported for " "Nasdaq, not %r" % (name, )) return get_nasdaq_symbols(retry_count=retry_count, pause=pause) elif data_source == "quandl": return QuandlReader( symbols=name, start=start, end=end, retry_count=retry_count, pause=pause, session=session, api_key=api_key, ).read() elif data_source == "moex": return MoexReader( symbols=name, start=start, end=end, retry_count=retry_count, pause=pause, session=session, ).read() elif data_source == "robinhood": return RobinhoodHistoricalReader( symbols=name, start=start, end=end, retry_count=retry_count, pause=pause, session=session, ).read() elif data_source == "tiingo": return TiingoDailyReader( symbols=name, start=start, end=end, retry_count=retry_count, pause=pause, session=session, api_key=api_key, ).read() elif data_source == "yahoo-actions": return YahooActionReader( symbols=name, start=start, end=end, retry_count=retry_count, pause=pause, session=session, ).read() elif data_source == "yahoo-dividends": return YahooDivReader( symbols=name, start=start, end=end, adjust_price=False, chunksize=25, retry_count=retry_count, pause=pause, session=session, interval="d", ).read() elif data_source == "av-forex": return AVForexReader( symbols=name, retry_count=retry_count, pause=pause, session=session, api_key=api_key, ).read() elif data_source == "av-daily": return AVTimeSeriesReader( symbols=name, function="TIME_SERIES_DAILY", start=start, end=end, retry_count=retry_count, pause=pause, session=session, api_key=api_key, ).read() elif data_source == "av-daily-adjusted": return AVTimeSeriesReader( symbols=name, function="TIME_SERIES_DAILY_ADJUSTED", start=start, end=end, retry_count=retry_count, pause=pause, session=session, api_key=api_key, ).read() elif data_source == "av-weekly": return AVTimeSeriesReader( symbols=name, function="TIME_SERIES_WEEKLY", start=start, end=end, retry_count=retry_count, pause=pause, session=session, api_key=api_key, ).read() elif data_source == "av-weekly-adjusted": return AVTimeSeriesReader( symbols=name, function="TIME_SERIES_WEEKLY_ADJUSTED", start=start, end=end, retry_count=retry_count, pause=pause, session=session, api_key=api_key, ).read() elif data_source == "av-monthly": return AVTimeSeriesReader( symbols=name, function="TIME_SERIES_MONTHLY", start=start, end=end, retry_count=retry_count, pause=pause, session=session, api_key=api_key, ).read() elif data_source == "av-monthly-adjusted": return AVTimeSeriesReader( symbols=name, function="TIME_SERIES_MONTHLY_ADJUSTED", start=start, end=end, retry_count=retry_count, pause=pause, session=session, api_key=api_key, ).read() elif data_source == "av-intraday": return AVTimeSeriesReader( symbols=name, function="TIME_SERIES_INTRADAY", start=start, end=end, retry_count=retry_count, pause=pause, session=session, api_key=api_key, ).read() elif data_source == "econdb": return EcondbReader( symbols=name, start=start, end=end, retry_count=retry_count, pause=pause, session=session, ).read() else: msg = "data_source=%r is not implemented" % data_source raise NotImplementedError(msg)