def getAssetDataAndSanitize(tickers, quote_currency): # tickers = ['SPY', 'GLD', 'TLT', 'HVI.TO', 'CTC.TO', 'TD', 'DBA', 'XOM', 'BBD-B.TO', 'BBRY', 'GBP', 'EUR'] # quote_currency = 'USD' ticker_data = [] for x in range(0, len(tickers)): try: df = pdr.data.get_data_yahoo(symbols=tickers[x], start=datetime.now().date() - timedelta(days=120), end=datetime.now().date(), interval='d') ticker_data.append(df) except: df = oanda.get_oanda_currency_historical_rates( datetime.now().date() - timedelta(days=120), datetime.now().date(), quote_currency=quote_currency, base_currency=tickers[x]) ticker_data.append(df) for x in range(0, len(ticker_data)): for y in range(0, len(ticker_data)): (ticker_data[x], ticker_data[y]) = ticker_data[x].align(ticker_data[y], join='inner', axis=0) return ticker_data
def test_oanda_currency_historical_rate(self): start = "2016-01-01" end = "2016-06-01" quote_currency = "USD" base_currency = None reversed = True df_rates = get_oanda_currency_historical_rates( start, end, quote_currency=quote_currency, base_currency=base_currency, reversed=reversed ) self.assertEqual(df_rates.index[0], pd.to_datetime("2016-01-01")) self.assertEqual(df_rates.index[-1], pd.to_datetime("2016-06-01"))
def test_oanda_currency_historical_rate(self): start = "2016-01-01" end = "2016-06-01" quote_currency = "USD" base_currency = None reversed = True df_rates = get_oanda_currency_historical_rates( start, end, quote_currency=quote_currency, base_currency=base_currency, reversed=reversed) self.assertEqual(df_rates.index[0], pd.to_datetime("2016-01-01")) self.assertEqual(df_rates.index[-1], pd.to_datetime("2016-06-01"))
def DataReader(name, data_source=None, start=None, end=None, retry_count=3, pause=0.001, session=None): """ Imports data from a number of online sources. Currently supports Yahoo! Finance, Google Finance, St. Louis FED (FRED), Kenneth French's data library, and the SEC's EDGAR Index. Parameters ---------- name : str or list of strs the name of the dataset. Some data sources (yahoo, google, fred) will accept a list of names. data_source: {str, None} the data source ("yahoo", "yahoo-actions", "yahoo-dividends", "google", "fred", "ff", or "edgar-index") 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 Examples ---------- # Data from Yahoo! Finance gs = DataReader("GS", "yahoo") # Corporate Actions (Dividend and Split Data) with ex-dates from Yahoo! Finance gs = DataReader("GS", "yahoo-actions") # Data from Google Finance aapl = DataReader("AAPL", "google") # 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") # Data from EDGAR index ed = DataReader("full", "edgar-index") ed2 = DataReader("daily", "edgar-index") """ 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 == "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 YahooDailyReader(symbols=name, start=start, end=end, adjust_price=False, chunksize=25, retry_count=retry_count, pause=pause, session=session, interval='v').read() elif data_source == "google": return GoogleDailyReader(symbols=name, start=start, end=end, chunksize=25, retry_count=retry_count, pause=pause, session=session).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 == "edgar-index": return EdgarIndexReader(symbols=name, start=start, end=end, retry_count=retry_count, pause=pause, session=session).read() elif data_source == "oanda": return get_oanda_currency_historical_rates(start, end, quote_currency="USD", base_currency=name, reversed=True, session=session) else: msg = "data_source=%r is not implemented" % data_source raise NotImplementedError(msg)
from pandas_datareader.oanda import get_oanda_currency_historical_rates start, end = "2016-01-01", "2016-06-01" quote_currency = "USD" base_currency = ["EUR", "GBP", "JPY"] df_rates = get_oanda_currency_historical_rates(start, end, quote_currency=quote_currency, base_currency=base_currency) print(df_rates)
def DataReader(name, data_source=None, start=None, end=None, retry_count=3, pause=0.001, session=None): """ Imports data from a number of online sources. Currently supports Yahoo! Finance, Google Finance, St. Louis FED (FRED), Kenneth French's data library, and the SEC's EDGAR Index. Parameters ---------- name : str or list of strs the name of the dataset. Some data sources (yahoo, google, fred) will accept a list of names. data_source: {str, None} the data source ("yahoo", "yahoo-actions", "yahoo-dividends", "google", "fred", "ff", or "edgar-index") 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 Examples ---------- # Data from Yahoo! Finance gs = DataReader("GS", "yahoo") # Corporate Actions (Dividend and Split Data) with ex-dates from Yahoo! Finance gs = DataReader("GS", "yahoo-actions") # Data from Google Finance aapl = DataReader("AAPL", "google") # 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") # Data from EDGAR index ed = DataReader("full", "edgar-index") ed2 = DataReader("daily", "edgar-index") """ 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 == "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 YahooDailyReader(symbols=name, start=start, end=end, adjust_price=False, chunksize=25, retry_count=retry_count, pause=pause, session=session, interval='v').read() elif data_source == "google": return GoogleDailyReader(symbols=name, start=start, end=end, chunksize=25, retry_count=retry_count, pause=pause, session=session).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 == "edgar-index": return EdgarIndexReader(symbols=name, start=start, end=end, retry_count=retry_count, pause=pause, session=session).read() elif data_source == "oanda": return get_oanda_currency_historical_rates( start, end, quote_currency="USD", base_currency=name, reversed=True, session=session ) else: msg = "data_source=%r is not implemented" % data_source raise NotImplementedError(msg)