Exemplo n.º 1
0
def concept(limit):
    concept = pro.concept()
    count = 1

    concept_detail = pd.DataFrame()
    if os.path.isfile('concept_detail.csv'):
        concept_detail = pd.read_csv('concept_detail.csv')
    else:
        for id in concept['code'].unique():
            concept_detail = pd.concat(
                [concept_detail, pro.concept_detail(id=id)])

            count += 1
            if count % 190 == 0:
                time.sleep(60)
                print(concept_detail.shape)
        concept_detail.to_csv('concept_detail.csv', index=False)

    limit = limit.merge(concept_detail, on=['ts_code'])
    summary = pd.DataFrame(
        limit.groupby(['trade_date', 'concept_name'])['concept_name'].count())
    print(summary.info())
    summary.columns = ['count']
    print(summary.info())
    summary.reset_index(inplace=True)
    print(summary.info())
    save_data(summary, '概念股.csv')
    summary.sort_values(['trade_date', 'count'], ascending=False, inplace=True)
    print(summary['concept_name'].unique().shape)
Exemplo n.º 2
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()
Exemplo n.º 3
0
def fun1(limit_type='up'):
    res = pd.DataFrame()
    #
    data = 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 = data.merge(limit, on=['ts_code', 'trade_date'])
    data['is_roof'] = data.apply(
        lambda x: 99 if x['close'] == x['up_limit'] else 1
        if x['close'] == x['down_limit'] else x['pct_chg'],
        axis=1)
    for rate in [-99] + list(range(-10, 10)) + [99]:
        print(rate)
        df = data.loc[(data['is_roof'] >= rate)
                      & (data['is_roof'] < (rate + 1))].copy()
        if df.empty:
            continue
        # df['pct']=(df['close']/df['open']-1)*100
        # res.loc[rate,'pct']=df['pct'].mean()
        wool = sheep.wool2(df[['ts_code', 'trade_date']],
                           data,
                           PRICEB=PRICEB,
                           days=1)
        res.loc[rate, 'mean'] = wool.iloc[:, -3].mean()
        res.loc[rate, 'n'] = wool.iloc[-1, -2]
        res.loc[rate, 'all_pct'] = wool.iloc[-1, -1]

    save_data(res, 'pct_chg_cut_res%s-%s.csv' % (start_date, end_date))
Exemplo n.º 4
0
Arquivo: tips.py Projeto: swq90/stock
    def mv(self):

        df = pro.daily_basic(ts_code='',
                             trade_date=start,
                             fields='ts_code,trade_date,total_mv,circ_mv')
        growth_mv = df[df[vars.TS_CODE].isin(self.growth_data[vars.TS_CODE])]
        # ceil=1000*(int(df['total_mv'].max()//1000)+1)
        df_count_mv = pd.DataFrame()
        for col in 'total_mv,circ_mv'.split(','):
            # print(df[col].index)
            bins = [
                int(df.sort_values(col).iloc[x, df.columns.get_loc(col)]) + 1
                for x in range(0, df.shape[0], 200)
            ] + [
                int(df.sort_values(col).iloc[-1, df.columns.get_loc(col)]) +
                100
            ]
            # bins=bins.sort()
            df['all-%s-scope' % col] = pd.cut(df[col], bins)
            growth_mv['growth-%s-scope' % col] = pd.cut(growth_mv[col], bins)
            df_count_mv = pd.concat([
                group_ana(
                    df, 'all-%s-scope' % col, count_var='all-%s-scope' % col),
                group_ana(growth_mv,
                          'growth-%s-scope' % col,
                          count_var='growth-%s-scope' % col)
            ],
                                    axis=1)
            df_count_mv['rate'] = df_count_mv[
                'growth-%s-scope-pct' % col] / df_count_mv['all-%s-scope-pct' %
                                                           col]
            df_count_mv.reset_index(inplace=True, )
            save_data(df_count_mv, '%s 分析占比.csv' % col)
