Esempio n. 1
0
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
Esempio n. 2
0
 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
Esempio n. 3
0
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
Esempio n. 5
0
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
Esempio n. 6
0
 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
Esempio n. 7
0
 def __init__(self, symbols, start=None, end=None):
     self.symbols = symbols
     start, end = _validate_dates(start, end)
     self.start = start
     self.end = end
Esempio n. 8
0
 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