def main(): symbols = ['AAPL', 'MSFT', 'BRK-A'] # Specifically chosen to include the AAPL split on June 9, 2014. for symbol in symbols: data = DataReader( symbol, 'yahoo', start='2014-03-01', end='2014-09-01', ) data.rename( columns={ 'Open': 'open', 'High': 'high', 'Low': 'low', 'Close': 'close', 'Volume': 'volume', }, inplace=True, ) del data['Adj Close'] dest = join(here, symbol + '.csv') print("Writing %s -> %s" % (symbol, dest)) data.to_csv(dest, index_label='day')
def main(): symbols = ["AAPL", "MSFT", "BRK-A"] # Specifically chosen to include the AAPL split on June 9, 2014. for symbol in symbols: data = DataReader( symbol, "yahoo", start="2014-03-01", end="2014-09-01", ) data.rename( columns={ "Open": "open", "High": "high", "Low": "low", "Close": "close", "Volume": "volume", }, inplace=True, ) del data["Adj Close"] dest = join(here, symbol + ".csv") print("Writing %s -> %s" % (symbol, dest)) data.to_csv(dest, index_label="day")
def get(self, symbol, asset_type=None, **kwargs): """ Get the latest data for the specified symbol """ if not asset_type: logger.error("No asset_type argument set") raise Exception("asset_type must be set") if asset_type == "F": symbol = symbol.replace("/", "") + "=X" try: df = DataReader(symbol, "yahoo", start="1950-01-01", **kwargs) except (RemoteDataError, KeyError): logger.error(f"Symbol {symbol} not found") raise SymbolNotFound(symbol) df = (df.rename( columns={ "Open": "open", "High": "high", "Low": "low", "Close": "close", "Volume": "volume", "Adj Close": "adj_close" }).sort_index()) df = (df[["adj_close"]].rename({"adj_close": "close"}, axis=1)) return df
def yahoo_prices(symbols, start_date, verbose = True): ticker_df_list = [] start_dates = {}; for index, row in symbols.iterrows(): try: data = DataReader(row.Ticker, 'yahoo', start_date) data['Ref'] = row.Ticker data = data.loc[:, ['Ref', 'Adj Close']] data.rename(columns={'Adj Close': 'Price'}, inplace=True) if verbose: print("{}: Historical Perf: {}".format(row.Ticker, data.tail(1).iloc[0]['Price']/data.head(1).iloc[0]['Price']-1)) ticker_df_list.append(data) start_dates[row.Ticker] = data.head(1).index[0] except Exception as e: if verbose: print("No data for ticker %s\n%s" % (row.Ticker, str(e))) df = pd.concat(ticker_df_list) cell= df[['Ref','Price']] return cell.pivot(columns='Ref'), start_dates
def get_adtv(symbols, startdate, enddate): """Returns pricing/volume table field timeseries fields used 'Close', 'Volume' """ if type(symbols) == str: symbols = [symbols] data = [] for symbol in symbols: try: df = DataReader(symbol, 'yahoo', startdate, enddate)[['Close', 'Volume']] df['adtv'] = df['Close'] * df['Volume'] df.rename(columns={'adtv': symbol}, inplace=True) df = df[symbol] except: df = pd.DataFrame(np.nan, index=pd.bdate_range(startdate, enddate), columns=[symbol]) data.append(df) df = pd.concat(data, axis=1) df = pd.DataFrame(df.apply(np.mean, axis=0), columns=['adtv']) df['Ticker'] = df.index return df.reset_index(drop=True)
def download_stock(symbol, start_date=dt.datetime(1990, 1, 1)): # Download assets. stock = DataReader(symbol, "yahoo", start_date) stock.rename(columns={"Adj Close": "Adj. Close"}, inplace=True) # Compute the adjusted prices. ratio = stock["Adj. Close"] / stock["Close"] stock["Adj. Open"] = stock["Open"] * ratio stock["Adj. High"] = stock["High"] * ratio stock["Adj. Low"] = stock["Low"] * ratio stock["Adj. Volume"] = stock["Volume"] * ratio stock["Split Ratio"] = 1.0 stock["Ex-Dividend"] = 0.0 # Fetch the dividends and splits for this stock. Notice that we restrict the # dates to lie in the appropriate range. ds = download_splits_dividends(symbol) # Store dividend data. if "DIVIDEND" in ds.index: divs = ds.ix[["DIVIDEND"]].set_index("datetime") idx = divs.index.intersection(stock.index) stock.ix[idx, "Ex-Dividend"] = [ float(x) for x in divs.ix[idx, "adjustment"] ] # Store stock split data. if "SPLIT" in ds.index: splits = ds.ix[["SPLIT"]].set_index("datetime") splits["adjustment"] = [ float(x.split(":")[0]) / float(x.split(":")[1]) for x in splits["adjustment"] ] idx = splits.index.intersection(stock.index) stock.ix[idx, "Split Ratio"] = splits.ix[idx, "adjustment"] return stock
import pandas as pd import matplotlib.pyplot as plt from pandas_datareader.data import DataReader from datetime import date start = date(1900,1,1) # default Jan 1, 2010 series_code = 'DGS10' # 10-year Treasury Rate data_source = 'fred' # FED Economic Data Service data = DataReader(series_code, data_source, start) data.info() pd.concat([data.head(3), data.tail(3)]) series_name = '10-year Treasury' data = data.rename(columns={series_code: series_name}) data.plot(title=series_name) plt.show()
#companies = pdconn.read_table('companies') #cursor = pdconn.execute('select ticker from company c left join industry i on c.industry = i.industry where sector = "Healthcare"') cursor = pdconn.execute('select ticker from company') companies = cursor.fetchall() start_date = '1985-01-01' #start_date = '2016-01-01' end_date = '2016-05-10' #companies is a list of tuples for co in companies: co = co[0] if co in done: continue done.append(co) print("Fetching data for " + co) #fetch data from yahoo as pandas dataframe try: ts = DataReader(co, 'yahoo', start=start_date, end=end_date) except: print('Could not read data for ' + co) continue ts.rename(columns={'Adj Close': 'AdjClose'}, inplace=True) # AdjClose values sometimes get extremely large, causing out of bounds errors. Limit those values here. if max(ts['AdjClose']) > 9.99e5: ts.loc[ts.AdjClose > 9.99e5, 'AdjClose'] = 9.99e5 ts.insert(0, 'ticker', co) #add ticker to dataframe ts = ts.round(decimals=2) pdconn.to_sql(ts, 'histPrice', if_exists='append') time.sleep(random.randint(1, 5))