def getTradeday(start, end, fre='month'): trade_day = DataAPI.TradeCalGet(exchangeCD=u"XSHG", beginDate=start, endDate=end, field=u"", pandas="1") trade_day = trade_day[trade_day.isOpen == 1][[ 'calendarDate', 'isWeekEnd', 'isMonthEnd' ]] if fre == 'month': df = trade_day[trade_day.isMonthEnd == 1]['calendarDate'] elif fre == 'week': df = trade_day[trade_day.isWeekEnd == 1]['calendarDate'] elif fre == 'day': df = trade_day['calendarDate'] elif fre == '2week': df = trade_day[trade_day.isWeekEnd == 1][['calendarDate', 'isWeekEnd']] df = df[1::2] df = df['calendarDate'] else: print 'change fre parameter' raise ValueError df.index = range(len(df)) df = pd.DataFrame(df) df['calendarDate'] = pd.to_datetime(df['calendarDate'], format='%Y-%m-%d') df['calendarDate'] = df['calendarDate'].apply( lambda x: x.strftime("%Y%m%d")) df = df['calendarDate'] return df
def get_features(security_id='', start_date='', end_date='', min_unit="5"): df = DataAPI.TradeCalGet(exchangeCD=u"XSHG,XSHE", beginDate=start_date.replace('-', ''), endDate=end_date.replace('-', ''), isOpen=u"1", field=u"calendarDate", pandas="1") t_dates = list(df['calendarDate']) df_min = DataAPI.MktBarHistDateRangeGet(securityID=security_id, startDate=start_date.replace( '-', ''), endDate=end_date.replace('-', ''), unit=min_unit, field=u"", pandas="1") df_min['vwap'] = df_min['totalValue'] / df_min['totalVolume'] # TODO normally it should be closePrice df_min['ret'] = df_min[['vwap' ]].rolling(2).apply(lambda x: x[-1] / x[0] - 1) df_min['label'] = [ 1 if item >= 0.0 else 0 for item in (([0.0] + list(df_min['ret']))[1:]) ] # df_min['dealPrice'] = (df_min['openPrice'] + df_min['vwap'])/2 df_min['dealPrice'] = df_min['vwap'] return df_min
def get_trading_day_list(self, start, end, frequency, exchange_cd='XSHG'): """ 输入起始日期和频率,即可获得日期列表(daily包括起始日,其余的都是位于起始日中间的) 输入: start,开始日期,'YYYYMMDD'形式 end,截止日期,'YYYYMMDD'形式 frequency,频率,day为所有交易日,week为每周最后一个交易日,month为每月最后一个交易日,quarter为每季最后一个交易日 返回: 获得list型日期列表,以'YYYYMMDD'形式存储 """ df = DataAPI.TradeCalGet(exchangeCD=exchange_cd, beginDate=start, endDate=end, field=u"", pandas="1") df['calendarDate'] = df['calendarDate'].apply( lambda x: x.replace('-', '')) if frequency == 'quarter': res = df.query('isQuarterEnd==1') elif frequency == 'semi': res = df.query('isQuarterEnd==1') res = res.reset_index() res = res.loc[res['calendarDate'].apply( lambda x: (x[4:6] == '06' or x[4:6] == '12'))] elif frequency == 'month': res = df.query('isMonthEnd==1') elif frequency == 'week': res = df.query('isWeekEnd==1') elif frequency == 'day': res = df.query('isOpen==1') else: raise ValueError('调仓频率必须为day/week/month/quarter/semi!!!') return list(res['calendarDate'])
def get_features(security_id=u"300634.XSHE", start_date='20191202', end_date='20191206', min_unit="1", tick=False, bc='', win_len=20): df = DataAPI.TradeCalGet(exchangeCD=u"XSHG,XSHE", beginDate=start_date.replace('-', ''), endDate=end_date.replace('-', ''), isOpen=u"1", field=u"calendarDate", pandas="1") t_dates = list(set(df['calendarDate'])) df_min = DataAPI.MktBarHistDateRangeGet(securityID=security_id, startDate=start_date.replace('-', ''), endDate=end_date.replace('-', ''), unit=min_unit, field=u"", pandas="1") df_bc_min = DataAPI.MktBarHistDateRangeGet(securityID=bc, startDate=start_date.replace('-', ''), endDate=end_date.replace('-', ''), unit=min_unit, field=u"", pandas="1") lst = [] for date in t_dates: _df_min = df_min[df_min.dataDate == date] _df_bc_min = df_bc_min[df_bc_min.dataDate == date] _df = get_features_by_date(security_id=security_id, date=date, min_unit=min_unit, tick=tick, df_min=_df_min, df_bc_min=_df_bc_min, win_len=win_len) lst.append(_df) try: ret = pd.concat(lst, axis=0) except Exception as ex: logger.warn('concat the feautres for security id:{0} with error:{1}'.format(security_id, ex)) ret = None return ret
def uqer1(start, end, fre='day'): client = uqer.Client( token='811e6680b27759e045ed16e2ed9b408dc8a0cbffcf14e4bb755144dd45fa5ea0' ) trade_day = DataAPI.TradeCalGet(exchangeCD=u"XSHG", beginDate=start, endDate=end, field=u"", pandas="1") trade_day = trade_day[trade_day.isOpen == 1][[ 'calendarDate', 'isWeekEnd', 'isMonthEnd' ]] if fre == 'month': df = trade_day[trade_day.isMonthEnd == 1]['calendarDate'] elif fre == 'week': df = trade_day[trade_day.isWeekEnd == 1]['calendarDate'] elif fre == 'day': df = trade_day['calendarDate'] elif fre == '2week': df = trade_day[trade_day.isWeekEnd == 1][['calendarDate', 'isWeekEnd']] df = df[1::2] df = df['calendarDate'] else: print 'change fre parameter' raise ValueError df.index = range(len(df)) df = pd.DataFrame(df) df['calendarDate'] = pd.to_datetime(df['calendarDate'], format='%Y-%m-%d') df['calendarDate'] = df['calendarDate'].apply( lambda x: x.strftime("%Y%m%d")) df = df['calendarDate'] df.name = 'trade_day' return df
def tdaysoffset_uqer(tdate, N, fre, offset): client = uqer.Client( token='811e6680b27759e045ed16e2ed9b408dc8a0cbffcf14e4bb755144dd45fa5ea0' ) all_day = DataAPI.TradeCalGet(exchangeCD=u"XSHG", beginDate='19000101', endDate='20181231', field=u"", pandas="1") all_day = all_day[all_day.isOpen == 1] all_day = all_day.reset_index(drop=True) all_day['calendarDate'] = pd.to_datetime(all_day['calendarDate'], format='%Y-%m-%d') all_day['calendarDate'] = all_day['calendarDate'].apply( lambda x: x.strftime("%Y%m%d")) tdate_index = all_day[all_day.calendarDate <= tdate] tdate_index = len(tdate_index) - 1 if fre == 'day': t_index = tdate_index + N * offset elif fre == 'week': t_index = tdate_index + N * 5 * offset if t_index > len(all_day) - 1: t = None elif t_index < 0: t = None else: t = all_day.ix[t_index, 'calendarDate'] return t
def custom_fetch_date(self, start_date, end_date, interval): df = DataAPI.TradeCalGet(exchangeCD=u"XSHG",beginDate=start_date, endDate=end_date, field='calendarDate,isOpen',pandas="1") df = df[df['isOpen']==1] str_trade_date_list = list(set(df['calendarDate'])) str_trade_date_list.sort(reverse=False) str_trade_date_list = list(filter(lambda x: str_trade_date_list.index(x) % interval == 0, str_trade_date_list)) trade_date_list = [datetime.datetime.strptime(d, '%Y-%m-%d').date() for d in str_trade_date_list] return trade_date_list
def get_latest_trading_day_map(self): df = DataAPI.TradeCalGet(exchangeCD=u"XSHG", field=u"", pandas="1") df['calendarDate'] = df['calendarDate'].apply( lambda x: x.replace('-', '')) trading_day_series = df[df['isOpen'] == 1]['calendarDate'] trading_day_series.index = trading_day_series.values df.set_index('calendarDate', inplace=True) df['tradeDate'] = trading_day_series df['tradeDate'].fillna(method='ffill', inplace=True) return df['tradeDate']
def get_month_start_end_dates(start_date='', end_date=''): df = DataAPI.TradeCalGet(exchangeCD=u"XSHG,XSHE", beginDate=start_date, endDate=end_date, isOpen=u"1", field=u"", pandas="1") t_dates = list(set(df['calendarDate'])) t_dates = sorted(t_dates) df = df[df.isMonthEnd == 1] t_month_end = list(set(df['calendarDate'])) t_month_end = sorted(t_month_end) ret = [t_dates[0]] for d in t_month_end: try: _idx = t_dates.index(d) ret.append(d) ret.append(t_dates[_idx + 1]) except Exception as ex: pass return ret
def getTradeday(self): # if not os.path.isfile('tradeday_%s_%s.csv'%(self.start,self.end)): # trade_day = DataAPI.TradeCalGet(exchangeCD=u"XSHG",beginDate=self.start,endDate=self.end,field=u"",pandas="1") # trade_day.to_csv('tradeday_%s_%s.csv'%(self.start,self.end)) # # trade_day = pd.read_csv('tradeday_%s_%s.csv'%(self.start,self.end),index_col = 0) trade_day = DataAPI.TradeCalGet(exchangeCD=u"XSHG", beginDate=self.start, endDate=self.end, field=u"", pandas="1") trade_day = trade_day[trade_day.isOpen == 1][[ 'calendarDate', 'isWeekEnd', 'isMonthEnd' ]] if self.fre == 'month': df = trade_day[trade_day.isMonthEnd == 1]['calendarDate'] elif self.fre == 'week': df = trade_day[trade_day.isWeekEnd == 1]['calendarDate'] elif self.fre == 'day': df = trade_day['calendarDate'] elif self.fre == '2week': df = trade_day[trade_day.isWeekEnd == 1][[ 'calendarDate', 'isWeekEnd' ]] df = df[1::2] df = df['calendarDate'] else: print 'change fre parameter' raise ValueError df.index = range(len(df)) df = pd.DataFrame(df) df['calendarDate'] = pd.to_datetime(df['calendarDate'], format='%Y-%m-%d') df['calendarDate'] = df['calendarDate'].apply( lambda x: x.strftime("%Y%m%d")) df = df['calendarDate'] return df
def _fetch_all_date(self, start_date, end_date, columns): from uqer import DataAPI field = 'calendarDate,' + columns df = DataAPI.TradeCalGet(exchangeCD=u"XSHG",beginDate=start_date, endDate=end_date, field=field,pandas="1") return df