def DataReader(symbol, start=None, end=None, exchange=None, data_source=None): start, end = _validate_dates(start, end) # FRED Reader if data_source and data_source.upper() == 'FRED': return FredReader(symbol, start, end, exchange, data_source).read() # KRX and Naver Finance if (symbol[:5].isdigit() and exchange==None) or \ (symbol[:5].isdigit() and exchange and exchange.upper() in ['KRX', '한국거래소']): return NaverDailyReader(symbol, start, end, exchange, data_source).read() # KRX-DELISTINGS if (symbol[:5].isdigit() and exchange and exchange.upper() in ['KRX-DELISTING']): return KrxDelistingReader(symbol, start, end, exchange, data_source).read() # Investing reader = InvestingDailyReader df = reader(symbol, start, end, exchange, data_source).read() end = min([pd.to_datetime(end), datetime.today()]) while len(df) and df.index[-1] < end: # issues/30 more = reader(symbol, df.index[-1] + timedelta(1), end, exchange, data_source).read() if len(more) == 0: break df = df.append(more) return df
def __init__(self, symbol, start=None, end=None, exchange=None, kind=None): self.symbol = symbol start, end = _validate_dates(start, end) self.start = start self.end = end self.exchange = exchange self.kind = kind
def DataReader(symbol, start=None, end=None, exchange=None, kind=None): start, end = _validate_dates(start, end) if (symbol.isdigit() and len(symbol)==6 and exchange==None) or \ (symbol.isdigit() and exchange and exchange.upper() in ['KRX', '한국거래소']): return NaverDailyReader(symbol, start, end, exchange, kind).read() if (symbol.isdigit() and exchange and exchange.upper() in ['KRX-DELISTING']): return KrxDelistingReader(symbol, start, end, exchange, kind).read() reader = InvestingDailyReader df = reader(symbol, start, end, exchange, kind).read() end = min([pd.to_datetime(end), datetime.today()]) while len(df) and df.index[-1] < end: # issues/30 more = reader(symbol, df.index[-1] + timedelta(1), end, exchange, kind).read() if len(more) == 0: break df = df.append(more) return df
def DataReader(symbol, start=None, end=None, exchange=None, data_source=None): ''' read price data from various exchanges or data source * symbol: code or ticker * start, end: date time string * exchange: 'KRX'(default), 'KRX-DELISTING', 'NYSE', 'NASDAQ', 'AMEX', 'SSE', 'SZSE', 'HKEX', 'TSE', 'HOSE' * data_source: 'FRED' ''' start, end = _validate_dates(start, end) # FRED Reader if data_source and data_source.upper() == 'FRED': return FredReader(symbol, start, end, exchange, data_source).read() # KRX and Naver Finance if (symbol[:5].isdigit() and exchange==None) or \ (symbol[:5].isdigit() and exchange and exchange.upper() in ['KRX', '한국거래소']): return NaverDailyReader(symbol, start, end, exchange, data_source).read() # KRX-DELISTING if (symbol[:5].isdigit() and exchange and exchange.upper() in ['KRX-DELISTING']): return KrxDelistingReader(symbol, start, end, exchange, data_source).read() # Investing reader = InvestingDailyReader df = reader(symbol, start, end, exchange, data_source).read() end = min([pd.to_datetime(end), datetime.today()]) while len(df) and df.index[-1] < end: # issues/30 more = reader(symbol, df.index[-1] + timedelta(1), end, exchange, data_source).read() if len(more) == 0: break df = df.append(more) return df
def DataReader(symbol, start=None, end=None, exchange=None, data_source=None): start, end = _validate_dates(start, end) use_cache = \ datetime(end.year, end.month, end.day) != datetime(datetime.today().year, datetime.today().month, datetime.today().day) use_cache = False if use_cache: cwd = os.path.split(__file__)[0] cache.ticker_cache_init() ticker_cache = cache.ticker_cache_readall() for i, (t, s, e) in enumerate(ticker_cache): if t == symbol: if s <= start and end <= e: try: df = pd.read_pickle( (os.path.join(cwd, 'cache', '{0}.pkl'.format(symbol)))) except FileNotFoundError: # Cache line corrupted; refresh! cache.ticker_cache_delete(i) df = DataReader(symbol, start, end, exchange, data_source) else: _start = min(start, s) _end = max(end, e) cache.ticker_cache_delete(i) df = DataReader(symbol, _start, _end, exchange, data_source) break original_df = pd.read_pickle( (os.path.join(cwd, 'cache', '{0}.pkl'.format(symbol)))) return df[start:end + timedelta(days=1)] new_cacheline = (symbol, cache.date_to_cacheline(start), cache.date_to_cacheline(end)) # print('ticker cache before') # print(ticker_cache) ticker_cache.append((symbol, cache.date_to_cacheline(start), cache.date_to_cacheline(end))) # print('ticker cache before') # print(ticker_cache) cache.ticker_cache_write(ticker_cache) # FRED Reader if data_source and data_source.upper() == 'FRED': ret = FredReader(symbol, start, end, exchange, data_source).read() if use_cache: ret.to_pickle(os.path.join(cwd, 'cache', '{0}.pkl'.format(symbol))) return ret # KRX and Naver Finance if (symbol[:5].isdigit() and exchange==None) or \ (symbol[:5].isdigit() and exchange and exchange.upper() in ['KRX', '한국거래소']): ret = NaverDailyReader(symbol, start, end, exchange, data_source).read() if use_cache: ret.to_pickle(os.path.join(cwd, 'cache', '{0}.pkl'.format(symbol))) return ret # KRX-DELISTINGS if (symbol[:5].isdigit() and exchange and exchange.upper() in ['KRX-DELISTING']): ret = KrxDelistingReader(symbol, start, end, exchange, data_source).read() if use_cache: ret.to_pickle(os.path.join(cwd, 'cache', '{0}.pkl'.format(symbol))) return ret # Investing reader = InvestingDailyReader df = reader(symbol, start, end, exchange, data_source).read() end = min([pd.to_datetime(end), datetime.today()]) while len(df) and df.index[-1] < end: # issues/30 more = reader(symbol, df.index[-1] + timedelta(1), end, exchange, data_source).read() if len(more) == 0: break df = df.append(more) if use_cache: df.to_pickle(os.path.join(cwd, 'cache', '{0}.pkl'.format(symbol))) return df
def __init__(self, symbol, start=None, end=None, country=None): self.symbol = symbol start, end = _validate_dates(start, end) self.start = start self.end = end self.country = country
def __init__(self, symbols, start=None, end=None): self.symbols = symbols start, end = _validate_dates(start, end) self.start = start self.end = end
def __init__(self, symbol, start=None, end=None, exchange=None, data_source=None): self.symbol = symbol start, end = _validate_dates(start, end) self.start = start self.end = end self.data_source = data_source