Beispiel #1
0
def get_random_price(price,
                     code='rb1905',
                     tradingDay='20181119',
                     mu=0,
                     sigma=0.2,
                     theta=0.15,
                     dt=1e-2,
                     ifprint=False,
                     weight=0.1,
                     callback=None):
    ou_noise = OrnsteinUhlenbeckActionNoise(mu=np.array(mu))

    data = []
    tick_pickle = {
        'InstrumentID':
        str(code),
        'UpdateTime':
        '',
        'UpdateMillisec':
        '',
        'LastPrice':
        '',
        'Volume':
        0,
        'TradingDay':
        tradingDay,
        'ActionDay':
        QA_util_date_str2int(
            QA_util_get_last_day(QA_util_date_int2str(tradingDay)))
    }

    for item in time_index:
        x = str(item).split()[2]
        if '.' in x:
            tick_pickle['UpdateMillisec'] = 500
        else:
            tick_pickle['UpdateMillisec'] = 0

        tick_pickle['UpdateTime'] = x.split('.')[0]
        if item.seconds >= 75600:
            tick_pickle['ActionDay'] = QA_util_date_str2int(
                QA_util_get_last_day(
                    QA_util_date_int2str(tick_pickle['TradingDay'])))
        else:
            tick_pickle['ActionDay'] = tick_pickle['TradingDay']
        tick_pickle['Volume'] += random.randint(50, 5000)
        tick_pickle['LastPrice'] = (ou_noise() + 1) * \
                                   weight * price + (1 - weight) * price
        data.append(copy.deepcopy(tick_pickle))
        if ifprint:
            print(tick_pickle)
        if callback is not None:
            callback(tick_pickle)
    return pd.DataFrame(data)
Beispiel #2
0
def QA_save_stock_day_pg(start_date='19901219'):
    t = time.localtime(time.time())
    if int(time.strftime('%H%M%S', t)) < 190000:  #晚上七点之后在更新当天数据,以免不及时
        t = time.localtime(time.time() - 3600 * 24)
        tS = time.strftime("%Y-%m-%d", t)
    else:
        tS = time.strftime("%Y-%m-%d", t)
    end_date = tS
    try:
        mes = 'select distinct trade_date from stock_day;'
        trade_data_pg = load_data_from_postgresql(mes=mes).trade_date.tolist()
        for i in range(len(trade_data_pg)):
            trade_data_pg[i] = trade_data_pg[i].strftime("%Y-%m-%d")
    except:  #第一次运行
        trade_data_pg = list()

    if isinstance(start_date, int):
        start_date = QA_util_date_int2str(start_date)
    elif len(start_date) == 8:
        start_date = start_date[0:4] + '-' + start_date[
            4:6] + '-' + start_date[6:8]

    trade_date = QA_util_get_trade_range(start_date, end_date)
    trade_date2 = list(set(trade_date) ^ set(trade_data_pg))
    trade_date2.sort()
    if len(trade_date2) == 0:
        QA_util_log_info(
            'Stock day is up to date and does not need to be updated')
    for i in trade_date2:
        pass
        try:
            t = time.time()
            df = download_day_data_from_tushare(i)
            #i=i[7:10].lower()+i[0:6]
            save_data_to_postgresql('stock_day', df, 'append')
            t1 = time.time()
            QA_util_log_info('save ' + i + ' stock day success,take ' +
                             str(round(t1 - t, 2)) + ' S')
        except Exception as e:
            print(e)
Beispiel #3
0
def get_random_price(price,
                     code='rb1905',
                     tradingDay='20181119',
                     mu=0,
                     sigma=0.2,
                     theta=0.15,
                     dt=1e-2,
                     ifprint=False,
                     weight=0.1,
                     market_type=None):
    ou_noise = OrnsteinUhlenbeckActionNoise(mu=np.array(mu))

    data = []
    tick_pickle = {
        'InstrumentID':
        str(code),
        'UpdateTime':
        '',
        'UpdateMillisec':
        '',
        'LastPrice':
        '',
        'Volume':
        0,
        'TradingDay':
        tradingDay,
        'ActionDay':
        QA_util_date_str2int(
            QA_util_get_last_day(QA_util_date_int2str(tradingDay)))
    }

    if market_type is None:
        market_type = MARKET_TYPE.FUTURE_CN if re.search(
            r'[a-zA-z]+', code) else MARKET_TYPE.STOCK_CN

    if market_type == MARKET_TYPE.FUTURE_CN:
        time_index = time_index_future
    else:
        time_index = time_index_stock

    for item in time_index:
        x = str(item).split()[2]
        if '.' in x:
            tick_pickle['UpdateMillisec'] = 500
        else:
            tick_pickle['UpdateMillisec'] = 0

        tick_pickle['UpdateTime'] = x.split('.')[0]
        if (item.seconds >= 75600) & (market_type == MARKET_TYPE.FUTURE_CN):
            tick_pickle['ActionDay'] = QA_util_date_str2int(
                QA_util_get_last_day(
                    QA_util_date_int2str(tick_pickle['TradingDay'])))
        else:
            tick_pickle['ActionDay'] = tick_pickle['TradingDay']
        tick_pickle['Volume'] += random.randint(50, 5000)
        tick_pickle['LastPrice'] = (ou_noise()+1) * \
            weight*price + (1-weight)*price
        data.append(copy.deepcopy(tick_pickle))
        if ifprint:
            print(tick_pickle)
    return pd.DataFrame(data)