Пример #1
0
    def cal_factor_exposure(self, beg_date, end_date):
        """ 计算因子暴露 """

        # read data
        cfo = Stock().read_factor_h5("NetOperateCashFlow")
        cfo_ttm = Stock().change_single_quarter_to_ttm_quarter(cfo)

        expense = Stock().read_factor_h5("FinanceExpenseQuarter")
        expense_ttm = Stock().change_single_quarter_to_ttm_quarter(
            expense) / 100000000.0

        tax_rate = Stock().read_factor_h5("TaxRate")
        tax_rate = tax_rate.T.fillna(method="pad", limit=5).T

        expense_ttm_adjust = expense_ttm.mul(1 - tax_rate)
        cfo_ttm_adjust = cfo_ttm.add(expense_ttm_adjust)

        holder = Stock().read_factor_h5("TotalShareHoldeRequity") / 100000000.0
        debt = Stock().read_factor_h5("InterestDebt") / 100000000.0
        cash = Stock().read_factor_h5("CashEquivalents") / 100000000.0
        operate_net_asset = holder + debt - cash

        cfroi = cfo_ttm_adjust.div(operate_net_asset)

        report_data = Stock().read_factor_h5("ReportDateDaily")
        cfroi = Stock().change_quarter_to_daily_with_disclosure_date(
            cfroi, report_data, beg_date, end_date)

        res = cfroi.T.dropna(how='all').T
        self.save_alpha_factor_exposure(res, self.raw_factor_name)
Пример #2
0
def ARAPIncomeTTM(beg_date, end_date):
    """
    因子说明:(预收账款 + 应付账款) / 营业总收入 TTM
    最近一期财报 实时更新
    若有一个为负值 结果为负值
    """

    # param
    #################################################################################
    factor_name = 'ARAPIncomeTTM'
    ipo_num = 90

    # read data
    #################################################################################
    income = Stock().get_factor_h5("OperatingIncome", None, "primary_mfc")
    advance = Stock().get_factor_h5("AdvanceReceipts", None, "primary_mfc")
    payable = Stock().get_factor_h5("AccountsPayable", None, "primary_mfc")

    # data precessing
    #################################################################################
    [advance, payable,
     income] = Stock().make_same_index_columns([advance, payable, income])

    add = advance.add(payable)
    ratio = add.div(income)
    ratio = StockFactorOperate().change_quarter_to_daily_with_report_date(
        ratio, beg_date, end_date)

    res = ratio.T.dropna(how='all').T

    # save data
    #############################################################################
    Stock().write_factor_h5(res, factor_name, "alpha_dfc")
    return res
    def cal_factor_barra_leverage_book_leverage(self):
        """
        账面杠杆 =(普通股账面价值+优先股账面价值+长期负债)/ 普通股账面价值
        """
        holder_equity = Stock().read_factor_h5("TotalShareHoldeRequityDaily")
        preferred_equity = Stock().read_factor_h5("PreferredEquityDaily")
        common_equity = holder_equity.sub(preferred_equity)
        long_loan = Stock().read_factor_h5("LongTermLoanDaily")

        add = holder_equity.add(long_loan, fill_value=0.0)
        book_leverage = add.div(common_equity)

        book_leverage = book_leverage.T.dropna(how='all').T
        self.save_risk_factor_exposure(book_leverage,
                                       self.raw_factor_name_book_leverage)
        book_leverage = FactorPreProcess().remove_extreme_value_mad(
            book_leverage)
        book_leverage = FactorPreProcess().standardization(book_leverage)
        self.save_risk_factor_exposure(book_leverage,
                                       self.factor_name_book_leverage)