def create_information_report(self): """ Creates a tear sheet for information analysis of a signal. """ ic = pfm.calc_signal_ic(self.signal_data) ic.index = pd.to_datetime(ic.index, format="%Y%m%d") monthly_ic = pfm.mean_information_coefficient(ic, "M") self.ic_report_data = {'daily_ic': ic, 'monthly_ic': monthly_ic}
def test_analyze_signal(): # -------------------------------------------------------------------------------- # Step.1 load dataview dv = DataView() dv.load_dataview(dataview_folder) mask = mask_index_member(dv) can_enter, can_exit = limit_up_down(dv) # -------------------------------------------------------------------------------- # Step.3 get signal, benchmark and price data dv.add_formula('divert', '- Correlation(vwap_adj, volume, 10)', is_quarterly=False, add_data=True) signal = dv.get_ts('divert') price = dv.get_ts('close_adj') price_bench = dv.data_benchmark # Step.4 analyze! my_period = 5 obj = SignalDigger(output_folder='../output/test_signal', output_format='pdf') obj.process_signal_before_analysis( signal=signal, price=price, high=dv.get_ts("high_adj"), # 可为空 low=dv.get_ts("low_adj"), # 可为空 group=dv.get_ts("sw1"), n_quantiles=5, # quantile分类数 mask=mask, # 过滤条件 can_enter=can_enter, # 是否能进场 can_exit=can_exit, # 是否能出场 period=my_period, # 持有期 benchmark_price=price_bench, # 基准价格 可不传入,持有期收益(return)计算为绝对收益 commission=0.0008, ) signal_data = obj.signal_data result = analysis(signal_data, is_event=False, period=my_period) ic = pfm.calc_signal_ic(signal_data, by_group=True) mean_ic_by_group = pfm.mean_information_coefficient(ic, by_group=True) plotting.plot_ic_by_group(mean_ic_by_group) res = obj.create_full_report()
signal_dict = { alpha: signal_data(dv.get_ts(alpha), alpha, period=20, quantile=5) for alpha in good_alpha.index } def ic_length(signal, days=750): return signal.loc[signal.index.levels[0][-days]:] from jaqs.research.signaldigger import performance as pfm performance_dict = {} for alpha in good_alpha.index: ic = pfm.calc_signal_ic(ic_length(signal_dict[alpha]), by_group=True) mean_ic_by_group = pfm.mean_information_coefficient(ic, by_group=True) performance_dict[alpha] = round(mean_ic_by_group, 2) ic_industry = pd.Panel(performance_dict).minor_xs('ic') High_IC_Industry = pd.DataFrame([ ic_industry[ic_industry >= 0.05][alpha].dropna(how='all') for alpha in good_alpha.index ]).T #输出 八个因子,好因子就剩下一个alpha46 alpha46 = pd.Series({ 'name': 'alpha46', 'data': ['close'], 'IC': good_alpha_dict['alpha46'], 'type': '191因子',