Exemplo n.º 1
0
def download_new_stock_director(startdate,enddate,dw_stock_id):
    date=datetime.today().date()
    d1=comm.exchange_data('tse').get_last_df_bydate(date)
    print(lno(),d1)
    d1['market']='sii'
    d2=comm.exchange_data('otc').get_last_df_bydate(date)
    print(lno(),d2)
    d2['market']='otc'
    d=pd.concat([d1,d2])
    stock_list=d['stock_id'].tolist()
    
    for i in range(0,len(d)) :
        stock_id=d.iloc[i]['stock_id']
        if dw_stock_id!=stock_id:
            continue
        stock_name=d.iloc[i]['stock_name']
        market=d.iloc[i]['market']
        if len(stock_id)!=4:
            continue
        if stock_id.startswith('00'):
            continue
        nowdate=startdate
        while   nowdate<=enddate :
            down_stock_director(stock_id,stock_name,market,nowdate)
            nowdate = nowdate + relativedelta(months=1) 
Exemplo n.º 2
0
def download_all_stock_111():
    date = datetime(2020, 4, 1)
    d1 = comm.exchange_data('tse').get_df_date_parse(date)
    d1['market'] = 'tse'
    d2 = comm.exchange_data('otc').get_df_date_parse(date)
    d2['market'] = 'otc'
    d = pd.concat([d1, d2])
    stock_list = d['stock_id'].tolist()
    for stock_id in stock_list:
        if len(stock_id) != 4:
            continue
        if stock_id.startswith('00'):
            continue
        down_stock_111(stock_id)
Exemplo n.º 3
0
def download_all_stock_director_goodinfo():
    nowdate=startdate
    date=datetime(2020,4,1)
    d1=comm.exchange_data('tse').get_df_date_parse(date)
    d1['market']='sii'
    d2=comm.exchange_data('otc').get_df_date_parse(date)
    d2['market']='otc'
    d=pd.concat([d1,d2])
    stock_list=d['stock_id'].tolist()
    for i in range(0,len(d)) :
        stock_id=d.iloc[i]['stock_id']
        if len(stock_id)!=4:
            continue
        if stock_id.startswith('00'):
            continue
        down_stock_director_goodinfo(stock_id)
Exemplo n.º 4
0
    if sys.argv[1] == '1':
        pass
    elif sys.argv[1] == '-t':
        if len(sys.argv) == 4:
            #stock_no=sys.argv[2]
            startdate = datetime.strptime(sys.argv[2], '%Y%m%d')
            enddate = datetime.strptime(sys.argv[3], '%Y%m%d')

            tStart = time.time()
            stoploss_list = [0, 1, 2]
            #stoploss_list=[0]
            for mode in stoploss_list:
                bt = backtest(startdate, enddate, sellmode=mode, strategy=0)
                bt.start()
                bt.report()
            tEnd = time.time()

            print("It cost %.3f sec" % (tEnd - tStart))

        else:

            print(lno(), 'func -t stock_no date')
    elif sys.argv[1] == '-t2':
        print(lno())
        startdate = datetime.strptime(sys.argv[2], '%Y%m%d')
        print(lno())
        test = comm.exchange_data()
        print(lno())
        test.save_sql(startdate)
        print(lno())
