def bias_turn_pnd(turnratio, sector_df, n): bias_turnratio = bt.AZ_Rolling(turnratio, n).mean() / bt.AZ_Rolling( turnratio, 480).mean() - 1 bias_turnratio_up = (bias_turnratio > 0).astype(int) bias_turnratio_dn = (bias_turnratio < 0).astype(int) target_df = bias_turnratio_up - bias_turnratio_dn return target_df * sector_df
def CCI(high, low, close, sector_df, n, limit_list): PP = (high + low + close) / 3 CCI_signal = (PP - bt.AZ_Rolling(PP, n).mean()) / bt.AZ_Rolling( PP, n).std() all_target_df = pd.DataFrame() for limit in limit_list: CCI_up = (CCI_signal >= limit).astype(int) CCI_dn = -(CCI_signal <= -limit).astype(int) CCI = CCI_up + CCI_dn all_target_df = all_target_df.add(CCI, fill_value=0) return all_target_df * sector_df
def pnd_vol_continue_ud(self, adj_r, sector_df, n): vol_df = bt.AZ_Rolling(adj_r, n).std() * (250**0.5) vol_df[vol_df < 0.08] = 0.08 vol_continue_ud_df = self.pnd_continue_ud(vol_df, sector_df, n_list=[3, 4, 5]) return vol_continue_ud_df
def pnd_volitality_and_more_(self, n_list): for n in n_list: vol_df = bt.AZ_Rolling(self.sector_adj_r, n).std() * (250**0.5) vol_df[vol_df < 0.08] = 0.08 evol_df = bt.AZ_Rolling(vol_df, 30).apply( lambda x: 1 if x[-1] > 2 * x.mean() else 0) * self.sector_df vol_continue_ud_df = self.pnd_continue_ud(vol_df, self.sector_df, n_list=[3, 4, 5]) # 剔除极值 vol_df_count_down = 1 / (vol_df.replace(0, np.nan) * self.sector_df) file_name = f'vol_p{n}d' fun = 'funda_data_deal.BaseDeal.pnd_volitality' raw_data_path = ('EM_Funda/DERIVED_14/aadj_r.csv', ) args = (n, ) self.judge_save_fun(vol_df, file_name, self.save_root_path, fun, raw_data_path, args, if_filter=False) file_name = f'vol_count_down_p{n}d' fun = 'funda_data_deal.BaseDeal.pnd_volitality_count_down' raw_data_path = ('EM_Funda/DERIVED_14/aadj_r.csv', ) args = (n, ) self.judge_save_fun(vol_df_count_down, file_name, self.save_root_path, fun, raw_data_path, args) file_name = f'evol_p{n}d' fun = 'funda_data_deal.BaseDeal.pnd_evol' raw_data_path = ('EM_Funda/DERIVED_14/aadj_r.csv', ) args = (n, ) self.judge_save_fun(evol_df, file_name, self.save_root_path, fun, raw_data_path, args) file_name = f'continue_ud_p{n}d' fun = 'funda_data_deal.BaseDeal.pnd_vol_continue_ud' raw_data_path = ('EM_Funda/DERIVED_14/aadj_r.csv', ) args = (n, ) self.judge_save_fun(vol_continue_ud_df, file_name, self.save_root_path, fun, raw_data_path, args)
def turn_pnd(self, turnratio, sector_df, n, percent): turnratio_mean = bt.AZ_Rolling(turnratio, n).mean() target_df = self.row_extre(turnratio_mean, sector_df, percent) return target_df * sector_df
def wgt_return_pnd(self, aadj_r, turnratio, sector_df, n, percent): aadj_r_c = (aadj_r * turnratio) wgt_return_pnd_df = bt.AZ_Rolling(aadj_r_c, n).sum() target_df = self.row_extre(wgt_return_pnd_df, sector_df, percent) return target_df
def return_pnd(self, aadj_r, sector_df, n, percent): return_pnd_df = bt.AZ_Rolling(aadj_r, n).sum() target_df = self.row_extre(return_pnd_df, sector_df, percent) return target_df
def pnd_volitality(adj_r, sector_df, n): vol_df = bt.AZ_Rolling(adj_r, n).std() * (250**0.5) vol_df[vol_df < 0.08] = 0.08 return vol_df
def pnd_evol(adj_r, sector_df, n): vol_df = bt.AZ_Rolling(adj_r, n).std() * (250**0.5) vol_df[vol_df < 0.08] = 0.08 evol_df = bt.AZ_Rolling( vol_df, 30).apply(lambda x: 1 if x[-1] > 2 * x.mean() else 0) return evol_df * sector_df
def pnd_volitality_count_down(adj_r, sector_df, n): vol_df = bt.AZ_Rolling(adj_r, n).std() * (250**0.5) * sector_df vol_df[vol_df < 0.08] = 0.08 return 1 / vol_df.replace(0, np.nan)