def __init__(self): AlphaFactor.__init__(self) self.exposure_path = self.data_path self.raw_factor_name = 'alpha_raw_profit_yoy'
def __init__(self): AlphaFactor.__init__(self) self.exposure_path = self.data_path self.raw_factor_name = 'alpha_raw_illiquidity'
def __init__(self): AlphaFactor.__init__(self) self.exposure_path = self.data_path self.raw_factor_name = 'alpha_raw_amount_ln_20d'
def split_alpha(self, beg_date, end_date, factor_name, period="W", stock_pool_name="AllChinaStockFilter"): """ 计算残差Alpha 回归风格因子和行业 计算在风格和行业上的暴露 """ alpha = AlphaFactor().get_standard_alpha_factor(factor_name) date_series = Date().get_trade_date_series(beg_date, end_date, period=period) barra_date_series = Barra().get_exposure_date_series() date_series = list( set(date_series) & set(alpha.columns) & set(barra_date_series)) date_series.sort() res_alpha = pd.DataFrame() exposure_risk = pd.DataFrame() for i_date in range(len(date_series)): date = date_series[i_date] alpha_date = pd.DataFrame(alpha[date]) alpha_date.columns = ['Alpha'] alpha_date = alpha_date.dropna() risk_exposure = Barra().get_factor_exposure_date( date, type_list=['STYLE', 'INDUSTRY', "COUNTRY"]) stock_pool = Stock().get_invest_stock_pool( date=date, stock_pool_name=stock_pool_name) stock_pool = list( set(stock_pool) & set(risk_exposure.index) & set(alpha_date.index)) stock_pool.sort() alpha_date = alpha_date.loc[stock_pool, "Alpha"] risk_exposure = risk_exposure.loc[stock_pool, :] concat_data = pd.concat([alpha_date, risk_exposure], axis=1) concat_data = concat_data.dropna() if len(concat_data) > self.min_stock_number: factor_val = concat_data.iloc[:, 0] neutral_val = concat_data.iloc[:, 1:] print("Split %s Alpha Exposure At %s %s" % (factor_name, date, stock_pool_name)) model = sm.OLS(factor_val.values, neutral_val.values) regress = model.fit() params = pd.DataFrame(regress.params, index=neutral_val.columns, columns=['param']) factor_res = factor_val - regress.predict(neutral_val) params = pd.DataFrame(params) params.columns = [date] res_alpha_date = pd.DataFrame(factor_res) res_alpha_date.columns = [date] exposure_risk = pd.concat([exposure_risk, params], axis=1) res_alpha = pd.concat([res_alpha, res_alpha_date], axis=1) else: print("Split %s Alpha Exposure At %s %s is Null" % (factor_name, date, stock_pool_name)) res_alpha = FactorPreProcess().remove_extreme_value_mad(res_alpha) res_alpha = FactorPreProcess().standardization(res_alpha) self.save_alpha_risk_exposure(exposure_risk, factor_name, stock_pool_name) self.save_alpha_res_exposure(res_alpha, factor_name, stock_pool_name)
def __init__(self): AlphaFactor.__init__(self) self.exposure_path = self.data_path self.raw_factor_name = 'alpha_raw_average_holder'
def __init__(self): AlphaFactor.__init__(self) self.exposure_path = self.data_path self.raw_factor_name = 'alpha_raw_to_bias_6m'