Exemple #1
0
    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
Exemple #2
0
    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)
Exemple #3
0
    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
Exemple #4
0
    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
Exemple #5
0
 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')
Exemple #6
0
    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
Exemple #7
0
 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]
Exemple #8
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
Exemple #9
0
 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
Exemple #10
0
 def __init__(self):
     self.historyManager = HistoryDataManager.HistoryDataManager()
     self.jqDataCrawler = cj.JQDataCrawler()
     self.bonusDataManager = BonusDataManager()
Exemple #11
0
 def __init__(self):
     self.jqDataCrawler = cij.JQDataCrawler()