Exemplo n.º 5
0
def gen_stock_info(r, debug=0):
    #cols=['date','stock_id']
    cols = [
        'stock_id',
        'stock_name',
        '總分',
        '董監持股增減',
        '大戶近一月增加比',
        '大戶近一周增加比',
        '散戶近一月增加比',
        'psrS',
        'prr',
        '本益比',
        '股價淨值比',
        '殖利率(%)',
        '收盤價',
        '股數(萬張)',
        '市值(百萬)',
        '產業地位',
        '備註',
        '細產業',
        '產業',
        '本年累計營收年增率',
        '最新單月營收年增率',
        '最新單月營收月增率',
        #'前0月董監持股', '前1月董監持股', '前2月董監持股', '前3月董監持股', '前4月董監持股', '前5月董監持股',
        #'前1周>1000張比例', '前2周>1000張比例','前3周>1000張比例', '前4周>1000張比例',
        #'前1周<400張比例', '前2周<400張比例', '前3周<400張比例', '前4周<400張比例',
        'market',
        '股利年度',
        '本年EPS',
        '前1年EPS',
        '前2年EPS',
        '本年營收(百萬)',
        '前1年營收(百萬)',
        '前2年營收(百萬)',
        '去年營收年增率',
        'psr高-1',
        'psr低-1',
        'psr高-2',
        'psr低-2',
        'psr高-3',
        'psr低-3',
        'psr三年最高',
        'psr三年最低',
        'psrs/psr三年最低-1',
        'psrs/psr三年最高',
        '本季EPS',
        '前1季EPS',
        '前2季EPS',
        '前3季EPS',
        '前4季EPS',
        '前5季EPS',
        '前6季EPS',
        '前7季EPS',
        '本季毛利率',
        '前1季毛利率',
        '前2季毛利率',
        '前3季毛利率',
        '前4季毛利率',
        '前5季毛利率',
        '前6季毛利率',
        '前7季毛利率',
        '本季營利率',
        '前1季營利率',
        '前2季營利率',
        '前3季營利率',
        '前4季營利率',
        '前5季營利率',
        '前6季營利率',
        '前7季營利率',
        '本季淨利率',
        '前1季淨利率',
        '前2季淨利率',
        '前3季淨利率',
        '前4季淨利率',
        '前5季淨利率',
        '前6季淨利率',
        '前7季淨利率',
        '近一季毛利率升降(年)',
        '近一季營利率升降(年)',
        '近一季淨利率升降(年)',
        '近一季毛利率升降(季)',
        '近一季營利率升降(季)',
        '近一季淨利率升降(季)',
        '分數:psrs/psr(3)-1',
        '分數:淨值比',
        '分數:psrs',
        '分數:prr',
        '分數:毛利率',
        '分數:營利率年增',
        '分數:營收年增20%',
        '分數:營收月增80%',
        '分數:peg',
        'date',
        'week kline open',
        'week kline high',
        'week kline low',
        'week kline close',
        'week kline date',
        'day kline open',
        'day kline high',
        'day kline low',
        'day kline close',
        'day kline date',
        'week kline vol',
        'day kline vol',
        '股權日期',
        '大戶持股',
        '散戶持股',
        '董監日期',
        '董監持股',
        'big3 date',
        '外資',
        '投信',
        '自營商'
    ]
    stock_id = r.stock_id

    date = r.date
    tse_stock = comm.exchange_data('tse').get_df_date_parse(
        date)['stock_id'].tolist()
    d = pd.DataFrame(np.empty((1, len(cols))) * np.nan, columns=cols)
    str_col_list = [
        'stock_id', 'stock_name', 'market', '產業地位', '備註', '細產業', '產業', '董監日期',
        '董監持股', 'big3 date', '外資', '投信', '自營商', '股權日期', '大戶持股', '散戶持股',
        'week kline open', 'week kline high', 'week kline low',
        'week kline close', 'week kline date', 'day kline open',
        'day kline high', 'day kline low', 'day kline close', 'day kline date',
        'week kline vol', 'day kline vol'
    ]
    for i in str_col_list:
        d[i] = d[i].astype('str')

    d.at[0, 'date'] = date
    d.at[0, 'stock_id'] = stock_id
    d.at[0, 'stock_name'] = r.stock_name
    if stock_id in tse_stock:
        d.at[0, 'market'] = 'tse'
    else:
        d.at[0, 'market'] = 'otc'
    total_stock_nums = comm.get_total_stock_num(stock_id, date)

    d.at[0, '收盤價'] = comm.get_stock_last_close(stock_id, date)
    d.at[0, '股數(萬張)'] = comm.get_total_stock_num(stock_id, date) / 10000000
    #1萬張=1千萬股 市值百萬 要x10
    d.at[0, '市值(百萬)'] = d.at[0, '收盤價'] * d.at[0, '股數(萬張)'] * 10

    ## 抓取 董監持股
    get_stock_director(d)

    ##抓取 前1周<400張比例 ,前2周<400張比例,前3周<400張比例,前4周<400張比例
    ##     前1周>1000張比例 ,前2周>1000張比例,前3周>1000張比例,前4周>1000張比例
    ##     大戶近一周增加比,大戶近一月增加比,散戶近一月增加比
    get_stock_tdcc_dist(d)

    ##抓取 本益比 淨值比 殖利率 股利年度
    res = get_stock_pe_networth_yield(d)
    if res == 'N':
        return pd.DataFrame()

    ## 抓取 產業地位
    get_stock_industry_status(d)

    ##抓取 	本年累計營收年增率	最新單月營收年增率	最新單月營收月增率
    get_stock_revenue(d)

    ##三年eps 營業收入 psr high low psrS  8季三率 近一季三率成長 去年營收年增率 去年營收-百萬	今年營收預估-百萬
    res = get_stock_season_composite_income_sheet(d)
    if res == 'N':
        return pd.DataFrame()

    #get prr
    d.at[0, 'prr'] = get_stock_prr(d.iloc[0])
    print(lno(), d.columns)
    d.at[0, '分數:psrs/psr(3)-1'] = get_psrs_div_psr3y_score(d.iloc[0])
    d.at[0, '分數:淨值比'] = get_networth_score(d.iloc[0])
    d.at[0, '分數:psrs'] = get_psrs_score(d.iloc[0])
    d.at[0, '分數:prr'] = get_prr_score(d.iloc[0])
    d.at[0, '分數:毛利率'] = get_Gross_margin_score(d.iloc[0])
    d.at[0, '分數:營利率年增'] = get_Operating_Profit_margin_score(d.iloc[0])
    d.at[0, '分數:營收年增20%'] = get_revenue_year_20_score(d.iloc[0])
    d.at[0, '分數:營收月增80%'] = get_revenue_month_80_score(d.iloc[0])
    d.at[0, '分數:peg'] = get_peg_score(d.iloc[0])

    score_cols = [
        '分數:psrs/psr(3)-1', '分數:淨值比', '分數:psrs', '分數:prr', '分數:毛利率',
        '分數:營利率年增', '分數:營收年增20%', '分數:營收月增80%', '分數:peg'
    ]
    if debug == 1:
        print(lno(), d.iloc[0][score_cols].values)
    d.at[0, '總分'] = sum(d.iloc[0][score_cols].values)
    df1 = comm.get_stock_df_bydate_nums(stock_id, 300, date)
    df1['vol'] = df1['vol'] / 1000
    #week_df=kline.resample(df1,'W',60).reset_index(drop=True).copy()
    week_df = kline.resample(df1, 'W-FRI', 60).reset_index(drop=True).copy()

    def date2str(x):
        return datetime.strftime(x, '%y-%m-%d')

    week_df['date'] = week_df['date'].apply(date2str)
    if debug != 0:
        print(lno(), week_df.iloc[0])
        print(lno(), len(week_df))

    if len(week_df) >= 60:
        d.at[0, 'week kline open'] = ', '.join(
            map(str, week_df['open'].values.tolist()))
        d.at[0, 'week kline high'] = ', '.join(
            map(str, week_df['high'].values.tolist()))
        d.at[0, 'week kline low'] = ', '.join(
            map(str, week_df['low'].values.tolist()))
        d.at[0, 'week kline close'] = ', '.join(
            map(str, week_df['close'].values.tolist()))
        d.at[0, 'week kline date'] = ', '.join(week_df['date'].values.tolist())
        d.at[0, 'week kline vol'] = ', '.join(
            map(str, week_df['vol'].values.tolist()))
    else:
        d.at[0, 'week kline open'] = ''
        d.at[0, 'week kline high'] = ''
        d.at[0, 'week kline low'] = ''
        d.at[0, 'week kline close'] = ''
        d.at[0, 'week kline date'] = ''
        d.at[0, 'week kline vol'] = ' '
    day_df = df1.tail(60).reset_index(drop=True).copy()
    #print(lno(),day_df)
    """
    d['day kline open']=d['day kline open'].astype(str)
    d['day kline high']=d['day kline high'].astype(str)
    d['day kline low']=d['day kline low'].astype(str)
    d['day kline close']=d['day kline close'].astype(str)
    d['day kline date']=d['day kline date'].astype(str)
    d['day kline vol']=d['day kline vol'].astype(str)
    """
    day_df['date'] = day_df['date'].apply(time642str)
    d.at[0,
         'day kline open'] = ', '.join(map(str,
                                           day_df['open'].values.tolist()))
    d.at[0,
         'day kline high'] = ', '.join(map(str,
                                           day_df['high'].values.tolist()))
    d.at[0,
         'day kline low'] = ', '.join(map(str, day_df['low'].values.tolist()))
    d.at[0, 'day kline close'] = ', '.join(
        map(str, day_df['close'].values.tolist()))
    d.at[0, 'day kline date'] = ', '.join(day_df['date'].values.tolist())
    d.at[0,
         'day kline vol'] = ', '.join(map(str, day_df['vol'].values.tolist()))
    stock_3big_df = stock_big3.get_stock_3big(stock_id, date, 10,
                                              d.at[0, 'market'])

    if len(stock_3big_df) != 0:
        stock_3big_df['date'] = stock_3big_df['日期'].apply(time642str)
        d.at[0, 'big3 date'] = ', '.join(stock_3big_df['date'].values.tolist())
        d.at[0, '外資'] = ', '.join(map(str,
                                      stock_3big_df['外資'].values.tolist()))
        d.at[0, '投信'] = ', '.join(map(str,
                                      stock_3big_df['投信'].values.tolist()))
        d.at[0,
             '自營商'] = ', '.join(map(str, stock_3big_df['自營商'].values.tolist()))
        print(lno(), d.iloc[0][['外資', '投信']])
    else:
        d.at[0, 'big3 date'] = ''
        d.at[0, '外資'] = ' '
        d.at[0, '投信'] = ' '
        d.at[0, '自營商'] = ' '
    #print(lno(),d.columns)
    #raise
    d = d[cols]
    return d
Exemplo n.º 6
0
def get_stock_market(r):
    d1 = comm.exchange_data('tse').get_df_date_parse(r.date)
    if r.stock_id in d1['stock_id'].tolist():
        return 'tse'
    return 'otc'