def _update_eod_data(tick_sym, folder): loc_data = folder.retrieve(tick_sym) if loc_data is not None: last_updt_dt = loc_data.tail(1)[0, 'Date'].to_datetime() start_dt = last_updt_dt.fromordinal(last_updt_dt.toordinal()-5) # to take care of Fri / Mon holidays loc_data_new = yahoo.get_yahoo_eod_data(tick_sym, start_date=start_dt) x = sorted(list(set(loc_data['Date']).intersection(set(loc_data_new['Date'])))) # refresh common history # - in the case of splits re-download the whole yahoo data?? loc_data_old = loc_data.subset(loc_data['Date'].map(lambda y: y in x)) loc_data_old = loc_data_old[['Date', 'AdjClose']] loc_data_com = cruf.DataFrame.merge(loc_data_old[['Date', 'AdjClose']], loc_data_new[['Date', 'AdjClose']], on='Date', how='inner') loc_data_com['Ratio'] = loc_data_com['AdjClose_x'] / loc_data_com['AdjClose_y'] loc_data_ratio = np.max(loc_data_com['Ratio']) # assuming that only the latest date is affected loc_data_ratio = max(loc_data_ratio, 1/loc_data_ratio) if loc_data_ratio > 1.001: loc_data = yahoo.get_yahoo_eod_data(tick_sym) loc_data.sort('Date') else: loc_data = loc_data.subset(loc_data['Date'].map(lambda y: y not in x)) loc_data.row_bind(loc_data_new) loc_data.sort('Date') else: try: loc_data = yahoo.get_yahoo_eod_data(tick_sym) except: loc_data = None if loc_data is not None: loc_data.sort('Date') if loc_data is not None: folder.store(tick_sym, loc_data) return loc_data[loc_data.shape[0]-1, 'Close'] else: return np.nan
def _refresh_eod_data(tick_sym, folder): try: loc_data = yahoo.get_yahoo_eod_data(tick_sym) except: loc_data = None if loc_data is not None: loc_data.sort('Date') folder.store(tick_sym, loc_data) return loc_data[loc_data.shape[0]-1, 'Close'] else: return np.nan