Exemplo n.º 5
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
Exemplo n.º 6
0
Arquivo: tips.py Projeto: swq90/stock
 def increse_count(self, days, growth):
     self.stock_increse(days, growth)
     save_data(stock.growth_data,
               '%s-%s-%s增长股票.csv' % (start, days, growth))
     increase_info = self.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))
Exemplo n.º 7
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)
Exemplo n.º 8
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()
Exemplo n.º 9
0
Arquivo: tips.py Projeto: swq90/stock
 def analyse_basic(self, ):
     self.basic = read_data('stock_basic')
     self.basic = self.basic[self.basic['list_status'] == 'L']
     growth_basic = self.basic[self.basic[vars.TS_CODE].isin(
         self.growth_data[vars.TS_CODE])]
     # vs_table=pd.DataFrame()
     for key in ['industry', 'area', 'is_hs']:
         count_allmarket = group_ana(self.basic, key)
         count_growth = group_ana(growth_basic, key)
         df = pd.concat([count_growth, count_allmarket],
                        ignore_index=True,
                        axis=1)
         save_data(df, '股票%s对比.csv' % key, encoding='utf_8_sig')
Exemplo n.º 10
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()
Exemplo n.º 11
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()
Exemplo n.º 12
0
Arquivo: tips.py Projeto: swq90/stock
    def period(self, N=60):
        data = pd.DataFrame()
        for n in range(7, N):
            df = self.stock_increse(n)
            df['pre_date'] = df['%s-date' % n]
            df['days'] = n
            df = df[[vars.TS_CODE, vars.TRADE_DATE, 'pre_date', 'days']]
            data = pd.concat([data, df], ignore_index=True)
        save_data(data, '增长速度.csv')
        df = data.groupby(by=[vars.TS_CODE, vars.TRADE_DATE])['pre_date'].min()
        df = pd.DataFrame(df)
        df['min_days'] = data.groupby(
            by=[vars.TS_CODE, vars.TRADE_DATE])['days'].min()

        df.reset_index(inplace=True)
        save_data(df, '增长统计.csv')
        print(data.shape)
Exemplo n.º 13
0
    def segment(self, days=1):

        res = pd.DataFrame()
        for cut in self.data['Categories'].unique():
            df = self.data.loc[self.data['Categories'] == cut]
            if df.empty:
                res.loc[str(cut), 'roi'] = None
                continue
            res_seg = self.roi(df, days=days)
            if res_seg.empty:
                res.loc[str(cut), 'roi'] = None
                continue
            save_data(
                res_seg,
                '首板部分回溯%s_%s_%s_%s_%s2.csv' % (cut, self.PRICEB, self.PRICES,
                                               self.start_date, self.end_date))
            res.loc[str(cut), 'roi'] = res_seg.iloc[-1, -1]
            res.loc[str(cut), 'n_mean'] = res_seg['n'].mean()
            res.loc[str(cut), 'days'] = res_seg.shape[0]
        save_data(
            res, '首板分类回溯汇总_%s_%s_%s_%s.csv' %
            (self.PRICEB, self.PRICES, self.start_date, self.end_date))
        return res
Exemplo n.º 14
0
import pandas as pd
from stock.sql.data import read_data, save_data
from stock.util import vars

start_date, end_date = '20200625', '20200730'
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'])
df_high = data[data[vars.HIGH] == data[vars.UP_LIMIT]]
df_break = data[(data[vars.HIGH] == data[vars.UP_LIMIT])
                & (data[vars.CLOSE] != data[vars.UP_LIMIT])]
