def mengjie(start_date,end_date): # 连续五天一字板涨停,最近一天涨幅在[2,4],后日表现 rawdata = read_data('daily', start_date=start_date, end_date=end_date) limit = read_data('stk_limit', start_date=start_date, end_date=end_date) data = rawdata.merge(limit[['ts_code', 'trade_date', 'up_limit','down_limit']], on=['ts_code', 'trade_date']) print(data.shape) data['limit'] = data.apply(lambda x: 1 if x['low'] == x['up_limit'] else 0, axis=1) guoli=data.copy() for day in range(2,7): pre = basic().pre_data(data, label=['limit'], pre_days=day) guoli = guoli.merge(pre[['ts_code', 'trade_date', 'pre_%s_limit'%day]], on=['ts_code', 'trade_date']) guoli=guoli.loc[guoli['pre_%s_limit'%day]==1] data=data.loc[data['ts_code'].isin(guoli['ts_code'])] print(day,guoli.shape) pre = basic().pre_data(data, label=['pct_chg'], pre_days=1) guoli = guoli.merge(pre[['ts_code', 'trade_date', 'pre_1_pct_chg']], on=['ts_code', 'trade_date']) save_data(guoli,'mengjie.csv') guoli=guoli.loc[(guoli['pre_1_pct_chg']>=1)&(guoli['pre_1_pct_chg']<=5)] # 过滤新股 list_days=basic().list_days(guoli,list_days=25) guoli=guoli.merge(list_days,on=['ts_code','trade_date']) print(guoli.shape[0]) guoli['ma']=guoli['amount']/guoli['vol']*10 save_data(guoli,'mengjie相似股票数据.csv') for ps in ['high','low','ma']: guoli['%s/pre_close'%ps]=100*(guoli[ps]/guoli['pre_close']-1) print(guoli['%s/pre_close'%ps].mean()) print(data.shape) print()
def re_limit_up(start_date, end_date): rawdata = read_data('daily', start_date=start_date, end_date=end_date) # list_days=basic().list_days(rawdata) limit = read_data('stk_limit', start_date=start_date, end_date=end_date) data = rawdata.merge(limit[['ts_code', 'trade_date', 'up_limit']], on=['ts_code', 'trade_date']) print(data.shape) data['red_line'] = data.apply(lambda x: 1 if x['low'] == x['up_limit'] else 0, axis=1) data['reback_limit'] = data.apply( lambda x: 1 if (x['open'] == x['close']) & (x['open'] == x['up_limit']) & (x['low'] < x['close']) else 0, axis=1) print(data.shape) pre = basic().pre_data(data, label=['red_line'], pre_days=2) data = data.merge(pre[['ts_code', 'trade_date', 'pre_2_red_line']], on=['ts_code', 'trade_date']) pre = basic().pre_data(data, label=['reback_limit'], pre_days=1) data = data.merge(pre[['ts_code', 'trade_date', 'pre_1_reback_limit']], on=['ts_code', 'trade_date']) print(data.shape) data = data.loc[(data['pre_2_red_line'] == 1) & (data['pre_1_reback_limit'] == 1)] print(data.shape) # save_data('破板后回封表现.csv') # data=data.loc[(data['up_limit']==data['close'])&(data['open']==data['close'])&(data['low']<data['up_limit'])] # print(data.shape) data = data.merge(basic().list_days(data, list_days=15)) print(data.shape) wool = sheep.wool(data, rawdata) return wool
def yunei(start_date,end_date): rawdata = read_data('daily', start_date=start_date, end_date=end_date) limit = read_data('stk_limit', start_date=start_date, end_date=end_date) data = rawdata.merge(limit[['ts_code', 'trade_date', 'up_limit','down_limit']], on=['ts_code', 'trade_date']) print(data.shape) data['limit'] = data.apply(lambda x: 1 if x['close'] == x['up_limit'] else 0, axis=1) data['down']=data.apply(lambda x: 1 if x['close'] == x['down_limit'] else 0, axis=1) pre = basic().pre_data(data, label=['limit'], pre_days=2) data = data.merge(pre[['ts_code', 'trade_date', 'pre_2_limit']], on=['ts_code', 'trade_date']) pre=basic().pre_data(data,label=['pct_chg'],pre_days=1) data = data.merge(pre[['ts_code', 'trade_date', 'pre_1_pct_chg']], on=['ts_code', 'trade_date']) print(data.shape) data = data.loc[data['pre_2_limit'] == 1] print(data.shape) data = data.loc[data['pre_1_pct_chg'] <-5] print(data.shape) # # data=data.loc[(data['up_limit']==data['close'])&(data['open']==data['close'])&(data['low']<data['up_limit'])] # print(data.shape) data = data.merge(basic().list_days(data, list_days=15)) print(data.shape) print(data.describe()) # wool=sheep.wool(data,rawdata) return data
def jiangxicy(start_date,end_date): # 两个普通涨停,一个一字板,后日表现 rawdata = read_data('daily', start_date=start_date, end_date=end_date) # ma=pd.read_csv('D:\\workgit\\stock\\data\\break_limit\\'+'ma%s.csv'%start_date,index_col=0, dtype={'trade_date': object}) # ma=pd.DataFrame() # for ts_code in rawdata['ts_code'].unique(): # ma=pd.concat([ma,ts.pro_bar(ts_code,start_date=start_date,end_date=end_date,ma=[5])],ignore_index=True) # save_data(ma[['ts_code', 'trade_date', 'ma5']],'ma%s.csv'%start_date) limit = read_data('stk_limit', start_date=start_date, end_date=end_date) data = rawdata.merge(limit[['ts_code', 'trade_date', 'up_limit','down_limit']], on=['ts_code', 'trade_date']) # data = data.merge(ma[['ts_code', 'trade_date', 'ma5']], on=['ts_code', 'trade_date']) print(data.shape) # data['cd'] = data.apply(lambda x: 1 if (x['close'] == x['down_limit'])&(x['open']>0.98*x['pre_close']) else 0, axis=1) # data['open_less_limit']= data.apply(lambda x: 1 if (x['open']!=x['up_limit'])&(x['close']==x['up_limit'])&(x['open'] >= (x['pre_close']*1.05)) else 0, axis=1) # data['line_limit'] = data.apply(lambda x: 1 if x['low'] == x['up_limit'] else 0, axis=1) data['or_limit']=data.apply(lambda x: 1 if( x['open'] != x['up_limit'])&(x['close'] == x['up_limit']) else 0, axis=1) # data['nn'] = data.apply(lambda x: 1 if (x['high'] < x['up_limit']) & (x['close'] > x['down_limit']) else 0, axis=1) # data['m_ma']=data.apply(lambda x: 1 if( x['close'] > x['ma5'])&(x['close'] != x['up_limit']) else 0, axis=1) data['c_c2']=data.apply(lambda x: 1 if ((x['low']>=(0.93*x['pre_close']))&(x['low']<=(0.94*x['pre_close']))&(x['open']<=x['pre_close'])&(x['pct_chg']<=-4)&(x['pct_chg']>=-5)&(x['open']>=x['close'])) else 0, axis=1) guoli=data.copy() for day in range(len(days)): if not days[day]: continue pre = basic().pre_data(data, label=[days[day]], pre_days=day+1) guoli = guoli.merge(pre[['ts_code', 'trade_date', 'pre_%s_%s'%(day+1,days[day])]], on=['ts_code', 'trade_date']) guoli=guoli.loc[guoli['pre_%s_%s'%(day+1,days[day])]==1] data=data.loc[data['ts_code'].isin(guoli['ts_code'])] print(day,guoli.shape) save_data(guoli,'jxcy.csv') # 过滤新股 list_days=basic().list_days(guoli,list_days=30) guoli=guoli.merge(list_days,on=['ts_code','trade_date']) print(guoli.shape[0]) guoli['ma']=guoli['amount']/guoli['vol']*10 save_data(guoli,'jxcy%s%s.csv'%(','.join(days),end_date)) for ps in ['high','low','ma','open','close']: guoli['%s/pre_close'%ps]=100*(guoli[ps]/guoli['pre_close']-1) print(ps,guoli['%s/pre_close'%ps].mean()) print('close_limit_up:',guoli.loc[guoli['close']==guoli['up_limit']].shape[0]/guoli.shape[0]) print('open_limitup:',guoli.loc[guoli['open']==guoli['up_limit']].shape[0]/guoli.shape[0]) print('line_red:',guoli.loc[(guoli['open']==guoli['up_limit'])&(guoli['close']==guoli['up_limit'])&(guoli['low']==guoli['up_limit'])].shape[0]/guoli.shape[0]) print(guoli.shape)
def guolikeji(start_date,end_date): # -5非涨停,-4~-2一字板,-1[-4,-6],上市25天以上 rawdata = read_data('daily', start_date=start_date, end_date=end_date) limit = read_data('stk_limit', start_date=start_date, end_date=end_date) data = rawdata.merge(limit[['ts_code', 'trade_date', 'up_limit','down_limit']], on=['ts_code', 'trade_date']) print(data.shape) data['limit'] = data.apply(lambda x: 1 if x['low'] == x['up_limit'] else 0, axis=1) data['limit2']=data.apply(lambda x: 1 if x['close'] == x['up_limit'] else 0, axis=1) guoli=data.copy() for day in range(4,1,-1): pre = basic().pre_data(data, label=['limit'], pre_days=day) guoli = guoli.merge(pre[['ts_code', 'trade_date', 'pre_%s_limit'%day]], on=['ts_code', 'trade_date']) guoli=guoli.loc[guoli['pre_%s_limit'%day]==1] data=data.loc[data['ts_code'].isin(guoli['ts_code'])] print(day,guoli.shape) print(guoli.shape,guoli.iloc[:,-5:].describe()) # pre = basic().pre_data(data, label=['pct_chg'], pre_days=1) # guoli = guoli.merge(pre[['ts_code', 'trade_date', 'pre_1_pct_chg']], on=['ts_code', 'trade_date']) # guoli=guoli.loc[(guoli['pre_1_pct_chg']>=-7)&(guoli['pre_1_pct_chg']<=-3)] # data = data.loc[data['ts_code'].isin(guoli['ts_code'])] # print(guoli.shape,guoli.iloc[:,-5:].describe()) pre = basic().pre_data(data, label=['limit2'], pre_days=5) guoli = guoli.merge(pre[['ts_code', 'trade_date', 'pre_5_limit2']], on=['ts_code', 'trade_date']) guoli=guoli.loc[guoli ['pre_5_limit2']==0] pre = basic().pre_data(data, label=['pct_chg'], pre_days=1) guoli = guoli.merge(pre[['ts_code', 'trade_date', 'pre_1_pct_chg']], on=['ts_code', 'trade_date']) save_data(guoli,'guoli.csv') guoli=guoli.loc[(guoli['pre_1_pct_chg']>=-7)&(guoli['pre_1_pct_chg']<=-3)] data = data.loc[data['ts_code'].isin(guoli['ts_code'])] print(guoli.shape,guoli.iloc[:,-5:].describe()) # data = data.loc[data['ts_code'].isin(guoli['ts_code'])] # 过滤新股 list_days=basic().list_days(guoli,list_days=25) guoli=guoli.merge(list_days,on=['ts_code','trade_date']) print(guoli.shape[0]) guoli['ma']=guoli['amount']/guoli['vol']*10 save_data(guoli,'guoli相似股票数据.csv') for ps in ['high','low','ma']: guoli['%s/pre_close'%ps]=100*(guoli[ps]/guoli['pre_close']-1) print(guoli['%s/pre_close'%ps].mean()) print(data.shape) print()
def red_line(data): # rawdata = read_data('daily', start_date=start_date, end_date=end_date) # limit = read_data('stk_limit', start_date=start_date, end_date=end_date) # data = rawdata.merge(limit[['ts_code', 'trade_date', 'up_limit']], on=['ts_code', 'trade_date']) data['red_line']=data.apply(lambda x: 1 if ((x['up_limit']==x['close'])&(x['low']==x['close'])) else 0,axis=1) data['reback_limit']=data.apply(lambda x: 1 if ((x['up_limit']==x['close'])&(x['open']==x['close'])) else 0,axis=1) pre = basic().pre_data(data, label=['red_line'], pre_days=1) data = data.merge(pre[['ts_code', 'trade_date', 'pre_1_red_line']], on=['ts_code', 'trade_date']) data=data.loc[(data['pre_1_red_line'] == 1)&(data['reback_limit'] == 1)] print(data.shape) list_days=basic().list_days(data,list_days=25) print(list_days.shape) data=data.iloc[:,:2].merge(list_days,on=['ts_code','trade_date']) print(data.shape) return data
def guangbai(start_date,end_date): # 两个普通涨停,一个一字板,后日表现 rawdata = read_data('daily', start_date=start_date, end_date=end_date) limit = read_data('stk_limit', start_date=start_date, end_date=end_date) data = rawdata.merge(limit[['ts_code', 'trade_date', 'up_limit','down_limit']], on=['ts_code', 'trade_date']) print(data.shape) # data['cd'] = data.apply(lambda x: 1 if (x['close'] == x['down_limit'])&(x['open']>0.98*x['pre_close']) else 0, axis=1) data['open_less_limit']= data.apply(lambda x: 1 if (x['open']!=x['up_limit'])&(x['close']==x['up_limit'])&(x['open'] >= (x['pre_close']*1.05)) else 0, axis=1) data['line_limit'] = data.apply(lambda x: 1 if x['low'] == x['up_limit'] else 0, axis=1) data['or_limit']=data.apply(lambda x: 1 if( x['open'] != x['up_limit'])&(x['close'] == x['up_limit']) else 0, axis=1) data['nn'] = data.apply(lambda x: 1 if (x['high'] < x['up_limit']) & (x['close'] > x['down_limit']) else 0, axis=1) guoli=data.copy() for day in range(len(days)): if not days[day]: continue pre = basic().pre_data(data, label=[days[day]], pre_days=day+1) guoli = guoli.merge(pre[['ts_code', 'trade_date', 'pre_%s_%s'%(day+1,days[day])]], on=['ts_code', 'trade_date']) guoli=guoli.loc[guoli['pre_%s_%s'%(day+1,days[day])]==1] data=data.loc[data['ts_code'].isin(guoli['ts_code'])] print(day,guoli.shape) save_data(guoli,'guangbo.csv') # 过滤新股 list_days=basic().list_days(guoli,list_days=30) guoli=guoli.merge(list_days,on=['ts_code','trade_date']) print(guoli.shape[0]) guoli['ma']=guoli['amount']/guoli['vol']*10 save_data(guoli,'guangbo相似股票数据%s%s.csv'%(','.join(days),end_date)) for ps in ['high','low','ma','open','close']: guoli['%s/pre_close'%ps]=100*(guoli[ps]/guoli['pre_close']-1) print(ps,guoli['%s/pre_close'%ps].mean()) print('close_limit_up:',guoli.loc[guoli['close']==guoli['up_limit']].shape[0]/guoli.shape[0]) print('open_limitup:',guoli.loc[guoli['open']==guoli['up_limit']].shape[0]/guoli.shape[0]) print('line_red:',guoli.loc[(guoli['open']==guoli['up_limit'])&(guoli['close']==guoli['up_limit'])&(guoli['low']==guoli['up_limit'])].shape[0]/guoli.shape[0]) print(guoli.shape) print()
def buy_model(red_line,raw_data): res=[] # 单独处理涨跌停数据 # 做切分处理,如果满足rate*pre_close>low,卖出,否则delete pre_date=basic().pre_date(red_line[['trade_date']],days=-1) red_line=red_line.merge(pre_date,on=['trade_date']) red_line['trade_date']=red_line['pre_-1_date'] red_line.drop(['pre_-1_date'],axis=1,inplace=True) print(red_line.shape) red_line=red_line.iloc[:,:2].merge(raw_data.iloc[:,:11],on=['ts_code','trade_date']) red_line['low_pct']=100*(red_line['low']/red_line['pre_close']-1) for cut in (['down']+list(range(-8,10,2))+['up']): data=raw_data.iloc[:,:11].copy() if cut=='down': buy_data=red_line.loc[red_line['low']==red_line['down_limit']].copy() PB='down_limit' elif cut=='up': buy_data=red_line.loc[red_line['low']==red_line['up_limit']].copy() PB='up_limit' else: buy_data=red_line.loc[cut>red_line['low_pct']].copy() data['PB']=data['pre_close']*(1+0.01*cut) PB='PB' if buy_data.empty: continue print(cut) roi=sheep.wool2(buy_data,data,PRICEB=PB) res.append([cut,roi.shape[0],roi.iloc[-1,-1]]) res=pd.DataFrame(res,columns=['cut','n_days','pct']) return res
def jiai(start_date,end_date): # 非涨跌停,两个一字板,一字板回封,收盘-2~-6low==down_limit rawdata = read_data('daily', start_date=start_date, end_date=end_date) limit = read_data('stk_limit', start_date=start_date, end_date=end_date) data = rawdata.merge(limit[['ts_code', 'trade_date', 'up_limit','down_limit']], on=['ts_code', 'trade_date']) print(data.shape) data['limit'] = data.apply(lambda x: 1 if x['low'] == x['up_limit'] else 0, axis=1) data['ulrl']=data.apply(lambda x:1 if ((x['up_limit']==x['close'])&(x['open']==x['close'])&(x['low']<x['close'])) else 0,axis=1) data['nn'] = data.apply(lambda x: 1 if ((x['close'] != x['up_limit']) & (x['close'] != x['down_limit'])) else 0, axis=1) guoli=data.copy() for day in range(3,5): pre = basic().pre_data(data, label=['limit'], pre_days=day) guoli = guoli.merge(pre[['ts_code', 'trade_date', 'pre_%s_limit'%day]], on=['ts_code', 'trade_date']) guoli=guoli.loc[guoli['pre_%s_limit'%day]==1] data=data.loc[data['ts_code'].isin(guoli['ts_code'])] print(day,guoli.shape) pre = basic().pre_data(data, label=['pct_chg','low','down_limit'], pre_days=1) guoli = guoli.merge(pre[['ts_code', 'trade_date','pre_1_low','pre_1_down_limit']], on=['ts_code', 'trade_date']) guoli=guoli.loc[(guoli['pre_1_low']==guoli['pre_1_down_limit'])] data = data.loc[data['ts_code'].isin(guoli['ts_code'])] pre = basic().pre_data(data, label=['nn'], pre_days=5) guoli = guoli.merge(pre[['ts_code', 'trade_date', 'pre_5_nn']], on=['ts_code', 'trade_date']) guoli=guoli.loc[(guoli['pre_5_nn']==1)] data = data.loc[data['ts_code'].isin(guoli['ts_code'])] pre = basic().pre_data(data, label=['ulrl'], pre_days=2) guoli = guoli.merge(pre[['ts_code', 'trade_date', 'pre_2_ulrl']], on=['ts_code', 'trade_date']) guoli = guoli.loc[guoli['pre_2_ulrl' ] == 1] data = data.loc[data['ts_code'].isin(guoli['ts_code'])] # 过滤新股 save_data(guoli,'jiai.csv') list_days=basic().list_days(guoli,list_days=25) guoli=guoli.merge(list_days,on=['ts_code','trade_date']) print(guoli.shape[0]) guoli['ma']=guoli['amount']/guoli['vol']*10 save_data(guoli,'jiai相似股票数据.csv') for ps in ['high','low','ma']: guoli['%s/pre_close'%ps]=100*(guoli[ps]/guoli['pre_close']-1) print(guoli['%s/pre_close'%ps].mean()) print(data.shape) print()
def line_stock(): raw_data=read_data('daily',start_date=start_date,end_date=end_date) data=raw_data.loc[raw_data['low']==raw_data['high']] print(data.shape) list_days=basic().list_days(data) print(list_days.shape) data=data.merge(list_days,on=['ts_code','trade_date']) res1=sheep.wool2(data.loc[data['pct_chg']>0],raw_data,) res2=sheep.wool2(data.loc[data['pct_chg']<0],raw_data) print(res1.describe()) print(res2.describe()) print()
def first_limit(data=None, start_date=None, end_date=None, limit_type='up', days=1): """ 首板涨停,pre_1_is_roof==0,is_roof==1 """ if data is None: data = limit_stock(start_date, end_date, limit_type='both') if limit_type == 'up': data['is_roof'] = data.apply(lambda x: 99 if x['low'] == x['%s_limit' % limit_type] else 1 if x['close'] == x[ '%s_limit' % limit_type] else 0, axis=1) # elif limit_type=='DOWN': # data['is_floor']=data.apply(lambda x:-99 if x['high']==x['%s_limit'%limit_type] else -1 if x['close']==x['%s_limit'%limit_type] else 0,axis=1) # elif limit_type == 'BOTH': # data['limit'] = data.apply( # lambda x: 99 if x['low'] == x['up_limit'] else 1 if x['close'] == x['up_limit'] else -1 if x['close']==x['down_limit'] else -99 if x['high']==x['down_limit'] else 0, axis=1) for i in range(1, days + 1): df = basic.basic().pre_data(data, label=['is_roof'], pre_days=i) data = data.merge(df[['ts_code', 'trade_date', 'pre_%s_is_roof' % i]], on=['ts_code', 'trade_date']) return data.dropna()
def process(df, expressions, st=False, next_day=1, new=False): ds = df.copy() ds.sort_values(['ts_code', 'trade_date'], inplace=True) for i in range(len(expressions)): if not expressions[i]: continue ds[i] = expressions[i](ds) ds[i] = ds.groupby('ts_code')[i].shift( len(expressions) - i - 1 + next_day) # save_data(ds, '标注信息表2.csv') for e in range(len(expressions)): if not expressions[e]: continue ds = ds.loc[ds[e] == True] print(ds.shape) # 过滤新股 if not new: list_days = basic().list_days(ds, list_days=30) ds = ds.merge(list_days, on=['ts_code', 'trade_date']) if not st: ds = ds.loc[ds['up_limit'] / ds['pre_close'] >= 1.08] print(ds.shape) return ds
def func1(data, modes, day): ''' 给入股票数据,返回后续表现 @param data: dataframe,股票代码,交易日期 @param mode: 表现方式 @return: dataframe股票后续表现 ''' start, end = data['trade_date'].min() raw_data = read_data('daily', start_date=start) # mode=[close,open,high,mean,low,pct_chg,low_open,high_open] for mode in modes: if mode in ['open', 'close', 'high', 'low']: pass else: # if mode not in ['low_open', 'high_open']: pre = basic().pre_data(data, label=[mode], pre_days=day) raw_data = raw_data.merge( pre[['ts_code', 'trade_date', 'pre_%s_%s' % (day, mode)]], on=['ts_code', 'trade_date']) print('%s/pre_close' % mode, raw_data['pre'])
def filter(data, conditions): # [0,'ULRL','ULL'] # ['NOU',0,'LL,RLL','LL',‘UL','DL',[2,4]]:开盘不涨停,无,一字板or一字板回封,一字板, res = data.copy() for day in range(len(conditions)): if conditions[day]: if 'pre_%s_%s' % (day, conditions[day]) not in res.columns: pre = basic().pre_data(data, label=[conditions[day]], pre_days=day) res = res.merge(pre[[ 'ts_code', 'trade_date', 'pre_%s_%s' % (day, conditions[day]) ]], on=['ts_code', 'trade_date']) res = res.loc[res['pre_%s_%s' % (day, conditions[day])] == 1] data = data.loc[data['ts_code'].isin(res['ts_code'].unique())] if res.empty: return res print(res.shape, data.shape) return res
def idea7(XISHU=0.998, UPPER=False, PERIOD=5, TIMES=5, CHGPCT=[1, 2]): FORMAT = lambda x: '%.4f' % x label = ['low_ma5'] path = 'D:\\workgit\\stock\\util\\stockdata\\' # pct=list(range(-11,11)) today = datetime.datetime.today().date() tool = basic.basic() pro = ts.pro_api() while (not os.path.isfile(path + str(today) + '\data.csv')) or ( not os.path.isfile(path + str(today) + '\daily-basic.csv')): today = today - datetime.timedelta(1) # 基础数据,市值信息, data = pd.read_csv(path + str(today) + '\data.csv', index_col=0, dtype={'trade_date': object})[[ 'ts_code', 'trade_date', 'close', 'pct_chg', 'low', 'ma5' ]] # data=data[data['trade_date']>='20191201'] data['lowma5'] = data.apply(lambda x: 1 if x['low'] > (XISHU * x['ma5']) else 0, axis=1) if UPPER: data['lowma5'] = data.apply(lambda x: 1 if (x['lowma5'] == 1) & (x['low'] <= (XISHU + UPPER) * x['ma5']) else 0, axis=1) stock_baisc = pd.read_csv( path + str(today) + '\daily-basic.csv', index_col=0, dtype={'trade_date': object})[['ts_code', 'trade_date', 'turnover_rate', 'total_mv']] history = pd.read_csv(path + str(today) + '\history_name.csv', index_col=0, dtype={'trade_date': object}) history['name'] = 'st' path = path + str(today) + 'idea7\\' if not os.path.isdir(path): os.makedirs(path) print(path) today = today.strftime('%Y%m%d') df = data.copy() df.sort_values(by='trade_date', inplace=True) # df.to_csv(path+'2019datalowma5.csv') c_times = df.groupby('ts_code')['lowma5'].rolling(PERIOD).sum() c_times.index = c_times.index.droplevel() c_times = pd.DataFrame(c_times) c_times.rename(columns={'lowma5': 'count'}, inplace=True) # count_times=count_times[count_times['%s_%s_uptimes'%(label,period)]>=up_period] df = df.join(c_times) df = df.merge(history, on=['ts_code', 'trade_date'], how='left') print(df.shape) df = df[df['name'].isna()] df.drop(columns='name', inplace=True) print(df.shape) df.dropna(inplace=True) # # df.to_csv(path + 'data.csv') if CHGPCT: df = df[(df['count'] >= TIMES) & (df['pct_chg'] >= CHGPCT[0]) & (df['pct_chg'] <= CHGPCT[1])][['ts_code', 'trade_date']] if df.empty: return pd.DataFrame() else: df.to_csv(path + 'low%sma%stimes%s(%s-%s).csv' % (XISHU, PERIOD, TIMES, CHGPCT[0], CHGPCT[1])) wool = sheep.wool(df, data) if not wool.empty: wool.to_csv( path + 'low%s-%sma%stimes%s(%s-%s)huisuxiaoguo.csv' % (XISHU, XISHU + UPPER, PERIOD, TIMES, CHGPCT[0], CHGPCT[1])) res = df[df['trade_date'] == today][['ts_code']] if res.empty: print('%s无数据' % today) else: res.to_csv(path + 'low%sma%stimes%s(%s-%s)%s.txt' % (XISHU, PERIOD, TIMES, CHGPCT[0], CHGPCT[1], today), index=False) return wool
import tushare as ts import stock.util.stockfilter as filter pro = ts.pro_api() FORMAT = lambda x: '%.4f' % x t = 1 NDAY = 3 slected_date = '20200706' # label = ['low_ma5'] path = 'D:\\workgit\\stock\\util\\stockdata\\' # pct=list(range(-11,11)) today = datetime.datetime.today().date() tool = basic.basic() while (not os.path.isfile(path + str(today) + '\data.csv')): # or (` # not os.path.isfile(path + str(today) + '\daily-basic.csv')) or ( # not os.path.isfile(path + str(today) + '\stock-label.csv')): today = today - datetime.timedelta(1) # 基础数据,市值信息, raw_data = pd.read_csv(path + str(today) + '\data.csv', index_col=0, dtype={'trade_date': object })[['ts_code', 'trade_date', 'close', 'pct_chg']] limit_list = pro.stk_limit(trade_date=slected_date) print(limit_list.shape) df = raw_data[raw_data['trade_date'] == slected_date].merge(
# from tflearn.layers.core import fully_connected from keras.datasets import mnist from keras.layers import Input, Dense from keras.models import Model import tensorflow as tf from tensorflow import keras from stock.sql.data import save_data, read_data from sklearn.model_selection import train_test_split start_date = '20170101' end_date = '20181231' TEST_SIZE = 0.3 num_classes = 2 CUT = 0.5 raw_dataset = read_data('daily', start_date=start_date, end_date=end_date) df = basic().pre_data(raw_dataset, label=['close'], pre_days=5) data = raw_dataset.merge(df[['ts_code', 'trade_date', 'pre_5_close']], on=['ts_code', 'trade_date']) data['pct'] = data['close'] / data['pre_5_close'] - 1 # 正样本 data_t = data.loc[data['pct'] > CUT][['ts_code', 'trade_date', 'pct']].copy() # 负样本 data_f = data.loc[data['pct'] < CUT][['ts_code', 'trade_date', 'pct']].copy() data_f = data_f.sample(n=data_t.shape[0], random_state=1) def pro(data, label): data_sample = np.zeros(shape=(data.shape[0], 40))
by=[vars.TS_CODE, vars.TRADE_DATE])['days'].min() df.reset_index(inplace=True) save_data(df, '增长统计.csv') print(data.shape) # start, end = '20190701', '20202828' # days, growth = 270, 2 start, end = '20160101', '20201231' days, growth = 30, 2 if __name__ == '__main__': stock = Stock(start, end) list_days = basic().list_days(stock.raw_data, list_days=30) stock.raw_data = stock.raw_data.merge(list_days, on=[vars.TS_CODE, vars.TRADE_DATE]) for n in [30, 60]: stock.increse_count(n, 2) # stock.period() # stock.stock_increse(days, growth) # save_data(stock.growth_data,'%s-%s-%s增长股票.csv'%(start,days,growth)) # increase_info=stock.growth_data.groupby(vars.TRADE_DATE)[vars.TS_CODE].count() # save_to_sql(increase_info,'growth_%s_%s'%(days,growth)) # save_data(increase_info,'%s-%s-%s增长-数量.csv'%(start,days,growth)) # save_data(increase,'%s增长股票.csv') # stock.analyse_basic() # stock.analyse_company() # stock.mv()
def lianban(start_date, end_date): # 两个普通涨停 rawdata = read_data('daily', start_date=start_date, end_date=end_date) # ma = pd.read_csv('D:\\workgit\\stock\\data\\break_limit\\' + 'ma%s.csv' % start_date, index_col=0, # dtype={'trade_date': object}) # ma=pd.DataFrame() # for ts_code in rawdata['ts_code'].unique(): # ma=pd.concat([ma,ts.pro_bar(ts_code,start_date=start_date,end_date=end_date,ma=[5])],ignore_index=True) # save_data(ma[['ts_code', 'trade_date', 'ma5']],'ma%s.csv'%start_date) limit = read_data('stk_limit', start_date=start_date, end_date=end_date) data = rawdata.merge(limit[['ts_code', 'trade_date', 'up_limit', 'down_limit']], on=['ts_code', 'trade_date']) # data = data.merge(ma[['ts_code', 'trade_date', 'ma5']], on=['ts_code', 'trade_date']) print(data.shape) # data['cd'] = data.apply(lambda x: 1 if (x['close'] == x['down_limit'])&(x['open']<0.95*x['pre_close']) else 0, axis=1) # data['open_less_limit']= data.apply(lambda x: 1 if (x['open']!=x['up_limit'])&(x['close']==x['up_limit'])&(x['open'] >= (x['pre_close']*1.05)) else 0, axis=1) # data['line_limit'] = data.apply(lambda x: 1 if x['low'] == x['up_limit'] else 0, axis=1) data['re_limit']=data.apply(lambda x: 1 if (x['close'] == x['up_limit']) & (x['close'] == x['open'])&(x['low'] < x['up_limit']) else 0, axis=1) # data['or_limit'] = data.apply( # lambda x: 1 if (x['open'] != x['up_limit']) & (x['close'] == x['up_limit']) else 0, axis=1) data['c_limit']=data.apply( lambda x: 1 if (x['close'] == x['up_limit']) else 0, axis=1) data['nn'] = data.apply(lambda x: 1 if (x['close'] != x['up_limit']) & (x['close'] != x['down_limit']) else 0, axis=1) # data['c_c'] = data.apply(lambda x: 1 if (x['open']== x['up_limit']) & (x['low'] == x['down_limit'])&(x['pct_chg']<0) else 0, axis=1) # data['c_c'] = data.apply(lambda x: 1 if (x['up_limit']==x['open']) &(0<=x['pct_chg']) &(x['pct_chg']<=5)else 0, axis=1) # data['c_c3'] = data.apply(lambda x: 1 if (x['down_limit']==x['close']) &(x['open']<x['pre_close']) else 0, axis=1) # data['c_c4'] = data.apply(lambda x: 1 if (x['up_limit']!=x['close']) & (x['up_limit']==x['open']) &(x['pct_chg']>5) else 0, axis=1) # data['c_c5'] = data.apply(lambda x: 1 if (1.02<x['open'] / x['pre_close'] <= 1.06) & (-2>x['pct_chg'] >= -6) else 0, axis=1) # data['c_c1'] = data.apply(lambda x: 1 if (-4<(x['open']/ x['pre_close']-1)<-0.02) &((-2>x['pct_chg']>-5) ) else 0, axis=1) # data['all']=1 # data['m_ma5'] = data.apply( # lambda x: 1 if (x['close'] > x['ma5' # ]) & (x['pct_chg'] <= -4) & (x['pct_chg'] >= -6) else 0, axis=1) guoli = data.copy() for day in range(len(days)): if not days[day]: continue pre = basic().pre_data(data, label=[days[day]], pre_days=day + 1) guoli = guoli.merge(pre[['ts_code', 'trade_date', 'pre_%s_%s' % (day + 1, days[day])]], on=['ts_code', 'trade_date']) guoli = guoli.loc[guoli['pre_%s_%s' % (day + 1, days[day])] == 1] data = data.loc[data['ts_code'].isin(guoli['ts_code'])] print(day, guoli.shape) # save_data(guoli, 'lianban.csv',fp_date=True) # 过滤新股 list_days = basic().list_days(guoli, list_days=30) guoli = guoli.merge(list_days, on=['ts_code', 'trade_date']) print(guoli.shape[0]) guoli['ma'] = guoli['amount'] / guoli['vol'] * 10 guoli=guoli.loc[guoli['up_limit']/guoli['pre_close']>=1.08] save_data(guoli, 'lianban1%s%s.csv' % (','.join(days), end_date),fp_date=True) for ps in ['high', 'low', 'ma', 'open', 'close']: guoli['%s/pre_close' % ps] = 100 * (guoli[ps] / guoli['pre_close'] - 1) print(ps, guoli['%s/pre_close' % ps].mean()) # print(ps, guoli['%s/pre_close' % ps].describe()) print('close_limit_up:', guoli.loc[guoli['close'] == guoli['up_limit']].shape[0] / guoli.shape[0]) print('close_down_up:', guoli.loc[guoli['close'] == guoli['down_limit']].shape[0] / guoli.shape[0]) print('open_limitup:', guoli.loc[guoli['open'] == guoli['up_limit']].shape[0] / guoli.shape[0]) print('line_red:', guoli.loc[(guoli['open'] == guoli['up_limit']) & (guoli['close'] == guoli['up_limit']) & ( guoli['low'] == guoli['up_limit'])].shape[0] / guoli.shape[0]) print('high_limitup:', guoli.loc[guoli['high'] == guoli['up_limit']].shape[0] / guoli.shape[0]) # print('dont keep up limit ',guoli.loc[guoli['close'] == guoli['up_limit']].shape[0] / guoli.loc[guoli['high'] == guoli['up_limit']].shape[0] ) print('pobanhoupct',guoli.loc[guoli['open'] == guoli['up_limit']]['pct_chg'].mean()) # print(guoli.shape) # guoli=guoli.loc[(guoli['open']==guoli['up_limit'])&(guoli['low']<guoli['up_limit'])] # rawdata=rawdata.loc[rawdata['ts_code'].isin(guoli['ts_code'].unique())] # for pct in range(0,9,1): # rawdata['pb']=rawdata['open']-rawdata['pre_close']*pct*0.01 # rawdata['pb']=rawdata.apply(lambda x:x['pb'] if x['pb']>=x['low'] else None,axis=1) # rawdata['ps']=rawdata['high']/2+rawdata['low']/2 # res=sheep.wool2(guoli,rawdata,PRICEB='pb',PRICES='ps') # save_data(res,'open=limit-%s-sell-mid.csv'%pct,fp_date=True) return guoli
def first_up(raw_data,start_date='20200201', end_date='20200215', PRICEB='open', NEWPRICEB='price_buy', PRICES='close', sell_date=1, buy_date=2, CUTS=2,CHANGE=['open', 'pre_close'], model=None, model3_pct=1.01): if buy_date != 1: price_buy = basic.basic().pre_data( raw_data[['ts_code', 'trade_date', PRICEB, '%s/%s' % (CHANGE[0], CHANGE[1])]], label=[PRICEB, '%s/%s' % (CHANGE[0], CHANGE[1])], new_label=[NEWPRICEB, 'open_pre_close_change', ], pre_days=-buy_date + 1) raw_data = raw_data.merge(price_buy[['ts_code', 'trade_date', NEWPRICEB, 'open_pre_close_change']], on=['ts_code', 'trade_date']) # 筛选收盘涨停数据 data = raw_data.loc[:, ['ts_code', 'trade_date', 'close', 'pre_close', 'up_limit', 'open_pre_close_change']] print(data.shape) data = data.merge( basic.basic().pre_data(data[['ts_code', 'trade_date', 'up_limit']], label=['up_limit'], new_label=['pre_up_limit'])[ ['ts_code', 'trade_date', 'pre_up_limit']], on=['ts_code', 'trade_date']) print(data.shape) data.dropna(inplace=True) print(data.shape) data = data[data['close'] == data['up_limit']] # print(data.shape) # raw_data=raw_data[raw_data["ts_code"].isin(data['ts_code'].unique()) == True] # print('不在涨停df中的股票out',raw_data.shape) # print(raw_data['ts_code'].unique().shape) # buy_data = raw_data.loc[:, ['ts_code', 'trade_date', PRICES]] # z1=sheep.wool(data, raw_data, PRICEB='price_buy') # print(z1.iloc[-1, -1]) # 全市场,首板,涨停回溯 # z2 = sheep.wool(data, raw_data) # print(z2.iloc[-1, -1]) # # t1=sheep.wool(data[data['pre_close'] != data['pre_up_limit']], # # raw_data, PRICEB='price_buy') # # print(t1.iloc[-1, -1]) # t2 = sheep.wool(data[data['pre_close'] != data['pre_up_limit']], # raw_data) # print(t2.iloc[-1, -1]) # data.to_csv('%s~%slimit_stock_list.csv' % (start_date, end_date)) # res_all = pd.DataFrame() if model: PRICES = 'price_sell' if model == 1: raw_data[PRICES] = raw_data.apply( lambda x: x['open'] if x['open'] >= x['pre_close'] else x['pre_close'] if x['pre_close'] <= x[ 'high'] else x['close'],axis=1) if model == 2: raw_data[PRICES] = 10 * raw_data['amount'] / raw_data['vol'] if model==3: raw_data[PRICES]=raw_data.apply(lambda x:x['open'] if x['open'] >(x['pre_close']*1.01) else x['close'],axis=1) if model==4: raw_data[PRICES]=raw_data.apply(lambda x:x['open'] if x['open']>=(1.03*x['pre_close']) else x['open']*1.01 if x['high']>(x['open']*1.01) else x['close'] ,axis=1) # temp = basic.basic().pre_data(raw_data[['ts_code', 'trade_date', 'ma']], label=['ma'], new_label=[PRICES]) # raw_data = raw_data.merge(temp[['ts_code', 'trade_date', PRICES]],on=['ts_code', 'trade_date']) res_some = pd.DataFrame() for cut in range(-12, 11, CUTS): if cut < -10: buy_data = data[data['open_pre_close_change'] == -9999] print('open down') elif cut > 8: buy_data = data[data['open_pre_close_change'] == 9999] print('open up') else: buy_data = data[(data['open_pre_close_change'] < cut + 2) & (data['open_pre_close_change'] >= cut)] print('%s<=x<%s' % (cut, cut + CUTS)) if buy_data.empty: # res_all.loc['%s~%s' % (cut, cut + CUTS), 'res'] = None res_some.loc['%s~%s' % (cut, cut + CUTS), 'res'] = None print(buy_data['open_pre_close_change'].max(), buy_data['open_pre_close_change'].min(), buy_data['open_pre_close_change'].mean()) continue # wool_all = sheep.wool(buy_data, raw_data, PRICEB='price_buy', PRICES=PRICES, days=sell_date) # if wool_all.iloc[-1, -1]: # wool_all.to_csv('pct%swool_all%s~%s.csv' % (cut, start_date, end_date)) # print('all%s' % cut, wool_all.iloc[-1, -1]) # res_all.loc['%s~%s' % (cut, cut + CUTS), 'res'] = wool_all.iloc[-1, -1] # res_all.loc['%s~%s' % (cut, cut + CUTS), 'n_mean'] = wool_all['n'].mean() # res_all.loc['%s~%s' % (cut, cut + CUTS), 'days'] = wool_all.shape[0] wool_some = sheep.wool(buy_data[buy_data['pre_close'] != buy_data['pre_up_limit']], raw_data, PRICEB='price_buy', PRICES=PRICES, days=sell_date) if wool_some.empty: continue if wool_some.iloc[-1, -1]: wool_some.to_csv('pct%swool_some%s~%s-%s.csv' % (cut, start_date, end_date,sell_date)) print('some', wool_some.iloc[-1, -1]) res_some.loc['%s~%s' % (cut, cut + CUTS), 'res'] = wool_some.iloc[-1, -1] res_some.loc['%s~%s' % (cut, cut + CUTS), 'n_mean'] = wool_some['n'].mean() res_some.loc['%s~%s' % (cut, cut + CUTS), 'days'] = wool_some.shape[0] # buy_data.to_csv('pct%slimit_stock_list%s~%s.csv' % (cut, start_date, end_date)) # res_all.to_csv('cut%s-of-all(%s,%s)%s~%s.csv' % (CUTS, PRICEB, PRICES, start_date, end_date)) # res_some.to_csv('cut%s-of-first(%s,%s)%s~%s.csv' % (CUTS, PRICEB, PRICES, start_date, end_date)) return res_some
& (o.raw_data['pct_chg'] <= 11)] print(o.raw_data.shape) o.raw_data.dropna(inplace=True) print(o.raw_data.shape) # 1.卖出当日股价较前日收盘的变化 o.raw_data['ma'] = 10 * o.raw_data['amount'] / o.raw_data['vol'] o.raw_data['pct:h-l'] = (o.raw_data['high'] - o.raw_data['low']) o.raw_data['pct:o-c'] = (o.raw_data['open'] - o.raw_data['close']) o.raw_data['pct:h-o'] = (o.raw_data['high'] - o.raw_data['open']) print('%s个交易日' % o.raw_data['trade_date'].unique().shape[0]) o.data = o.raw_data.loc[(o.raw_data['pre_%s_is_roof' % days] == 0) & (o.raw_data['pre_%s_is_roof' % (days - 1)] == 1)].copy() df = basic().pre_data(o.data, label=['open'], new_label=['pre_open']) o.data = o.data.merge(df[['ts_code', 'trade_date', 'pre_open']], on=['ts_code', 'trade_date']) o.raw_data.dropna(inplace=True) print(o.raw_data.shape) pct = pd.DataFrame() # for con in ['all','up']+list(range(1,5)): for con in ['all', 'up']: df = o.select(con, days=days) pct_some = pd.DataFrame() for item in [ 'open', 'close', 'ma', 'high', 'low', 'pct:h-l', 'pct:o-c', 'pct:h-o' ]:
start_date = '20200701' end_date = '20201231' FORMAT = lambda x: '%.3f' % x # cuts_format = 'open/pre_close=100*(open/pre_close-1)' cuts_format = 'pct_chg' limit = vars.CLOSE buy, sell, days, bins = vars.CLOSE, vars.OPEN, 1, 1 raw_data = read_data('daily', start_date=start_date, end_date=end_date).merge(read_data('stk_limit', start_date=start_date, end_date=end_date)[[ 'ts_code', 'trade_date', 'up_limit', 'down_limit' ]], on=['ts_code', 'trade_date']) list_days = basic().list_days(raw_data, list_days=30) raw_data = raw_data.merge(list_days, on=['ts_code', 'trade_date']) # ds=open_cut(raw_data,cuts_format=vars.PCT_CHG,limit=vars.CLOSE,bins=1) # ds=open_cut(raw_data,limit=vars.OPEN,bins=1,PRICEB=vars.OPEN,PRICES=vars.CLOSE,days=0) ds = open_cut(raw_data, cuts_format, limit=limit, bins=bins, PRICEB=buy, PRICES=sell, days=days) save_data(ds, '%s-%s-%s-%s切分回溯%s.csv' % (limit, buy, days, sell, start_date))
def first_up( start_date='20200201', end_date='20200215', PRICEB='open', PRICES='close', sell_date=1, buy_date=2, CUTS=2, CHANGE=['open', 'pre_close'], ): NOTCONTAIN = sfilter.StockFilter().stock_basic(end_date, name="st|ST", market="科创板") raw_data = pd.read_sql_query( 'select * from daily where (trade_date>=%(start)s and trade_date<=%(end)s)', params={ 'start': start_date, 'end': end_date }, con=engine) stk_limit = pd.read_sql_query( 'select * from stk_limit where (trade_date>=%(start)s and trade_date<=%(end)s)', params={ 'start': start_date, 'end': end_date }, con=engine) raw_data.drop_duplicates(inplace=True) stk_limit.drop_duplicates(inplace=True) print(raw_data.shape, stk_limit.shape) raw_data = raw_data[raw_data["ts_code"].isin(NOTCONTAIN['ts_code']) == False] print('科创,st,out', raw_data.shape) raw_data = raw_data.merge( stk_limit.loc[:, ['ts_code', 'trade_date', 'up_limit', 'down_limit']], on=['ts_code', 'trade_date']) raw_data['%s/%s' % (CHANGE[0], CHANGE[1])] = raw_data.apply( lambda x: 99 if x[CHANGE[0]] == x['up_limit'] else -99 if x[CHANGE[0]] == x['down_limit'] else x[CHANGE[0]] / x[CHANGE[1]], axis=1) if buy_date != 1: price_buy = basic.basic().pre_data( raw_data[[ 'ts_code', 'trade_date', PRICEB, '%s/%s' % (CHANGE[0], CHANGE[1]) ]], label=[PRICEB, '%s/%s' % (CHANGE[0], CHANGE[1])], new_label=[ 'price_buy', 'xishu_pct', ], pre_days=-buy_date + 1) raw_data = raw_data.merge( price_buy[['ts_code', 'trade_date', 'price_buy', 'xishu_pct']], on=['ts_code', 'trade_date']) print(raw_data.shape) raw_data.dropna(inplace=True) print(raw_data.shape) # 筛选收盘涨停数据 data = raw_data.loc[:, [ 'ts_code', 'trade_date', 'close', 'pre_close', 'up_limit', 'xishu_pct' ]] print(data.shape) data = data.merge(basic.basic().pre_data( data[['ts_code', 'trade_date', 'up_limit']], label=['up_limit'], new_label=['pre_up_limit'])[['ts_code', 'trade_date', 'pre_up_limit']], on=['ts_code', 'trade_date']) print(data.shape) data = data[data['close'] == data['up_limit']] # print(data.shape) # raw_data=raw_data[raw_data["ts_code"].isin(data['ts_code'].unique()) == True] # print('不在涨停df中的股票out',raw_data.shape) # print(raw_data['ts_code'].unique().shape) # buy_data = raw_data.loc[:, ['ts_code', 'trade_date', PRICES]] # z1=sheep.wool(data, raw_data, PRICEB='price_buy') # print(z1.iloc[-1, -1]) z2 = sheep.wool(data, raw_data) print(z2.iloc[-1, -1]) # t1=sheep.wool(data[data['pre_close'] != data['pre_up_limit']], # raw_data, PRICEB='price_buy') # print(t1.iloc[-1, -1]) t2 = sheep.wool(data[data['pre_close'] != data['pre_up_limit']], raw_data) print(t2.iloc[-1, -1]) res_all = pd.DataFrame() res_some = pd.DataFrame() # data.to_csv('%s-%slimit_stock_list.csv' % (start_date, end_date)) for cut in range(-10, 12, CUTS): if cut < -9: buy_data = data[data['xishu_pct'] == -99] print('open down') elif cut > 10: buy_data = data[data['xishu_pct'] == 99] print('open up') else: buy_data = data[(data['xishu_pct'] < (1 + 0.01 * cut)) & (data['xishu_pct'] >= (0.98 + 0.01 * cut))] print('%s<=x<%s' % ((0.98 + 0.01 * cut), (1 + 0.01 * cut))) if buy_data.empty: res_all.loc[cut, 'res'] = None res_some.loc[cut, 'res'] = None print(cut, buy_data['xishu_pct'].max(), buy_data['xishu_pct'].min(), buy_data['xishu_pct'].mean()) continue wool_all = sheep.wool(buy_data, raw_data, PRICEB='price_buy', days=sell_date) if wool_all.iloc[-1, -1]: # wool_all.to_csv('%s-%spct%swool_all.csv' % (start_date, end_date, cut)) print('all%s' % cut, wool_all.iloc[-1, -1]) res_all.loc[cut, 'res'] = wool_all.iloc[-1, -1] res_all.loc[cut, 'n_mean'] = wool_all['n'].mean() res_all.loc[cut, 'days'] = wool_all.shape[0] wool_some = sheep.wool( buy_data[buy_data['pre_close'] != buy_data['pre_up_limit']], raw_data, PRICEB='price_buy', days=sell_date) if wool_some.iloc[-1, -1]: # wool_some.to_csv('%s-%spct%swool_some.csv' % (start_date, end_date, cut)) print('some', wool_some.iloc[-1, -1]) res_some.loc[cut, 'res'] = wool_some.iloc[-1, -1] res_some.loc[cut, 'n_mean'] = wool_some['n'].mean() res_some.loc[cut, 'days'] = wool_some.shape[0]