コード例 #1
0
    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}
コード例 #2
0
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()
コード例 #3
0
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因子',