df1 = df_high.groupby('trade_date')['ts_code'].size()
df2 = df_break.groupby('trade_date')['ts_code'].size()
df = pd.DataFrame([df1, df2])
print(df)
save_data(df, 'break_limit.py.csv')
Exemplo n.º 15
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
Exemplo n.º 16
0
        print(open_res)

        for open in open_res:
            if not pre_1:
                pre_1.append(con.pop(0))

            for pre in pre_1:
                conditions = [open, pre] + con
                red_line = filter(raw_data, conditions)
                print(conditions)
                if red_line.empty:
                    print('no stock')
                    continue

                save_data(red_line,
                          '%s%sraw_data.csv' % (year, ','.join(conditions)),
                          fp_date=True)
                res = roi2(red_line,
                           raw_data,
                           selling_price=selling.split('=')[0],
                           cut_left=-24,
                           cut_right=4,
                           step=2)
                if res.empty:
                    print('当前条件下无数据')
                    continue
                save_data(
                    res,
                    'trace_back_to%s%s-%s%s.csv' %
                    (year, ','.join(conditions), selling.split('=')[0], today),
                    fp_date=True)
Exemplo n.º 17
0
    t.PRICES = 'close'
    limit_count = pd.DataFrame(
        t.data.groupby('trade_date')['ts_code'].count()).reset_index()
    limit_count.columns = ['trade_date', 'count']

    t.data = t.data.loc[(t.data['open/pre_close'] <= o[1])
                        & (t.data['open/pre_close'] >= o[0])]
    # t['all_count']=limit_count
    print(t.data.shape)
    t.data.dropna(inplace=True)
    res = t.roi(days=sell_days)
    print(t.data.shape)
    res = res.merge(limit_count, on='trade_date')
    res['proportion'] = res['n'] / res['count']
    print(res.iloc[-3:, :])
    save_data(res, '%s-%s回溯指标.csv' % (start, end))
    save_to_sql(res, 'limit_performance')

    # mlist = [ 'open','close','ma'] + list(range(1, 5))
    # summary = pd.DataFrame()
    # for model in mlist:
    #     print(model, t.data.shape, t.raw_data.shape)
    #     t.sell_model(model)
    #     df = t.segment(days=sell_days)
    #     summary[model] = df['roi']
    # save_data(summary, '首板%s回溯汇总%s%s2.csv' % (sell_days,start, end))
    # l={}
    # res=pd.DataFrame()
    # for rate in arange(1.02,1.06,0.005):
    #     t.sell_model(4,rate=rate)
    #     df=t.roi()
Exemplo n.º 18
0
Arquivo: cuts.py Projeto: swq90/stock
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))
Exemplo n.º 19
0
        print(break_data.shape)
        return break_data
    def next_performance(self,data,PRICEBUY='close',PRICESELL='close',days=1):
        res=pd.DataFrame()

        for d in range(1, days):
            wool=sheep.wool2(data,self.raw_data,PRICEB=PRICEBUY,PRICES=PRICESELL,days=d)
            res['%spct' % d] = wool['pct']
            res['%sall_pct' % d] = wool['all_pct']
        res['n']=wool['n']
        return res.iloc[:-days,:]
# t=pro.concept('')
# o=idea2(start_date='20190101',end_date='20190201')
# o.list_days(days=60)
# o.data=o.data[o.data['list_date']>='20190101']
# o.data=o.data.merge(o.stl_limt,on=['ts_code','trade_date'])
# o.data['is_up_limit']=o.data.apply(lambda x:1 if x['close']>=x['up_limit'] else 0)
# o.data['up_limit_days']=o.data.groupby('ts_code')[]
# o.red_line=o.data.loc[o.data['low']>=o.data['up_limit']]
# ctnu_days=o.red_line.groupby('ts_code')['list_days'].max()
# o.data_can_buy=o.data[(o.data['low']<o.data['up_limit'])|(o.data['close']<o.data['up_limit'])]
# buy_date=o.data_can_buy.groupby('ts_code')['list_days'].min()
start,end='20180101','20181231'
o=idea2(start_date=start,end_date=end)
t=o.break_limit(N=50)
next=o.next_performance(t,days=5)
print(next.describe())
save_data(next,'新股破板后表现%s-%s.csv'%(start,end))

