Beispiel #1
0
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
Beispiel #2
0
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