Exemple #1
0
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()
Exemple #2
0
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
Exemple #3
0
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
Exemple #4
0
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)
Exemple #5
0
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()
Exemple #6
0
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
Exemple #7
0
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()
Exemple #8
0
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
Exemple #9
0
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()
Exemple #10
0
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()
Exemple #11
0
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()
Exemple #12
0
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
Exemple #13
0
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'])
Exemple #14
0
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
Exemple #15
0
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
Exemple #16
0
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(
Exemple #17
0
# 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))
Exemple #18
0
            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()
Exemple #19
0
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
Exemple #20
0
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
Exemple #21
0
                        & (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'
    ]:
Exemple #22
0
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]