print()
Exemplo n.º 20
0
    res = []
    data.sort_values(vars.TRADE_DATE, inplace=True)
    for l in range(data.shape[0] - N):
        vector2 = data.iloc[l:l + N, :]

        res.append([
            vector2.iloc[0][vars.TRADE_DATE],
            vector2.iloc[-1][vars.TRADE_DATE],
            cos_sim(vector1[cols].values.reshape(1, -1),
                    vector2[cols].values.reshape(1, -1))
        ])
    return pd.DataFrame(res, columns=['start', 'end', 'sim'])


START, END = '20150101', '20201231'
ts_code = '000001.SH'
# cols=[vars.OPEN,vars.CLOSE,vars.AMOUNT,vars.VOL]
cols = [vars.AMOUNT, vars.VOL]
#
filer_name = '%s_%s.csv'
N = 10
data = get_index(ts_code, START, END)

# data = index_slope(data, 4, 1)
vector1 = data.iloc[-N - 1:-1, :]
if __name__ == '__main__':

    save_data(cos_cycel(data, N),
              file_name % (N, '-'.join(cols)),
              fp_date=True)
print()
Exemplo n.º 21
0
Arquivo: down.py Projeto: swq90/stock
# #股票公告
# df = pro.anns(ts_code='600627.SH')
# #股票更名记录
# namechange=pro.query('namechange')
# 股票基本信息
basic = read_data('stock_basic')
# 纳斯达克指数
IXIC = pro.query('index_global', ts_code='IXIC', start_date=START)
# index_basic=pro.query('index_basic',market='SSE')
#上证指数
SSE = pro.index_daily(ts_code='000001.SH', start_date=START)
SSE['pre_friday'] = SSE['trade_date'].shift(-1)
SSE['today_week'] = pd.to_datetime(SSE['trade_date']).dt.dayofweek
SSE['lastday_week'] = pd.to_datetime(SSE['trade_date']).dt.dayofweek

save_data(SSE, '上证指数.csv')
save_data(IXIC, '纳斯达克.csv')
IXIC['sz_date'] = IXIC['trade_date'].shift(1)
IXIC.loc[0, 'sz_date'] = datetime.date.today().strftime('%Y%m%d')
IXIC = IXIC.iloc[:, 1:]
# print(IXIC.columns)
columns = dict.fromkeys(IXIC.columns[:-1])
for key in columns.keys():
    columns[key] = 'us_%s' % key

IXIC.rename(columns=columns, inplace=True)
mix = SSE.merge(IXIC, left_on='trade_date', right_on='sz_date')
save_data(mix, 'sz&nasdq.csv')

data = read_data('daily', start_date=START)
data = data[(data['pct_chg'] >= -11) & (data['pct_chg'] <= 11)]
Exemplo n.º 22
0
            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
start_date='20%s0501'
end_date='20%s1231'
for year in range(20,21):
    rawdata = read_data('daily', start_date=start_date%year, end_date=end_date%year).iloc[:,:-2]
    limit = read_data('stk_limit', start_date=start_date%year, end_date=end_date%year)
    rawdata = rawdata.merge(limit[['ts_code', 'trade_date', 'up_limit','down_limit']], on=['ts_code', 'trade_date'])

    print(start_date%year,'----',end_date%year,'include %s lines'%rawdata.shape[0])
    line_stock=red_line(rawdata).sort_values('trade_date')
    print(line_stock.loc[line_stock['trade_date']==line_stock.iloc[-1,-1]])
    save_data(line_stock,'%s连板.csv'%year)
    save_data(line_stock.loc[line_stock['trade_date']==line_stock.iloc[-1,-1]],'连板.txt')
    res=buy_model(line_stock,rawdata)
    save_data(res,'%s连板回测效果.csv'%year)

    # res=roi(limit,rawdata)

    # res=yunei(start_date%year,end_date%year)


print()

Exemplo n.º 23
0
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'
    ]:

        df['%s_%s/pre_close' % (con, item)] = df[item] / df['pre_close']
        pct_some = pd.concat([pct_some, df['%s_%s/pre_close' % (con, item)]],
                             axis=1)
    pct_some = pd.DataFrame(pct_some.describe(include='all')).reset_index()
    pct_some['index'] = pct_some['index'].astype('object')
    pct = pd.concat([pct, pct_some], axis=1)
