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)
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)
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)