Exemplo n.º 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()
Exemplo n.º 2
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.º 3
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.º 4
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
Exemplo n.º 5
0
 def __init__(self, start_date=None, end_date=None, days=1):
     self.start_date = start_date
     self.end_date = end_date
     self.raw_data = read_data('daily',start_date=self.start_date,end_date=self.end_date)
     self.stk_limt=read_data('stk_limit',start_date=self.start_date,end_date=self.end_date)
     self.basic=read_data('stock_basic')
     self.basic=self.basic.loc[self.basic['list_date']>=start_date]
     self.raw_data=self.raw_data.loc[self.raw_data['ts_code'].isin(self.basic['ts_code'])]
Exemplo n.º 6
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.º 7
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.º 8
0
def limit_stock(start_date=None, end_date=None, limit_type='up'):
    """
    基础价格&涨跌停价格
    """
    if start_date is None:
        start_date=cal(end=end_date)

    data = read_data(table_name='daily', start_date=start_date, end_date=end_date)
    stk_limit = read_data(table_name='stk_limit', start_date=start_date, end_date=end_date)
    data = data.merge(stk_limit, on=['ts_code', 'trade_date'])
    if limit_type == 'both':
        return data
    return data[data['close'] == data['%s_limit' % limit_type]]
Exemplo n.º 9
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)
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
Arquivo: tips.py Projeto: swq90/stock
    def fina(self):
        '''
        主营业务构成
        @return:
        '''
        self.fina_mainbz = read_data('fina_mainbz', )
        count = 1
        for vars.TS_CODE in self.raw_data[vars.TS_CODE]:
            count += 1
            if count % 50 == 0:
                time.sleep(60)
            self.fina_mainbz.append(
                pro.fina_mainbz(period='20200630',
                                ts_code=vars.TS_CODE,
                                type='P'))
        counter_all, counter_growth = dict(), dict()
        for seg in self.fina_mainbz['bz_item']:
            counter_all[seg] = counter_all.get(seg, 1) + 1
        counter_all = sorted(counter_all.items(),
                             key=lambda value: value[1],
                             reverse=True)
        for seg in self.fina_mainbz[self.fina_mainbz[vars.TS_CODE].isin(
                self.growth_data[vars.TS_CODE])]['bz_item']:
            counter_growth[seg] = counter_growth.get(seg, 1) + 1
        counter_growth = sorted(counter_growth.items(),
                                key=lambda value: value[1],
                                reverse=True)

        self.wc(counter_all, '主营业务.jpg')
        self.wc(counter_growth, '增长股票主营业务.jpg')
        print()
Exemplo n.º 12
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.º 13
0
def dis(data,model):
    start_date=data['trade_date'].min()
    end_date=data['trade_date'].max()
    res=pd.DataFrame()

    rawdata = read_data('daily', start_date=start_date, end_date=end_date)


    return
Exemplo n.º 14
0
def detection(ts_code, end, start=7):
    start_date = (datetime.datetime.strptime(end_date, '%Y%m%d') -
                  datetime.timedelta(start)).strftime('%Y%m%d')
    vector = read_data('daily', start_date=start_date, end_date=end)
    vector = vector.loc[vector['ts_code'] == ts_code].copy().sort_values(
        vars.TRADE_DATE)
    check_list = [
        n_n, [red_line_limit, red_t_limit, ord_limit],
        [green_line_limit, green_t_limit, green_block]
    ]
Exemplo n.º 15
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()
Exemplo n.º 16
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.º 17
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'])
Exemplo n.º 18
0
def func2():
    data = read_data('stock_basic')
Exemplo n.º 19
0
Arquivo: tf2.py Projeto: swq90/stock
from keras import layers, Sequential, optimizers, losses
from sklearn.cluster import KMeans
import numpy as np
import pandas as pd
import stock.util.basic as basic

import tensorflow as tf


from stock.sql.data import save_data,read_data


start_date='20170101'
end_date='20170111'
k=4
raw_dataset =read_data('daily',start_date=start_date,end_date=end_date)
# t=basic.basic().pre_data(raw_dataset,label=['close'],new_label=['close_5'],pre_days=-5)
# raw_dataset=raw_dataset.merge(t,on=['ts_code','trade_date'])
# raw_dataset['5_pct_chg']=round(raw_dataset['close_5']/raw_dataset['close']-1)
dataset=np.array(())
for code in raw_dataset['ts_code'].unique():
    df=raw_dataset.loc[raw_dataset['ts_code']==code]
    for i in range(df.shape[0]-5):
        dataset=np.append(dataset,df.iloc[i:i+5,2:].values.reshape((1,-1)))
        # print(dataset.shape)
dataset=dataset.reshape((-1,45))
print('dataset',dataset.shape)

#
# # 切分为训练集和测试集
# train_dataset = dataset.sample(frac=0.8, random_state=1)
Exemplo n.º 20
0
Arquivo: down.py Projeto: swq90/stock
import pandas as pd
import datetime
import tushare as ts
# from numpy import arange
# import stock.util.sheep as sheep
# import stock.limit_up.get_limit_stock as gls
from stock.sql.data import save_data, read_data