save_data(pct, '不同条件价格分布%s%s.csv' % (start, end))
Exemplo n.º 24
0
def m_up_in_n_day():
    # N天M板
    N,M=7,3
    limit_up=read_data('stk_limit')
    daily=read_data('daily')
    data=daily.merge(limit_up,on=['ts_code','trade_date'])
    print(limit_up.shape,daily.shape,data.shape)
    data['UP']=data.apply(lambda x :1 if x['close']==x['up_limit'] else 0,axis=1)
    print(data.shape,data.dropna().shape)

    data.sort_values(['ts_code','trade_date'],inplace=True)
    data.reset_index(drop=True,inplace=True)

    data['times']=data.groupby('ts_code')['UP'].rolling(7).sum().reset_index(drop=True)

    # df=data.groupby('ts_code')['UP'].rolling(7).sum().reset_index()

print()

if __name__ == '__main__':
    start = '20180101'
    data = first_limit(start_date=start, days=2)
    save_data(data.drop(columns=['change', 'pct_chg', 'vol', 'amount', 'up_limit', 'down_limit']),
              '连板股票%s.csv' % start)
    # df=dis_first_limit_second(data=data,start_date=start,days=2)
    df = dis_first_limit_second(start_date=start, days=2)
    save_data(df, '连板概率%s.csv' % start)
    print('have_done')

