Esempio n. 1
0
def part_pnl_create_and_save(cls, file_name, key, fun_name, name1, name2,
                             name3, tmp_cut):
    fun_set = [mul_fun, sub_fun, add_fun]
    mix_fun_set = create_fun_set_2(fun_set)
    fun = mix_fun_set[fun_name]
    factor_set = load_part_factor(cls.sector_name, cls.xnms, cls.xinx,
                                  [name1, name2, name3])
    choose_1 = factor_set[name1]
    choose_2 = factor_set[name2]
    choose_3 = factor_set[name3]
    pnl_root_path = '/mnt/mfs/dat_whs/data/mix_factor_pnl/{}'.format(file_name)
    bt.AZ_Path_create(pnl_root_path)
    mix_factor = fun(choose_1, choose_2, choose_3)
    daily_pos = cls.deal_mix_factor(mix_factor)
    in_condition, out_condition, ic, sharpe_q_in_df_u, sharpe_q_in_df_m, sharpe_q_in_df_d, pot_in, \
    fit_ratio, leve_ratio, sharpe_q_out, pnl_df = filter_all(tmp_cut, daily_pos,
                                                             cls.return_choose,
                                                             cls.index_df,
                                                             if_hedge=cls.if_hedge,
                                                             hedge_ratio=1,
                                                             if_return_pnl=True,
                                                             if_only_long=cls.if_only_long)
    pnl_root_path = '/mnt/mfs/dat_whs/data/mix_factor_pnl/{}'.format(file_name)
    pnl_save_path = os.path.join(pnl_root_path, f'{key}|{fun_name}.csv')
    if not os.path.exists(pnl_save_path):
        pnl_df.to_csv(pnl_save_path, sep='|')
        print(f'{key}|{fun_name} is create!')
    else:
        print(f'{key}|{fun_name} is exists!')
Esempio n. 2
0
def save_date(date_key, target_dict, root_save_path):
    part_save_path = os.path.join(root_save_path, date_key[:4], date_key[:6],
                                  date_key)
    bt.AZ_Path_create(part_save_path)
    target_dict[date_key]['Close'].to_csv(
        os.path.join(part_save_path, 'Close.csv'))
    target_dict[date_key]['High'].to_csv(
        os.path.join(part_save_path, 'High.csv'))
    target_dict[date_key]['Low'].to_csv(os.path.join(part_save_path,
                                                     'Low.csv'))
    target_dict[date_key]['Open'].to_csv(
        os.path.join(part_save_path, 'Open.csv'))
    target_dict[date_key]['Turnover'].to_csv(
        os.path.join(part_save_path, 'Turnover.csv'))
    target_dict[date_key]['Volume'].to_csv(
        os.path.join(part_save_path, 'Volume.csv'))
Esempio n. 3
0
def create_pnl_file(all_use_factor, file_name, hold_time):
    pnl_root_path = os.path.join(root_path,
                                 'tmp_pnl_file/{}'.format(file_name))
    bt.AZ_Path_create(pnl_root_path)
    use_factor_pot = all_use_factor[all_use_factor['pot_in'].abs() > 40]
    use_factor_pot.sort_values(by='sp_u', inplace=True)
    for i in use_factor_pot.index[:3]:
        key, fun_name, name1, name2, name3, filter_fun_name, sector_name, *result = all_use_factor.iloc[
            i]
        print('**************************************')
        print('now {}\'s is running, key={}'.format(i, key))
        save_file_name = '|'.join([
            str(key), fun_name, name1, name2, name3, filter_fun_name,
            sector_name
        ]) + '.csv'
        fun_set = [mul_fun, sub_fun, add_fun]
        mix_fun_set = create_fun_set_2(fun_set)
        fun = mix_fun_set[fun_name]

        factor_set = load_part_factor(sector_name, xnms, xinx,
                                      [name1, name2, name3])
        choose_1 = factor_set[name1]
        choose_2 = factor_set[name2]
        choose_3 = factor_set[name3]
        mix_factor = fun(choose_1, choose_2, choose_3)
        daily_pos = deal_mix_factor(mix_factor, sector_df, suspendday_df,
                                    limit_buy_sell_df, hold_time, lag,
                                    if_only_long)

        in_condition, out_condition, ic, sharpe_q_in_df_u, sharpe_q_in_df_m, sharpe_q_in_df_d, pot_in, \
        fit_ratio, leve_ratio, sharpe_q_out, pnl_df = filter_all(cut_date, daily_pos, return_choose, index_df,
                                                                 if_hedge=True, hedge_ratio=1, if_return_pnl=True,
                                                                 if_only_long=if_only_long)
        print(in_condition, out_condition, ic, sharpe_q_in_df_u,
              sharpe_q_in_df_m, sharpe_q_in_df_d, pot_in, sharpe_q_out)
        print(result)
Esempio n. 4
0
def create_data(root_path, info_path, sector_df, mode='bkt'):
    info = pd.read_pickle(info_path)
    root_path = pt._BinFiles(mode)
    args = info['args']
    fun_list = info['fun'].split('.')
    raw_data_path = info['raw_data_path']
    raw_data_list = load_raw_data(root_path, raw_data_path)

    target_fun = find_fun(fun_list)
    target_df = target_fun(*raw_data_list, sector_df, *args)
    return target_df


