Beispiel #1
0
def _historical_trading_dates(start, end):
    """
    以指数历史数据计算期间的所有交易日期

    网络数据存在延迟,如当天交易,历史数据可能在次日或次次日
    才提供,导致近期交易日的计算存在误差。
    """
    df = fetch_history('000001', start, end, True)
    return df.index
Beispiel #2
0
def get_data(code):
    """获取单个股票的日线数据"""
    sess = get_session(db_dir_name)
    d_ = last_date(sess, StockDaily, code)
    sess.close()
    if d_ is None:
        s = get_ipo_date(code)
    else:
        s = d_ + pd.Timedelta(days=1)
    if s > pd.Timestamp('today').normalize():
        return pd.DataFrame()
    df = _fix_data(fetch_history(code, s))
    return df
Beispiel #3
0
def _refresh_data(code, sess):
    """刷新或者添加单个股票的日线数据"""
    d_ = last_date(sess, StockDaily, code)
    if d_ is None:
        s = get_ipo_date(code)
        if s is None:
            s = MARKET_START.tz_convert(None)
    else:
        s = d_ + pd.Timedelta(days=1)
    if s > pd.Timestamp('today').normalize():
        logger.info('{} 数据已经是最新状态'.format(code))
        return
    df = _fix_data(fetch_history(code, s))
    if len(df):
        table_name = 'stock_dailies'
        df.to_sql(table_name, sess.bind.engine, if_exists='append')
        logger.info('添加{}数据共{}行'.format(code, df.shape[0]))
    else:
        logger.info('{} {} 无数据添加'.format(code, s))
Beispiel #4
0
def flush(codes, end):
    for code in codes:
        sess = get_session(db_dir_name)
        start = _get_start_date(sess, code)
        if start is not None and start > end:
            logger.info('代码:{} 无需刷新'.format(code))
            continue
        try:
            df = fetch_history(code=code, start=start, end=end, is_index=True)
            # 按日期排序(升序)
            df.sort_index(inplace=True)
        except ValueError:
            # 当开始日期大于结束日期时,触发值异常
            logger.info('无法获取网页数据。代码:{},开始日期:{}, 结束日期:{}'.format(
                code, start, end))
            continue
        objs = _gen(df)
        sess.add_all(objs)
        sess.commit()
        logger.info('代码:{}, 新增{}行'.format(
            code, len(objs)))
        sess.close()
Beispiel #5
0
def test_fetch_history_1():
    """测试历史股价"""
    df = fetch_history('000001', '1990-01-01', '2019-11-24')
    assert df.shape == (7041, 15)
    assert df.iat[0, 0] == "'000001"
    assert df.index[0] == pd.Timestamp('2019-11-22 00:00:00')
Beispiel #6
0
def test_fetch_history_2():
    """测试历史股价(退市股票)"""
    df = fetch_history('000033', '1990-01-01', '2019-11-24')
    assert df.shape == (5221, 15)
    assert df.iat[0, 0] == "'000033"
    assert df.index[0] == pd.Timestamp('2017-07-06 00:00:00')