pro = ts.pro_api()
START, END = '20170101', '20200331'
# #股票公告
# 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)
Exemplo n.º 21
0
from stock.sql.data import read_data
import stock.util.vars as sv


def slope(s):
    return s.iloc[0] / s.iloc[-1] if s.iloc[-1] else -1


def asymptote(df, N, similarity=0.8, labels=[sv.CLOSE, sv.OPEN, sv.MA]):
    """
    @param df: datafram,传入股票数据
    @param N: int,最短天数
    @param similarity: float,落在线内的股票占比
    @return: dataframe,股票代码,符合条件的开始结束时间
    """
    df.sort_values('trade_date', ascending=False, inplace=True)
    for l in labels:
        if l in df.columns:
            z = df.groupby('ts_code')[l].expanding(N).apply(slope, raw=False)
    return df


if __name__ == '__main__':
    df = read_data('daily', start_date='20200601', end_date='20201231')
    res = asymptote(df, 2, labels=[sv.CLOSE])
Exemplo n.º 22
0
def red_t_limit(x):
    return (x[vars.OPEN] == x[vars.CLOSE]) & (
        x[vars.OPEN] == x[vars.UP_LIMIT]) & (x[vars.LOW] < x[vars.CLOSE])


def up_limit(x):
    return x[vars.CLOSE] == x[vars.UP_LIMIT]


start = '20200101'
end = ''
raw_data = read_data('daily', start_date=start,
                     end_date=end).merge(read_data('stk_limit',
                                                   start_date=start,
                                                   end_date=end)[[
                                                       vars.TS_CODE,
                                                       vars.TRADE_DATE,
                                                       vars.UP_LIMIT,
                                                       vars.DOWN_LIMIT
                                                   ]],
                                         on=[vars.TS_CODE, vars.TRADE_DATE])
print(raw_data.shape)
list_days = basic().list_days(raw_data, list_days=30)
raw_data = raw_data.merge(list_days, on=[vars.TS_CODE, vars.TRADE_DATE])
print(raw_data.shape)


def statistic(data, condition):
    if condition == process:
        res = process(raw_data, [up_limit, up_limit], next_day=0)
    else:
        res = data.loc[condition(data)]
Exemplo n.º 23
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.º 24
0
import matplotlib.pyplot as plt

from stock.sql.data import save_data, read_data
from stock.util.basic import basic

pro = ts.pro_api()
TEST = pro.fina_mainbz(ts_code='600538.SH')
start_date = '20200301'
end_date = '20200331'
# for market in ['msci','csi','sse','szse','cicc','sw','oth']:
#     index=pro.index_basic(market=market)
#     if index.loc[index['name'].str.contains('口罩')].empty:
#         continue
#     else:
#         print()
limit = read_data('limit_list', start_date=start_date, end_date=end_date)


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
Exemplo n.º 25
0
import pandas as pd
from functools import partial
from stock.sql.data import read_data, save_data, cal
import stock.util.basic as basic

# 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()
Exemplo n.º 26
0
from stock.sql.data import read_data,save_data
import stock.util.sheep as sheep
# 年报计划
buy_date='20190101'
need_date='20191231'
end_date='20190630'
# 公告日期
disclosure=ts.pro_api().disclosure_date(end_date=need_date,fields='ts_code,ann_date,end_date,pre_date,actual_date,modify_date')
# 解禁
# share_float=ts.pro_api().share_float(ts_code='300617.SZ' )
# 分红送股
dividend=ts.pro_api().dividend()
dividend=dividend.loc['dividend'].[]
disclosure=disclosure.loc[(disclosure['pre_date']>=need_date)&(disclosure['pre_date']<=end_date)].copy()
# print(disclosure.shape,disclosure['ts_code'].unique().shape)
data=read_data('daily',start_date=buy_date,end_date=end_date)
# disclosure

res=pd.DataFrame()
for ts_code in disclosure['ts_code'].unique():
    df=data.loc[data['ts_code']==ts_code].copy()
    df.sort_values('trade_date',inplace=True)
    df['buy_date']=df['trade_date'].shift(5)
    df['buy_price']=df['close'].shift(5)
    res=pd.concat([res,df],ignore_index=True)

disclosure['trade_date']=disclosure['pre_date']
disclosure.sort_values('trade_date',ascending=False,inplace=True)
print(disclosure.shape)
disclosure=disclosure[['ts_code','trade_date']].drop_duplicates()
print(disclosure.shape,disclosure['ts_code'].unique().shape)
Exemplo n.º 27
0
# selling = 'close'

# 开盘非涨停,涨停,红盘,绿盘,跌停

open_res = [cl.NR,cl.open_not_limit,cl.open_red, cl.open_green,cl.open_up_limit,cl.open_down_limit]

con = [cl.up_limit,cl.up_limit,cl.n_n]


pre_1 = []
start_date = '20%s0101'
end_date = '20%s1231'

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:
Exemplo n.º 28
0
Arquivo: tips.py Projeto: swq90/stock
 def __init__(self, start, end):
     self.start = start
     self.end = end
     self.raw_data = read_data('daily', start_date=start, end_date=end)
Exemplo n.º 29
0
Arquivo: cuts.py Projeto: swq90/stock
    # res['product']=[res.loc[:,'pct']].cumprod()
    return res


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)
Exemplo n.º 30
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