if __name__ == '__main__':
    mode = 'bkt'

    begin_date = pd.to_datetime('20100101')
    end_date = pd.to_datetime('20180801')
    sector_name = 'market_top_500'
    save_root_path = '/mnt/mfs/dat_whs/data/new_factor_data/market_top_500_tmp'
    bt.AZ_Path_create(save_root_path)
    root_path = pt._BinFiles(mode)

    sector_data_class = SectorData(root_path)
    sector_df = sector_data_class.load_sector_data(begin_date, end_date,
                                                   sector_name)

    info_path = '/mnt/mfs/dat_whs/data/factor_to_fun/RQCHL_row_extre_0.2'
    target_df = create_data(info_path, sector_df, mode='bkt')
Esempio n. 5
0
        sector_df = sector_df[(sector_df.index >= pd.to_datetime(begin_str))
                              & (sector_df.index < pd.to_datetime(end_str))]

        xinx = sector_df.index
        xnms = sector_df.columns

        sector_open = EQA_open.reindex(index=xinx, columns=xnms)
        sector_high = EQA_high.reindex(index=xinx, columns=xnms)
        sector_low = EQA_low.reindex(index=xinx, columns=xnms)
        sector_close = EQA_close.reindex(index=xinx, columns=xnms)
        sector_volume = EQA_volume.reindex(index=xinx, columns=xnms)
        sector_adj_r = EQA_adj_r.reindex(index=xinx, columns=xnms)
        sector_amount = EQA_amount.reindex(index=xinx, columns=xnms)

        index_root_path = os.path.join(factor_save_path, sector)
        bt.AZ_Path_create(index_root_path)
        # # 技术指标
        para_list = [5, 20, 60, 120]
        # pnd_hl_set(para_list, index_root_path, sector_high, sector_low, sector_close, sector_df)
        pnd_volitality_set(index_root_path, para_list, sector_adj_r)
        #
        # limit_list = [1, 1.5, 2]
        # return_r_set(index_root_path, limit_list, sector_adj_r, sector_df)
        # return_c_set(para_list, index_root_path, limit_list, sector_adj_r, sector_df)
        #
        # volume_r_set(index_root_path, limit_list, sector_volume, sector_df)
        # volume_c_set(para_list, index_root_path, limit_list, sector_volume, sector_df)
        #
        # continue_list = [3, 4, 5]
        # pnd_continue_ud_set(continue_list, index_root_path, sector_adj_r, sector_df)
        #
Esempio n. 6
0
    def pos_sum_c(self, data, time_para, result_file_name, pot_in_num,
                  leve_ratio_num, sp_in, ic_num, fit_ratio):
        time_para_dict['time_para_1'] = [
            pd.to_datetime('20110101'),
            pd.to_datetime('20150101'),
            pd.to_datetime('20150701')
        ]

        time_para_dict['time_para_2'] = [
            pd.to_datetime('20120101'),
            pd.to_datetime('20160101'),
            pd.to_datetime('20160701')
        ]

        time_para_dict['time_para_3'] = [
            pd.to_datetime('20130601'),
            pd.to_datetime('20170601'),
            pd.to_datetime('20171201')
        ]

        time_para_dict['time_para_4'] = [
            pd.to_datetime('20140601'),
            pd.to_datetime('20180601'),
            pd.to_datetime('20181001')
        ]

        time_para_dict['time_para_5'] = [
            pd.to_datetime('20140701'),
            pd.to_datetime('20180701'),
            pd.to_datetime('20181001')
        ]

        time_para_dict['time_para_6'] = [
            pd.to_datetime('20140801'),
            pd.to_datetime('20180801'),
            pd.to_datetime('20181001')
        ]

        data_n = data[data['time_para'] == time_para]
        begin_date, cut_date, end_date = time_para_dict[time_para]
        a_n = data_n[(data_n['ic'].abs() > ic_num)
                     & (data_n['pot_in'].abs() > pot_in_num) &
                     (data_n['leve_ratio'].abs() > leve_ratio_num) &
                     (data_n['sp_in'].abs() > sp_in) &
                     (data_n['fit_ratio'].abs() > fit_ratio)]

        sum_factor_df = pd.DataFrame()
        pnl_save_path = '/mnt/mfs/dat_whs/data/mix_factor_pnl/' + result_file_name
        bt.AZ_Path_create(pnl_save_path)

        result_list = []
        pool = Pool(20)
        for i in a_n.index:
            # bkt_fun(pnl_save_path, a_n, i)
            result_list.append(
                pool.apply_async(bkt_fun, args=(
                    pnl_save_path,
                    a_n,
                    i,
                )))
        pool.close()
        pool.join()

        for res in result_list:
            sum_factor_df = sum_factor_df.add(res.get(), fill_value=0)

        sum_pos_df = self.deal_mix_factor(sum_factor_df).shift(2)
        in_condition, out_condition, ic, sharpe_q_in_df_u, sharpe_q_in_df_m, sharpe_q_in_df_d, pot_in, \
        fit_ratio, leve_ratio, sp_in, sharpe_q_out, pnl_df = filter_all(cut_date, sum_pos_df, main_model.return_choose,
                                                                        if_return_pnl=True, if_only_long=False)
        print(in_condition, out_condition, ic, sharpe_q_in_df_u,
              sharpe_q_in_df_m, sharpe_q_in_df_d, pot_in, fit_ratio,
              leve_ratio, sp_in, sharpe_q_out)
        plot_send_result(pnl_df, bt.AZ_Sharpe_y(pnl_df), 'mix_factor')
        return sum_pos_df, pnl_df