Example #1
0
    def _sort(self, user_code_list: list = None, lines: int = None):
        # df.sort_index(by='pb', axis=0, ascending=[True])
        ndf = pd.DataFrame()
        df = self._filter(user_ts_code_list=user_code_list)

        if df.empty is False:
            if lines is None:
                max_lines = int(config.max_lines)
            else:
                max_lines = lines
            """排序"""
            sort_title = config.sort_title.split('|')
            sort_type = config.sort_type.split('|')
            sort_title.append('Risk_level')
            sort_type.append('False')
            df1 = df[df['Risk_level'] == '0'].sort_values(
                by=sort_title, ascending=sort_type).head(max_lines)
            df2 = df[df['Risk_level'] == '1'].sort_values(
                by=sort_title, ascending=sort_type).head(max_lines)
            ndf = pd.concat([df1, df2], ignore_index=True)

            stock_fi = Util_tools.bytes_to_dataFrame(
                RedisBase().redis().get('stock_fi'))
            if stock_fi.empty:  # 在线取每股净资产
                for idx, row in ndf.iterrows():
                    sg_data = get_skData().get_stock_fi(row['ts_code'])
                    ndf.loc[idx, 'bps'] = float(sg_data['bps'])
        return ndf
Example #2
0
def init_stock_data():
    stock_data = get_skData().stock_b()
    # 排除劣质股
    sdf = stock_data[stock_data['name'].str.contains(r'.*ST.*')]
    stock_data.drop(sdf.index, inplace=True)
    stock_data.fillna(value=0)  # 当数据中存在NaN时候用 0 替换
    df_bytes = t_util.dataFrame_to_bytes(stock_data)
    flag = RedisBase().redis().set('stock_base', df_bytes)
    return flag
Example #3
0
 def __init__(self):
     self.pro = tushare.pro_api(config.token)
     yesterday = (datetime.today() + timedelta(-1))
     usr_date = Util_tools.dateTime_content('17:00')
     """17:00"""
     if datetime.today() > usr_date:
         self.default_day = usr_date
     else:
         self.default_day = yesterday
Example #4
0
def _init_stock_daily_udata():
    new_df = pd.DataFrame()
    # 股票基本分类数据
    stock_base = t_util.bytes_to_dataFrame(
        RedisBase().redis().get('stock_base'))
    stock_daily = t_util.bytes_to_dataFrame(
        RedisBase().redis().get('stock_daily'))
    stock_fi = t_util.bytes_to_dataFrame(RedisBase().redis().get('stock_fi'))
    for index, row in stock_base.iterrows():
        df = stock_daily[stock_daily['ts_code'] == row['ts_code']]
        if stock_fi.empty is False:
            bvps = stock_fi.loc[row['symbol']]['bvps']
        if df.empty is False:
            daily_b.ts_code = str(row['ts_code'])  # 股票名称
            daily_b.name = str(row['name'])  # 股票名称
            daily_b.symbol = str(row['symbol'])  # 股票名称
            daily_b.industry = str(row['industry'])  # 股票名称
            daily_b.trade_date = str(df.loc[df.index,
                                            'trade_date'].values[0])  # 交易日期
            daily_b.close = float(df['close'])  # 当日收盘价
            daily_b.ts_code = str(row['ts_code'])  # 股票代码
            daily_b.pe = float(df['pe'])  # 市盈率(总市值/净利润)
            daily_b.pe_ttm = float(df['pe_ttm'])  # 市盈率(TTM)
            daily_b.pb = float(df['pb'])  # 市净率(总市值/净资产)
            if bvps is None:
                daily_b.bps = float(0)  # 每股净资产
            else:
                daily_b.bps = float(bvps)  # 每股净资产

            data = {
                'ts_code': daily_b.ts_code,
                'symbol': daily_b.symbol,
                'name': daily_b.name,
                'industry': daily_b.industry,
                'trade_date': daily_b.trade_date,
                'pe': daily_b.pe,
                'pe_ttm': daily_b.pe_ttm,
                'pb': daily_b.pb,
                'bps': daily_b.bps
            }
            add_data = pd.Series(data)
            """ignore_index=True,表示不按原来的索引,从0开始自动递增"""
            new_df = new_df.append(add_data, ignore_index=True)
    return new_df
Example #5
0
    def get_stock_fi(self, ts_code=None, tr_date=None):
        """公司每日基本情况"""
        df_data = pd.DataFrame()
        if ts_code is None:
            # if tr_date is None:
            #     tr_date = self.default_day.strftime('%Y%m%d')
            try:
                df_data = tushare.get_stock_basics(tr_date)
            except OSError:
                return df_data
            except HTTPError:
                return df_data
        else:
            start_data = Util_tools.data_util().get_last_year().get('start').strftime('%Y%m%d')
            end_date = Util_tools.data_util().get_now_year().get('end').strftime('%Y%m%d')
            df_data = self.pro.query('fina_indicator', ts_code=ts_code, start_date=start_data, end_date=end_date)
            df_data = df_data[:1]

        return df_data