Exemplo n.º 25
0
    data = process(raw_data, condition, next_day=1)
    print(data.shape)
    # open_cut(data.loc[data['close'] == data['up_limit']],OPEN)

    res = performance(data, raw_data)
    reform_performance(
        res, '-'.join([x.__name__ if x != None else '' for x in condition]))
    res = performance(data, raw_data, LIMIT=True)
    reform_performance(
        res, 'limit' +
        '-'.join([x.__name__ if x != None else '' for x in condition]))
    save_data(data,
              '%s%s%sdata.csv' % (ts_code, '~'.join([
                  '_' if x == None else
                  x.__name__ if 'lambda' not in x.__name__ else 'special'
                  for x in condition
              ]), start_date),
              fp_date=True)
    save_data(performance_table,
              '%s%s%sperformance.csv' % (ts_code, '~'.join([
                  x.__name__ if 'lambda' not in x.__name__ else 'lambda'
                  for x in condition
              ]), start_date),
              fp_date=True)
    save_data(open_cut(data),
              '%s%s%sperformance.csv' % (ts_code, '~'.join([
                  x.__name__ if 'lambda' not in x.__name__ else 'lambda'
                  for x in condition
              ]), start_date),
              fp_date=True,
Exemplo n.º 26
0
for year in range(18, 20):
    trace = pd.DataFrame()
    raw_data = read_data('daily', start_date=start_date % year, end_date=end_date % (year)).iloc[:, :-2]
    limit = read_data('stk_limit', start_date=start_date % year, end_date=end_date % year)
    raw_data = raw_data.merge(limit[['ts_code', 'trade_date', 'up_limit', 'down_limit']],
                              on=['ts_code', 'trade_date'])
    print(raw_data.shape[0])
    if selling not in raw_data.columns:
        raw_data.eval(selling, inplace=True)
    list_days = basic().list_days(raw_data, list_days=25)
    print(list_days.shape)
    raw_data = raw_data.merge(list_days, on=['ts_code', 'trade_date'])
    print(start_date % year, '----', end_date % year, 'include %s items' % raw_data.shape[0])
    for o in open_res:
        ds=cl.process(raw_data,[o]+con)
        save_data(ds, '%s%sraw_data.csv' % (year, ','.join([o]+con)), fp_date=True)
        res = cl.roi2(ds, raw_data, selling_price=selling.split('=')[0], cut_left=-24, cut_right=4, step=2)
        if res.empty:
            print('当前条件下无数据')
            continue
        save_data(res,'trace_back_to%s%s-%s%s.csv' % (year, ','.join([o]+con), selling.split('=')[0], today),
                  fp_date=True)
        res.rename(columns = {"n_days": "n_days_%s%s"% (year, ','.join([o]+con)),"num": "num_%s%s"% (year, ','.join([o]+con)),"pct": "pct_%s%s"% (year, ','.join([o]+con))},inplace=True)

        if trace.empty:
            trace=res.copy()
        else:
            trace=trace.merge(res,how='outer',on='pb')
    save_data(trace, 'trace_back_to%s%s%s.csv' % (year, selling.split('=')[0], today),fp_date=True)

Exemplo n.º 27
0
# guolikeji(start_date,end_date)
# mengjie(start_date,end_date)
# df = ts.pro_bar(ts_code='000001.SZ', adj='qfq', start_date='20180101', end_date='20181011')
# 广百股份
# days=[None,'open_less_limit','line_limit','or_limit','nn']
# # days=['cd','or_limit'
# # ,'nn']
# guangbai(start_date,end_date)
# print()

# 联创股份
# days=['m_ma5','or_limit','m_ma','m_ma','m_ma']
# days=['cd','or_limit'
# ,'nn']
# lianchuang(start_date,end_date)
# days=['c_c2','or_limit']
# jiangxicy(start_date,end_date)
# days=['or_limit','or_limit','nn']
# days=['line_limit','line_limit','nn']
# days=['c_c','line_limit','line_limit','nn']
# days=['c_c','re_limit','line_limit','or_limit','nn']
days=['line_limit','line_limit','nn']#603608
# days=['c_c3','line_limit','c_limit','c_limit','c_limit']#603608
# days=['c_c4','c_limit','c_limit','nn']#300374
days=('c_limit', 're_limit', 'c_limit','nn')
# days=['c_c','or_limit','or_limit','or_limit','nn']
# days=['c_c1','or_limit','nn']
save_data(lianban(start_date,end_date), '603101%s%s.csv' % (','.join(days), end_date), fp_date=True)

print()
Exemplo n.º 28
0
Arquivo: FLUP.py Projeto: swq90/stock
from stock.sql.data import save_data
from stock.util.basic import basic
import stock.limit_up.get_limit_stock as gls

# from stock.limit_up import performance_of_first_limit_up as pf

fp = os.path.join(os.path.dirname(os.getcwd()), 'data',
                  os.path.basename(sys.argv[0]).split('.py')[0])
fp = os.path.join(fp, '首板涨停回溯.csv')


def pro(start_date=None, end_date=None, limit_type='up', days=2):
    data = gls.first_limit(start_date=start_date,
                           end_date=end_date,
                           limit_type=limit_type,
                           days=days)
    data = data.loc[(data['pct_chg'] >= -11) & (data['pct_chg'] <= 11)]
    fl = data.loc[(data['pre_1_is_roof'] == 1) & (data['pre_2_is_roof'] == 0)]
    return sheep.wool2(fl, fl, days=0, PRICEB='open', PRICES='close')


if __name__ == '__main__':
    if os.path.isfile(fp):
        t = pro()
        save_data(t, '首板涨停回溯.csv', mode='a')
    else:
        t = pro(start_date='20190101')
        save_data(t, '首板涨停回溯.csv')
    # t=pro()
    # print()
Exemplo n.º 29
0
Arquivo: slope.py Projeto: swq90/stock
def increase(N, M):
    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'])
    data.sort_values(vars.TRADE_DATE, inplace=True)
    data[vars.MA] = (10 * data[vars.AMOUNT] /
                     data[vars.VOL]).map(FORMAT).astype('float')

    # # data['ma5']=(10*(data.groupby(vars.TS_CODE)[vars.AMOUNT].rolling(5,min_periods=5).sum())/(data.groupby(vars.TS_CODE)[vars.VOL].rolling(5,min_periods=5).sum())).map(FORMAT).astype('float')
    data = Ma(data, N)
    data = Ma(data, M)

    Z = data.groupby(vars.TS_CODE)[vars.HIGH].rolling(10).max().reset_index(
        level=0).rename(columns={vars.HIGH: '%s10' % vars.HIGH})
    data = data.merge(Z[['%s10' % vars.HIGH]],
                      left_index=True,
                      right_index=True,
                      how='inner')
    Z = data.groupby(vars.TS_CODE)[vars.LOW].rolling(60).min().reset_index(
        level=0).rename(columns={vars.LOW: '%s60' % vars.LOW})
    data = data.merge(Z[['%s60' % vars.LOW]],
                      left_index=True,
                      right_index=True,
                      how='inner')
    Z = data.groupby(vars.TS_CODE)[vars.HIGH].rolling(3).max().reset_index(
        level=0).rename(columns={vars.HIGH: '%s3' % vars.HIGH})
    data = data.merge(Z[['%s3' % vars.HIGH]],
                      left_index=True,
                      right_index=True,
                      how='inner')
    data['next_1_ma%s' % M] = data.groupby(
        vars.TS_CODE)['%s%s' % (vars.MA, M)].shift(-1)
    data['next_2_ma%s' % M] = data.groupby(
        vars.TS_CODE)['%s%s' % (vars.MA, M)].shift(-2)
    data['pre_ma2'] = data.groupby(vars.TS_CODE)[vars.MA].shift(2)
    # 我的方法,每日涨幅限制,三日收盘与五日均价关系
    # res=cl.process(data,[lambda x:(abs(x[vars.PCT_CHG])<1)&(x[vars.CLOSE]>x['ma5']),lambda x:abs(x[vars.PCT_CHG])<1,lambda x:(abs(x[vars.PCT_CHG]<1)&(abs(x[vars.CLOSE]/x['ma5']-1)<0.01))],st=True,next_day=0)
    # 10dhigh>60dlow*120%,最近一日low<ma5,high-ma5>ma5-low,
    # 三天内,每日均价在三日均价的0.99-1.01(0.985-1.015)
    # 最后一天十日最高价大于60日最低价*1.2,最低价小于5日均价,最高价-五日均价大于五日均价-最低价。(补充十日最高价大于三日最高价,却过滤掉部分好数据
    res = cl.process(data, [
        lambda x: x[vars.MA] > x['pre_ma2'],
        lambda x: x[vars.MA] > x['pre_ma2'],
        lambda x: x[vars.MA] > x['pre_ma2'],
        lambda x: x[vars.MA] > x['pre_ma2'],
        lambda x: x[vars.MA] > x['pre_ma2'],
        lambda x: x[vars.MA] > x['pre_ma2'], cl.NR, cl.NR,
        lambda x: abs(x[vars.MA] / x['next_2_ma%s' % M] - 1) < 0.015,
        lambda x: abs(x[vars.MA] / x['next_1_ma%s' % M] - 1) < 0.015, lambda x:
        (abs(x[vars.MA] / x['ma%s' % M] - 1) < 0.015) & (x['high10'] >
                                                         (1.2 * x['low60'])) &
        (x[vars.LOW] < x['%s%s' % (vars.MA, N)]) & (
            (x[vars.HIGH] - x['%s%s' % (vars.MA, N)]) >
            (x['%s%s' % (vars.MA, N)] - x[vars.LOW]))
    ],
                     st=True,
                     next_day=0)

    save_data(res, '横盘%sprema2.csv' % start_date)
    print(res.describe())
    # performance = pd.DataFrame()
    # performance['pct'] = pd.Series(cl.performance(res, data)).map(FORMAT)
    # save_data(performance, '横盘%s表现.csv' % start_date)
    # # data['vol5']=data.groupby(vars.TS_CODE)[vars.VOL].rolling(5).sum()
    # save_data(cl.open_cut(res), '横盘%s表现.csv' % start_date, mode='a')
    return