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
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
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
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
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
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
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
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
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
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()
# 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))
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('|')