Example #6
0
def init_stock_fi_data():
    # 股票每日基本数据
    try:
        daily_data = get_skData().get_stock_fi()
        if daily_data.empty is False:
            df_bytes = t_util.dataFrame_to_bytes(daily_data)
            flag = RedisBase().redis().set('stock_fi', df_bytes)
        else:
            flag = False
    except Exception as e:
        print(e.args)
        flag = False
    return flag
Example #7
0
 def sale_stock(self, stock_df):
     """
         为了止损 首先判断单只股票净资产,当净资产翻倍,可以提示出售该股票
         当股票购买的时间超过1年的投资期时可以抛售该股票
     """
     flag = ''
     buy_bps = stock_df.iloc[0]['bps']
     buy_data = stock_df.iloc[0]['trade_date']
     # 取数当前股票净资产
     df = self.stock_details_daily[self.stock_details_daily['ts_code'] ==
                                   stock_df.iloc[0]['ts_code']]
     now_bps = df.iloc[0]['bps']
     now_date = df.iloc[0]['trade_date']
     days = Util_tools.time_long(buy_data, now_date)
     if now_bps >= (buy_bps * 2):
         flag = 'X'
     elif days > 365:
         flag = 'X'
     return flag
Example #8
0
def init_stock_daily_user_details():
    # 股票组装用户数据
    stock_details_daily = _init_stock_daily_udata()
    df_bytes = t_util.dataFrame_to_bytes(stock_details_daily)
    flag = RedisBase().redis().set('stock_details_daily', df_bytes)
    return flag
Example #9
0
def init_stock_daily_data():
    # 股票每日指标数据
    daily_data = get_skData().daily_b()
    df_bytes = t_util.dataFrame_to_bytes(daily_data)
    flag = RedisBase().redis().set('stock_daily', df_bytes)
    return flag
Example #10
0
                daily_b.bps = float(0)  # 每股净资产
            else:
                daily_b.bps = float(bvps)  # 每股净资产

            data = {
                'ts_code': daily_b.ts_code,
                'symbol': daily_b.symbol,
                'name': daily_b.name,
                'industry': daily_b.industry,
                'trade_date': daily_b.trade_date,
                'pe': daily_b.pe,
                'pe_ttm': daily_b.pe_ttm,
                'pb': daily_b.pb,
                'bps': daily_b.bps
            }
            add_data = pd.Series(data)
            """ignore_index=True,表示不按原来的索引,从0开始自动递增"""
            new_df = new_df.append(add_data, ignore_index=True)
    return new_df


if __name__ == '__main__':
    # print(init_stock_data())
    # print(init_stock_fi_data())
    # print(init_stock_fi_data())
    stock_base = t_util.bytes_to_dataFrame(
        RedisBase().redis().get('stock_base'))
    df = stock_base.drop_duplicates(['industry'])
    for index, row in df.iterrows():
        print(row['industry'])
    # init_everyday()
Example #11
0
# df = tuShare.get_realtime_quotes('000425')
# for index, cow in df.iterrows():
#     print(cow)

# price = df.loc[0, 'price']
# print(price)
# print(df)

# stock_data = get_skData().stock_b()

# flag = RedisBase().redis().set('stock_base', df_bytes)
# df = t_util.bytes_to_dataFrame(RedisBase().redis().get('stock_base'))

# date:日期YYYY-MM-DD,默认为上一个交易日,目前只能提供2016-08-09之后的历史数据
stock_basics = tuShare.get_stock_basics('2020-02-28')
df = stock_basics.loc['000732']
start = datetime.datetime.now()
# daily_data = t_util.bytes_to_dataFrame(RedisBase().redis().get('stock_daily'))
# stock_data = t_util.bytes_to_dataFrame(RedisBase().redis().get('stock_base'))
stock_details_daily = t_util.bytes_to_dataFrame(
    RedisBase().redis().get('stock_details_daily'))
end = datetime.datetime.now()
print('Running time: %s Seconds' % (end - start))

# print(daily_data)
print(tuShare.get_stock_basics())
# print(daily_data)
# r = 100 / 100
# print(round(r))
Example #12
0
 def __init__(self):
     """Redis 数据初始化,取股票基本数据"""
     self.stock_details_daily = Util_tools.bytes_to_dataFrame(
         RedisBase().redis().get('stock_details_daily'))
     """高危版块"""
     self.list_industry = config.industry.split('|')