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)
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)