def FillVolumnMatrix(stockId, startDay, endDay, timeSpan): global AmountMatrix global VolumeMatrix global FiveMinOpenPriceMatrix TradeDayList = [] calendar = md.get_calendar(Market, startDay, endDay) index = len(calendar) - 1 for i in range(0, timeSpan): #print('index', index) timeOri = calendar[index].strtime strIndex = timeOri.index('T') timeAft = timeOri[0:strIndex] TradeDayList.insert(0, timeAft) index -= 1 print("TradeDayList", TradeDayList) for day in TradeDayList: print("day:", day) dayIndex = TradeDayList.index(day) startTime = day + ' ' + '9:30:00' endTime = day + ' ' + '15:00:00' print("stockId", stockId) print("IntervalWid", IntervalWid) print("startTime", startTime) print("endTime", endTime) bars = md.get_bars(stockId, IntervalWid, startTime, endTime) print("bar:", bars) for interval in range(len(bars)): VolumeMatrix[dayIndex][interval] = bars[interval].volume AmountMatrix[dayIndex][interval] = bars[interval].amount FiveMinOpenPriceMatrix[dayIndex][interval] = bars[interval].open
def FillVolumnMatrix(stockId, startDay, endDay, timeSpan): global AmountMatrix global VolumeMatrix TradeDayList = [] calendar = md.get_calendar(Market, startDay, endDay) # print('len(calender)', len(calendar)) index = len(calendar) - 1 for i in range(0, timeSpan): # print('index', index) timeOri = calendar[index].strtime strIndex = timeOri.index('T') timeAft = timeOri[0:strIndex] TradeDayList.insert(0, timeAft) index -= 1 for day in TradeDayList: dayIndex = TradeDayList.index(day) startTime = day + ' ' + '9:30:00' endTime = day + ' ' + '15:00:00' bars = md.get_bars(stockId, IntervalWid, startTime, endTime) for interval in range(len(bars)): VolumeMatrix[dayIndex][interval] = bars[interval].volume AmountMatrix[dayIndex][interval] = bars[interval].amount FiveMinOpenPriceMatrix[dayIndex][interval] = bars[interval].open print("AmountMatrix", AmountMatrix) print("VolumeMatrix", VolumeMatrix)
def get_bars(symbol, bar_type, begin_time, end_time): var = md.get_bars(symbol, bar_type, begin_time, end_time) if len(var) == 0: print("no bar data for stock %s between %s and %s" %(symbol, begin_time, end_time)) return pd.DataFrame() else: ret = bar_topd(var,'date') return ret
def GetTradeDayPriceList(stockId, tradeDay): tradedayPriceList = [] startTime = tradeDay + ' ' + '9:30:00' endTime = tradeDay + ' ' + '15:00:00' bars = md.get_bars(stockId, IntervalWid, startTime, endTime) for interval in range(len(bars)): tradedayPriceList.insert(bars[interval].open) return tradedayPriceList
def get_minutes_bars(stock_list, minutes, begin_time, end_time): # 连接本地终端时,td_addr为localhost:8001, if (td.init('*****@*****.**', 'zyj2590@1109', 'strategy_1') == 0): try: bars = md.get_bars(stock_list, int(minutes * 60), begin_time, end_time) return bars except: pass
def get_k_data(self, code=None, start=None, end=ct._TODAY_, ktype='D', isOHLC=True): if code[:2] == '60' or\ code[:2] == '00': code = 'SHSE.' + code else: code = 'SZSE.' + code if len(start) == 10: start += ' 09:00:00' if len(end) == 10: end += ' 15:00:00' tmp_end = start last_end = -1 dat = pd.DataFrame() while (tmp_end < end and tmp_end != last_end): if ktype == 'D': bars = md.get_dailybars(code, tmp_end, end) else: bars = md.get_bars(code, self.k_dic[ktype], tmp_end, end) if len(bars) == 0: break rt = [] for i in bars: rt.append(to_dict(i)) dt = pd.DataFrame(rt) if start == tmp_end: dat = dt else: dat = dat.append(dt) print '-----', code, dt.iloc[-1, 12][:19] last_end = tmp_end tmp_end = dt.iloc[-1, 12][:19] next_5min = datetime.strptime( tmp_end, '%Y-%m-%dT%H:%M:%S') + timedelta(minutes=int(ktype)) tmp_end = datetime.strftime(next_5min, '%Y-%m-%d %H:%M:%S') if dat.empty: return dat dat.drop_duplicates(['strendtime'], inplace=True) dat['date'] = dat['strendtime'].apply( lambda x: x[:10] + ' ' + x[11:19]) dat.insert(len(dat.columns), "code", code[5:]) #dat.index = dat['strtime'].apply(lambda x: datetime.strptime(x, '%Y-%m-%dT%H:%M:%S+08:00')) if isOHLC: return dat[[ 'date', 'high', 'low', 'open', 'close', 'volume', 'code' ]] return dat
def GetLastOpenPrice(stockId, startDay, endDay, timeSpan): calender = md.get_calendar(Market, startDay, endDay) index = len(calender) - timeSpan + 1 timeOri = calender[index].strtime strIndex = timeOri.index('T') lastDay = timeOri[0:strIndex] startTime = lastDay + ' ' + '14:55:00' endTime = lastDay + ' ' + '15:00:00' bars = md.get_bars(stockId, 300, startTime, endTime) result = bars[0].open return result
def TestIFS(): barList = md.get_bars(Market+'.'+StockId, 300, CurrentDay + ' 9:40:00', CurrentDay + ' 10:40:00') averageDataList = [] for i in range(0, len(barList)): vol = barList[i].volume amt = barList[i].amount if vol != 0: averagePrice = amt / vol averageDataList.append(averagePrice) else: tempCount = len(averageDataList) averageDataList.append(averageDataList[tempCount - 1]) ifsTestList = GetIFS(averageDataList, 0.6) return ifsTestList
def GetHistoryIntervalOpenPrice(stockId, startDay, endDay, timeSpan): fiveMinOpenPriceMatrix = [[0 for col in range(48)] for row in range(timeSpan)] global FiveMinOpenPriceMatrix TradeDayList = [] calendar = md.get_calendar(Market, startDay, endDay) index = len(calendar) - 1 for i in range(0, timeSpan): timeOri = calendar[index].strtime strIndex = timeOri.index('T') timeAft = timeOri[0:strIndex] TradeDayList.insert(0, timeAft) index -= 1 for day in TradeDayList: dayIndex = TradeDayList.index(day) startTime = day + ' ' + '9:30:00' endTime = day + ' ' + '15:00:00' bars = md.get_bars(stockId, 300, startTime, endTime) for interval in range(len(bars)): fiveMinOpenPriceMatrix[dayIndex][interval] = bars[interval].open return fiveMinOpenPriceMatrix
def get_hist_data(self, code=None, start=None, end=ct._TODAY_, ktype='D'): if code[:2] == '60': code = 'SHSE.' + code else: code = 'SZSE.' + code tmp_end = start last_end = -1 dat = pd.DataFrame() while (tmp_end < end and tmp_end != last_end): if ktype == 'D': bars = md.get_dailybars(code, tmp_end, end) else: bars = md.get_bars(code, self.k_dic[ktype], tmp_end + ' 09:00:00', end + ' 15:00:00') if len(bars) == 0: return pd.DataFrame( [], columns=['high', 'low', 'open', 'close', 'volume']) rt = [] for i in bars: rt.append(to_dict(i)) dt = pd.DataFrame(rt) if start == tmp_end: dat = dt else: dat = dat.append(dt) print '-----', code, dt.iloc[-1, 12][:10] last_end = tmp_end tmp_end = dt.iloc[-1, 12][:10] tomorrow = datetime.strptime(tmp_end, '%Y-%m-%d') + timedelta(days=1) tmp_end = datetime.strftime(tomorrow, '%Y-%m-%d') dat.drop_duplicates(['strendtime'], inplace=True) dat.index = dat['strendtime'].apply( lambda x: datetime.strptime(x, '%Y-%m-%dT%H:%M:%S+08:00')) return dat[['high', 'low', 'open', 'close', 'volume']]
) print('get_ticks: ', len(r)) #提取tick快照 r = md.get_last_ticks('SHSE.600000') print('get_last_ticks: ', len(r)) #提取最新N笔tick数据 r = md.get_last_n_ticks( 'SHSE.600000', 10) print('get_last_n_ticks(10): ', len(r)) #提起一分钟分时数据(freq=60 seconds) r = md.get_bars( 'SHSE.600000', 60, '2015-12-01 09:30:00', '2015-12-10 09:31:00', ) print('get_bars: ', len(r)) #提取bar快照 r = md.get_last_bars('SHSE.600000,', 60) print('get_last_bars: ', len(r)) #提取最新N笔bar数据 r = md.get_last_n_bars('SHSE.600000',60,10) print('get_last_n_bars(10): ', len(r)) #提取日频数据 r = md.get_dailybars( 'SHSE.600000',
for row in range(len(FiveMinOpenPriceMatrix)): print("row:%d", rowIndex) for col in range(colLen): print("col:%d", FiveMinOpenPriceMatrix[row][col]) rowIndex += 1 DrawTheData(FiveMinOpenPriceMatrix)''' #Hurst = GetWaveletHurst(HistoryPriceMatrix) #OpenPriceHurst = GetWaveletHurst(FiveMinOpenPriceMatrix) #print('Hurst', Hurst) #print('OpenPriceHurst', OpenPriceHurst) #利用加权移动平均法估算第k+2个区间的值 currentDataList = md.get_bars(Market+'.'+StockId, 300, CurrentDay + ' 9:30:00', CurrentDay + ' 15:00:00') print("currentDataList", currentDataList) CurrentOpenPriceList = ConvertBarsToOpenPrices(currentDataList) print('CurrentOpenPriceList', CurrentOpenPriceList) SampleDataList = ConvertMatrixToList(FiveMinOpenPriceMatrix) weighList = [0.4, 0.25, 0.15, 0.15, 0.05] for index in range(0,48): sumOfLastFive = 0 openPriceCount = len(SampleDataList) for subIndex in range(1,6): sumOfLastFive = sumOfLastFive + weighList[subIndex - 1] * SampleDataList[openPriceCount - subIndex] estimate = sumOfLastFive temSampleDataList = SampleDataList temSampleDataList.append(estimate) #对temSampleDataList求IFS global ForcastOpenPirceList
def min_data(daima, start_date, end_date, n): def count_split_days(start_date, end_date): if datetime.datetime(int(start_date[0:4]), int(start_date[4:6]), int(start_date[6:])) < datetime.datetime( 2015, 1, 5): num = (datetime.datetime(int(end_date[0:4]), int(end_date[4:6]), int(end_date[6:])) - datetime.datetime(2015, 1, 5)).days else: num = (datetime.datetime(int(end_date[0:4]), int(end_date[4:6]), int(end_date[6:])) - datetime.datetime(int(start_date[0:4]), int( start_date[4:6]), int(start_date[6:]))).days return num from gmsdk import md ret = md.init("yourname", "password") if daima[0:2] == '60': daima_new = str('SHSE.') + str(daima) else: daima_new = str('SZSE.') + str(daima) mins = n * 60 strtime = [] openp = [] high = [] low = [] close = [] volume = [] amount = [] days_internal = 120 LoopNum = divmod(count_split_days(start_date, end_date), days_internal)[0] + 1 left = divmod(count_split_days(start_date, end_date), days_internal)[1] bars_set = [] n = 0 for ln in range(0, LoopNum): if n == 0: bars = md.get_bars( daima_new, mins, str( datetime.datetime(int(start_date[0:4]), int( start_date[4:6]), int(start_date[6:])) + datetime.timedelta(days=days_internal * (ln)))[0:10] + ' 09:00:00', str( datetime.datetime(int(start_date[0:4]), int( start_date[4:6]), int(start_date[6:])) + datetime.timedelta(days=days_internal * (ln + 1)))[0:10] + ' 15:30:00') n = n + 1 else: if ln == LoopNum - 1: bars = md.get_bars( daima_new, mins, str( datetime.datetime(int(start_date[ 0:4]), int(start_date[4:6]), int(start_date[6:])) + datetime.timedelta(days=days_internal * (ln) + 1))[0:10] + ' 09:00:00', end_date[0:4] + '-' + end_date[4:6] + '-' + end_date[6:] + ' 15:30:00') n = n + 1 else: bars = md.get_bars( daima_new, mins, str( datetime.datetime(int(start_date[ 0:4]), int(start_date[4:6]), int(start_date[6:])) + datetime.timedelta(days=days_internal * (ln) + 1))[0:10] + ' 09:00:00', str( datetime.datetime(int(start_date[ 0:4]), int(start_date[4:6]), int(start_date[6:])) + datetime.timedelta(days=days_internal * (ln + 1)))[0:10] + ' 15:30:00') n = n + 1 bars_set.append(bars) for SignalBars in bars_set: for b in SignalBars: strtime.append(b.strtime) openp.append(b.open) high.append(b.high) low.append(b.low) close.append(b.close) volume.append(b.volume) amount.append(b.amount) mins = pd.DataFrame({ 'strtime': strtime, 'open': openp, 'close': close, 'high': high, 'low': low, 'volume': volume, 'amount': amount }) return mins
transaction_ratio=1, commission_ratio=0.0001, slippage_ratio=0.001, price_type=0) TodayVRList = GetRatioListOfToday(Market + '.' + StockId, StartHistoryDay, EndHistoryDay, HistoryDays, WeightList) IntervalBorderList = GetIntervalList(TradeDate) print("VolumeMatrix", VolumeMatrix) print("AmountMatrix", AmountMatrix) #Hurst = GetWaveletHurst(FiveMinHisAveragePriceMatrix) #print('Hurst', Hurst) currentDataList = md.get_bars(Market + '.' + StockId, 300, TradeDate + ' 9:30:00', TradeDate + ' 15:00:00') CurrentOpenPricesList = ConvertBarsToOpenPriceList(currentDataList) HistoryFiveMinOpenPriceList = ConvertMatrixToList(FiveMinOpenPriceMatrix) print("HistoryFiveMinOpenPriceList", HistoryFiveMinOpenPriceList) print("CurrentOpenPricesList", CurrentOpenPricesList) ForcastAveragePricesList = GetForcastAveragePricesListByMove( HistoryFiveMinOpenPriceList, CurrentOpenPricesList) #lastDayPrice = GetLastOpenPrice(Market+'.'+StockId, StartHistoryDay, EndHistoryDay, HistoryDays) #HistoryFiveMinOpenPriceDifferList = ConvertPriceToDifferenceOne(lastDayPrice, HistoryFiveMinOpenPriceList) #print("HistoryFiveMinOpenPriceDifferList", HistoryFiveMinOpenPriceDifferList) #CurrentOpenPricesDifferList = ConvertPriceToDifference(HistoryFiveMinOpenPriceList, CurrentOpenPricesList) #ForcastAveragePricesDifferList = ConvertPriceToDifference(HistoryFiveMinOpenPriceList, ForcastAveragePricesList) predictIndex = 5 basicPointNum = 48 * HistoryDays
def min_data(daima,start_date,end_date,n): def count_split_days(start_date,end_date): if datetime.datetime(int(start_date[0:4]),int(start_date[4:6]),int(start_date[6:]))<datetime.datetime(2015,1,5): num = (datetime.datetime(int(end_date[0:4]),int(end_date[4:6]),int(end_date[6:]))-datetime.datetime(2015,1,5)).days else: num = (datetime.datetime(int(end_date[0:4]),int(end_date[4:6]),int(end_date[6:]))-datetime.datetime(int(start_date[0:4]),int(start_date[4:6]),int(start_date[6:]))).days return num from gmsdk import md ret = md.init("yourname", "password") if daima[0:2]=='60': daima_new = str('SHSE.')+str(daima) else: daima_new = str('SZSE.')+str(daima) mins = n*60 strtime = [] openp = [] high = [] low = [] close = [] volume = [] amount = [] days_internal = 120 LoopNum = divmod(count_split_days(start_date,end_date),days_internal)[0]+1 left = divmod(count_split_days(start_date,end_date),days_internal)[1] bars_set = [] n = 0 for ln in range(0,LoopNum): if n == 0: bars = md.get_bars(daima_new,mins,str(datetime.datetime(int(start_date[0:4]),int(start_date[4:6]),int(start_date[6:]))+datetime.timedelta(days=days_internal*(ln)))[0:10]+' 09:00:00',str(datetime.datetime(int(start_date[0:4]),int(start_date[4:6]),int(start_date[6:]))+datetime.timedelta(days=days_internal*(ln+1)))[0:10]+' 15:30:00') n = n+1 else: if ln == LoopNum-1: bars = md.get_bars(daima_new,mins,str(datetime.datetime(int(start_date[0:4]),int(start_date[4:6]),int(start_date[6:]))+datetime.timedelta(days=days_internal*(ln)+1))[0:10]+' 09:00:00',end_date[0:4]+'-'+end_date[4:6]+'-'+end_date[6:]+' 15:30:00') n = n+1 else: bars = md.get_bars(daima_new,mins,str(datetime.datetime(int(start_date[0:4]),int(start_date[4:6]),int(start_date[6:]))+datetime.timedelta(days=days_internal*(ln)+1))[0:10]+' 09:00:00',str(datetime.datetime(int(start_date[0:4]),int(start_date[4:6]),int(start_date[6:]))+datetime.timedelta(days=days_internal*(ln+1)))[0:10]+' 15:30:00') n = n+1 bars_set.append(bars) for SignalBars in bars_set: for b in SignalBars: strtime.append(b.strtime) openp.append(b.open) high.append(b.high) low.append(b.low) close.append(b.close) volume.append(b.volume) amount.append(b.amount) mins = pd.DataFrame({'strtime':strtime, 'open':openp, 'close':close, 'high':high, 'low':low, 'volume':volume, 'amount':amount}) return mins
def OneDayMinData_MD(date, stklst): md.init('18201141877', 'Wqxl7309') datestr = dt.datetime.strptime(str(date), '%Y%m%d') datestr = dt.datetime.strftime(datestr, '%Y-%m-%d') starttime = ' '.join([datestr, '09:30:00']) endtime = ' '.join([datestr, '15:00:00']) # day base obj objday = StocksMinDB(configpath=r'E:\stocks_data_min\StocksMinDB\configs') objday.connectDB('stocks_data_min_by_day') daycols = [c.lower() for c in ByDay.colinfo if c != 'STKID'] dayconn = objday._getConn_() # stk base obj objstk = StocksMinDB(configpath=r'E:\stocks_data_min\StocksMinDB\configs') objstk.connectDB('stocks_data_min_by_stock') stkcols = [c.lower() for c in ByStock.colinfo] stkconn = objstk._getConn_() # data to extract cols = [ 'date', 'time', 'stkcd', 'open', 'high', 'low', 'close', 'volume', 'amount' ] alldata = pd.DataFrame() for stk in stklst: szstk = False if stk >= 600000: stkcd = '.'.join(['SHSE', str(stk)]) else: szstk = True stkstr = str(stk) stkcd = '.'.join(['SZSE', '0' * (6 - len(stkstr)) + stkstr]) stkbars = md.get_bars(stkcd, 60, starttime, endtime) stkdata = [[ date, utc2local(bar.utc_endtime, '%H%M'), stk, bar.open, bar.high, bar.low, bar.close, bar.volume, bar.amount ] for bar in stkbars] if szstk and stkdata[-1][1] == 1500 and stkdata[-2][1] >= 1457: tms = stkdata[-2][1] + 1 cls = stkdata[-2][6] for tm in range(tms, 1460): stkdata.insert(-1, [date, tm, stk, cls, cls, cls, cls, 0, 0]) stkdata = pd.DataFrame(stkdata, columns=cols) stkdata['volamtflag'] = 0 stkdata.loc[stkdata['amount'] > (stkdata['volume'] + 100) * stkdata['high'], 'volamtflag'] = 1 stkdata.loc[stkdata['amount'] < (stkdata['volume'] - 100) * stkdata['low'], 'volamtflag'] = 2 stkdata.loc[(stkdata['amount'] == 0) & (stkdata['volume'] > 0), 'volamtflag'] = 3 stkdata.loc[(stkdata['amount'] == 0) & (stkdata['volume'] == 0), 'volamtflag'] = 4 alldata = alldata.append(stkdata, ignore_index=True) stktable = '_'.join( ['stkmin', stkcd[:2].lower() + stkcd.split('.')[1]]) objstk.update_db(conn=stkconn, dbname='stocks_data_min_by_stock', data=stkdata.loc[:, stkcols].values, tablename=stktable, colinfo=ByStock.colinfo, prmkey=ByStock.prmkey, if_exist='append', chunksize=1000) # update day base daytable = 'stkmin_{0}'.format(date) daycolinfo = dict( [itm for itm in ByDay.colinfo.items() if itm[0] != 'STKID']) objday.update_db(conn=dayconn, dbname='stocks_data_min_by_day', data=alldata.loc[:, daycols].values, tablename=daytable, colinfo=daycolinfo, prmkey=ByDay.prmkey, if_exist='append', chunksize=1000)
'CFFEX.IF1512,CFFEX.IF1512', '2015-03-19 11:29:00', '2015-03-19 12:00:00', ) print('get_ticks: ', len(r)) r = md.get_last_ticks('CFFEX.IF1512,') print('get_last_ticks: ', len(r)) r = md.get_last_n_ticks( 'CFFEX.IF1512', 10) print('get_last_n_ticks(10): ', len(r)) r = md.get_bars( 'CFFEX.IF1512', 60, '2015-05-01 09:30:00', '2015-05-10 09:31:00', ) print('get_bars: ', len(r)) r = md.get_last_bars('CFFEX.IF1512,', 60) print('get_last_bars: ', len(r)) r = md.get_last_n_bars( 'CFFEX.IF1512', 60, 10) print('get_last_n_bars(10): ', len(r)) r = md.get_dailybars( 'CFFEX.IF1512',
def get_bars(symbol, bar_type, begin_time, end_time): var = md.get_bars(symbol, bar_type, begin_time, end_time) ret = bar_topd(var,'date') return ret
def get_bars(symbol, bar_type, begin_time, end_time): var = md.get_bars(symbol, bar_type, begin_time, end_time) ret = bar_topd(var, 'date') return ret
conn = pymongo.MongoClient('139.196.6.151', 26666) db = conn['test_center'] qh_data_one_min = db['qh_data_one_min'] qh_data_five_min = db['qh_data_five_min'] qh_data_five_daily = db['qh_data_five_daily'] ############################### end = datetime.datetime.now() start_m = end.month - 1 start = datetime.datetime(end.year, start_m, 1, 9, 0, 0) start_e = datetime.datetime(end.year, start_m, 1, 15, 0, 0) e_s_timedetlta = (end - start).days for day in range(e_s_timedetlta): this_start = start + datetime.timedelta(days=day) this_end = start_e + datetime.timedelta(days=day) for f in f_list: bars = md.get_bars(f, 60, this_start.strftime('%Y-%m-%d %H:%M:%S'), this_end.strftime('%Y-%m-%d %H:%M:%S')) for bar in bars: print to_dict(bar) qh_data_one_min.insert_one(to_dict(bar)) time.sleep(2) for day in range(e_s_timedetlta): this_start = start + datetime.timedelta(days=day) this_end = start_e + datetime.timedelta(days=day) for f in f_list: bars = md.get_bars(f, 300, this_start.strftime('%Y-%m-%d %H:%M:%S'), this_end.strftime('%Y-%m-%d %H:%M:%S')) for bar in bars: print to_dict(bar) qh_data_five_min.insert(to_dict(bar)) time.sleep(2)
def read_kline_ts(symbol_list, weeks_in_seconds, begin_time, end_time, max_record=50000): if (True): # 类结构体转成dataframe kdata = [] columns = [ 'endtime', 'open', 'high', 'low', 'close', 'volume', 'amount' ] bars = 0 is_daily = (weeks_in_seconds == 240 * 60) while (True): # 返回结果是bar类数组 if is_daily: bars = md.get_dailybars(symbol_list, begin_time, end_time) else: bars = md.get_bars(symbol_list, weeks_in_seconds, begin_time, end_time) for bar in bars: if is_daily: kdata.append([ int(bar.utc_time), bar.open, bar.high, bar.close, bar.low, bar.volume, bar.amount ]) else: kdata.append([ int(bar.utc_endtime), bar.open, bar.high, bar.close, bar.low, bar.volume, bar.amount ]) count = len(bars) # TODO 一次最多处理10000项以内数据,超出应有所提示 if (count == 0 or len(kdata) > max_record) \ or (not is_daily and bars[count - 1].strendtime >= end_time) \ or (is_daily and bars[count - 1].strtime >= end_time): break # print("read [%s] k line:%s count=%d" % (symbol_list, # bars[0].strtime[:10] + ' ' + bars[0].strtime[11:19], count)) if is_daily: if count <= 10: break else: begin_time = bars[count - 1].strtime[:10] \ + ' ' + bars[count - 1].strtime[11:19] else: begin_time = bars[count - 1].strendtime[:10] \ + ' ' + bars[count - 1].strendtime[11:19] ''' count=len(kdata) if count>0: print("total count:%d,end date:%s " % (count,timestamp_datetime(kdata[count-1][0]))) else: print("No data" ) ''' return pd.DataFrame(kdata, columns=columns)
def OneDayMinData_MD(date,stklst): md.init('18201141877','Wqxl7309') datestr= dt.datetime.strptime(str(date),'%Y%m%d') datestr = dt.datetime.strftime(datestr,'%Y-%m-%d') starttime = ' '.join([datestr,'09:30:00']) endtime = ' '.join([datestr,'15:00:00']) # day base obj objday = StocksMinDB(configpath=r'E:\stocks_data_min\StocksMinDB\configs') objday.connectDB('stocks_data_min_by_day') daycols = [c.lower() for c in ByDay.colinfo if c!='STKID'] dayconn = objday._getConn_() # stk base obj objstk = StocksMinDB(configpath=r'E:\stocks_data_min\StocksMinDB\configs') objstk.connectDB('stocks_data_min_by_stock') stkcols = [c.lower() for c in ByStock.colinfo] stkconn = objstk._getConn_() # data to extract cols = ['date','time','stkcd','open','high','low','close','volume','amount'] alldata = pd.DataFrame() for stk in stklst: szstk = False if stk>=600000: stkcd = '.'.join(['SHSE',str(stk)]) else: szstk = True stkstr = str(stk) stkcd = '.'.join(['SZSE','0'*(6-len(stkstr))+stkstr]) stkbars = md.get_bars(stkcd,60,starttime,endtime) stkdata = [[date,utc2local(bar.utc_endtime,'%H%M'),stk,bar.open,bar.high,bar.low,bar.close,bar.volume,bar.amount] for bar in stkbars] if szstk and stkdata[-1][1]==1500 and stkdata[-2][1]>=1457: tms = stkdata[-2][1]+1 cls = stkdata[-2][6] for tm in range(tms,1460): stkdata.insert(-1,[date,tm,stk,cls,cls,cls,cls,0,0]) stkdata = pd.DataFrame(stkdata,columns=cols) stkdata['volamtflag'] = 0 stkdata.loc[stkdata['amount']>(stkdata['volume']+100)*stkdata['high'],'volamtflag'] = 1 stkdata.loc[stkdata['amount']<(stkdata['volume']-100)*stkdata['low'],'volamtflag'] = 2 stkdata.loc[(stkdata['amount']==0) & (stkdata['volume']>0),'volamtflag'] = 3 stkdata.loc[(stkdata['amount']==0) & (stkdata['volume']==0),'volamtflag'] = 4 alldata = alldata.append(stkdata,ignore_index=True) stktable = '_'.join(['stkmin',stkcd[:2].lower()+stkcd.split('.')[1]]) objstk.update_db(conn=stkconn, dbname='stocks_data_min_by_stock', data=stkdata.loc[:,stkcols].values, tablename=stktable, colinfo=ByStock.colinfo, prmkey=ByStock.prmkey, if_exist='append', chunksize=1000 ) # update day base daytable = 'stkmin_{0}'.format(date) daycolinfo = dict([itm for itm in ByDay.colinfo.items() if itm[0]!='STKID']) objday.update_db(conn=dayconn, dbname='stocks_data_min_by_day', data=alldata.loc[:,daycols].values, tablename=daytable, colinfo=daycolinfo, prmkey=ByDay.prmkey, if_exist='append', chunksize=1000 )
# coding:utf-8 __author__ = 'song.lu' from dateutil.parser import parse from gmsdk import md import pandas as pd import numpy as np import time md.init('cloud.myquant.cn:8000', 'demo', 'demo') r = md.get_bars( 'CFFEX.IF1506', 60, '2015-05-27 09:15:00', '2015-05-27 15:30:00', ) st = time.time() times = [] closep = [] openp = [] highp = [] lowp = [] volume = [] for i in r: times.append(parse(str(i.bar_time))) closep.append(i.close) openp.append(i.open)