def is_supported(self, code, date): last_year = date.year - 1 cashflows = self.bonusDataManager.get_data( code, constant.talbe_name_cashflow, cj.CashflowCrawler()) rtn = get_value_year(cashflows, last_year, 'pub_date', ['total_liability', 'total_current_assets']) if not base.is_df_validate(rtn): return False # 流动资产 total_current_assets = float( rtn.get('total_current_assets') if rtn.get('total_current_assets' ) is not None else 0.0) balances = self.bonusDataManager.get_data(code, constant.table_name_balance, cj.BalanceCrawler()) rtn = get_value_year(balances, last_year, 'pub_date', ['total_current_liability']) if rtn is None: logging.info( ' filter_safecurrentratio drop, no last year capitals code {} ' .format(code)) return False # 流动负债合计 total_current_liability = float(rtn.get('total_current_liability')) rtn = (total_current_assets / total_current_liability) > 2 if not rtn: logging.info( ' filter_safecurrentratio drop,code: {}, total_current_assets: {}, total_current_liability: {}' .format(code, total_current_assets, total_current_liability)) return rtn
def is_supported(self, code, date): last_year = date.year - 1 incomes = self.bonusDataManager.get_data(code, constant.talbe_name_incomes, cj.IncomesCrawler()) last_year_total_profit = get_value_year(incomes, last_year, 'report_date', ['total_profit']) last_five_year_total_profit = get_value_year(incomes, last_year, 'report_date', ['total_profit']) if last_year_total_profit is None or last_five_year_total_profit is None: return False last_year_total_profit = last_year_total_profit.get('total_profit') last_five_year_total_profit = last_five_year_total_profit.get( 'total_profit') if last_year_total_profit is None or last_five_year_total_profit is None: return False return ( float(last_year_total_profit) - float(last_five_year_total_profit))\ / float(last_five_year_total_profit) > (7/100)
def is_supported(self, code, date): last_year = date.year - 1 # 获取上一个报告日的有形资产 totle_tangibles = self._get_totle_tangibles(code, last_year) if None is totle_tangibles: return False cashflows = self.bonusDataManager.get_data( code, constant.talbe_name_cashflow, cj.CashflowCrawler()) rtn = get_value_year(cashflows, last_year, 'pub_date', ['total_liability', 'total_current_assets']) if base.is_df_validate(rtn): # 总负债 total_liability = float(rtn.get('total_liability')) # 流动资产 total_current_assets = float( rtn.get('total_current_assets') if rtn. get('total_current_assets') is not None else 0.0) if not total_liability < totle_tangibles: logging.info( 'filter SafeTotalLiability drop code {} :, total_liability: {} , totle_tangibles: {} ' .format(code, total_liability, totle_tangibles)) return False if not total_current_assets < totle_tangibles: logging.info( 'filter SafeTotalLiability drop code {} :, total_current_assets: {} , totle_tangibles: {} ' .format(code, total_current_assets, totle_tangibles)) return True else: return False
def is_supported(self, code, date): last_year = date.year # 获取上一个报告日的有形资产 totle_tangibles = self._get_totle_tangibles(code, last_year) if None is totle_tangibles: return False capitals = self.bonusDataManager.get_data(code, constant.talbe_name_capital, cj.CapitalCrawler()) rtn = get_value_year(capitals, last_year, 'pub_date', ['share_total']) if rtn is None: logging.info( ' filter_cashflow drop, no last year capitals code {} '.format( code)) return False share_total = float(rtn.get('share_total')) * 10000 close = self._get_close(code) if None is close: return False tmp = (totle_tangibles / share_total) * 2 / 3 rtn = close < tmp if not rtn: logging.info( ' filter_balance drop code {} : , close : {} , result {}'. format(code, close, tmp)) return rtn
def _get_eps(self, code, year): incomes = self.bonusDataManager.get_data(code, constant.talbe_name_incomes, cj.IncomesCrawler()) rtn = get_value_year(incomes, year, 'report_date', ['basic_eps']) if rtn is not None: return rtn.get('basic_eps')
def is_supported(self, code, date): last_year = date.year - 1 incomes = self.bonusDataManager.get_data(code, constant.talbe_name_incomes, cj.IncomesCrawler()) for i in range(5): if not self._is_year_support(last_year - 1, incomes): return False return True
def _get_bonus_ratio(self, code, year): dividens = self.bonusDataManager.get_data( code=code, table_name=constant.table_name_dividend, crawler=cj.DividendsCrawler()) if base.is_df_validate(dividens): dividens = dividens.loc[(dividens['bonus_type'] == '年度分红')] if base.is_df_validate(dividens): dividens = dividens.sort_values(by=['report_date'], ascending=False).head(1) return dividens['bonus_ratio_rmb'].iloc[0]
def is_supported(self, code, date): last_year = date.year cashflows = self.bonusDataManager.get_data( code, constant.talbe_name_cashflow, cj.CashflowCrawler()) rtn = get_value_year(cashflows, last_year, 'pub_date', ['total_liability', 'total_current_assets']) if base.is_df_validate(rtn): # 总负债 total_liability = float(rtn.get('total_liability')) # 流动资产 total_current_assets = float( rtn.get('total_current_assets') if rtn. get('total_current_assets') is not None else 0.0) capitals = self.bonusDataManager.get_data( code, constant.talbe_name_capital, cj.CapitalCrawler()) rtn = get_value_year(capitals, last_year, 'pub_date', ['share_total']) share_total = float(rtn.get('share_total')) * 10000 # print("cashflow : close {} current {}".format(close, (total_current_assets - total_liability)/ share_total* 2 / 3)) tmp = (total_current_assets - total_liability) / share_total if not tmp > 0: return False close = self._get_close(code) if None is close: return False rtn = close < tmp * 2 / 3 if not rtn: logging.info('filter_cashflow drop code {} : {} '.format( code, tmp)) return not rtn return False
def _get_totle_tangibles(self, code, year): df_balance = self.bonusDataManager.get_data( code, constant.table_name_balance, cj.BalanceCrawler()) if base.is_df_validate(df_balance): df_balance = df_balance.sort_values(by=['report_date'], ascending=False).head(1) intangible_assets = df_balance['intangible_assets'].iloc[0].astype( float) if intangible_assets > 0: totle_tangibles = df_balance['total_assets'].iloc[0].astype( float) - intangible_assets else: totle_tangibles = df_balance['total_assets'].iloc[0].astype( float) return totle_tangibles
def __init__(self): self.historyManager = HistoryDataManager.HistoryDataManager() self.jqDataCrawler = cj.JQDataCrawler() self.bonusDataManager = BonusDataManager()
def __init__(self): self.jqDataCrawler = cij.JQDataCrawler()