예제 #1
0
파일: extA.py 프로젝트: zly111/abu
def sample_a21():
    """
    A.2.1 数据模式的切换
    :return:
    """
    # 表A-1所示
    print(ABuSymbolPd.make_kl_df('601398').tail())

    # 局部使用enable_example_env_ipython,示例
    abupy.env.enable_example_env_ipython()
    # 如果本地有相应股票的缓存,可以使用如下代码强制使用本地缓存数据
    # abupy.env.g_data_fetch_mode = EMarketDataFetchMode.E_DATA_FETCH_FORCE_LOCAL

    # 设置初始资金数
    read_cash = 1000000

    # 择时股票池
    choice_symbols = [
        'usNOAH', 'usSFUN', 'usBIDU', 'usAAPL', 'usGOOG', 'usTSLA', 'usWUBA',
        'usVIPS'
    ]
    # 使用run_loop_back运行策略
    abu_result_tuple, _ = abu.run_loop_back(read_cash,
                                            buy_factors,
                                            sell_factors,
                                            stock_pickers,
                                            choice_symbols=choice_symbols,
                                            n_folds=2)
    metrics = AbuMetricsBase(*abu_result_tuple)
    metrics.fit_metrics()
    metrics.plot_returns_cmp()

    # *****************************************************************************************************************
    # 切换数据源
    abupy.env.g_market_source = EMarketSourceType.E_MARKET_SOURCE_tx
    # 强制走网络数据源
    abupy.env.g_data_fetch_mode = EMarketDataFetchMode.E_DATA_FETCH_FORCE_NET
    # 择时股票池
    choice_symbols = [
        '601398', '600028', '601857', '601318', '600036', '000002', '600050',
        '600030'
    ]
    # 使用run_loop_back运行策略
    abu_result_tuple, _ = abu.run_loop_back(read_cash,
                                            buy_factors,
                                            sell_factors,
                                            stock_pickers,
                                            choice_symbols=choice_symbols,
                                            n_folds=2)

    metrics = AbuMetricsBase(*abu_result_tuple)
    metrics.fit_metrics()
    metrics.plot_returns_cmp()
예제 #2
0
def sample_91(show=True):
    """
    9.1 度量的基本使用方法
    :return:
    """
    # 设置初始资金数
    read_cash = 1000000
    # 择时股票池
    choice_symbols = [
        'usNOAH', 'usSFUN', 'usBIDU', 'usAAPL', 'usGOOG', 'usTSLA', 'usWUBA',
        'usVIPS'
    ]
    # 使用run_loop_back运行策略
    abu_result_tuple, kl_pd_manager = abu.run_loop_back(
        read_cash,
        buy_factors,
        sell_factors,
        stock_pickers,
        choice_symbols=choice_symbols,
        n_folds=2)
    metrics = AbuMetricsBase(*abu_result_tuple)
    metrics.fit_metrics()
    if show:
        metrics.plot_returns_cmp()
    return metrics
예제 #3
0
def run_loo_back(choice_symbols,
                 ps=None,
                 n_folds=3,
                 start=None,
                 end=None,
                 only_info=False):
    """封装一个回测函数,返回回测结果,以及回测度量对象"""
    if choice_symbols[0].startswith('us'):
        abupy.env.g_market_target = EMarketTargetType.E_MARKET_TARGET_US
    else:
        abupy.env.g_market_target = EMarketTargetType.E_MARKET_TARGET_CN
    abu_result_tuple, _ = abu.run_loop_back(cash,
                                            buy_factors,
                                            sell_factors,
                                            ps,
                                            start=start,
                                            end=end,
                                            n_folds=n_folds,
                                            choice_symbols=choice_symbols)
    ABuProgress.clear_output()
    metrics = AbuMetricsBase.show_general(*abu_result_tuple,
                                          returns_cmp=only_info,
                                          only_info=only_info,
                                          only_show_returns=True)
    return abu_result_tuple, metrics
예제 #4
0
def sample_a21():
    # 设置初始资金数
    read_cash = 50000

    ###########################################################################################
    # 回测生成买入时刻特征
    abupy.env.g_enable_ml_feature = True
    # 回测将symbols切割分为训练集数据和测试集数据
    abupy.env.g_enable_train_test_split = True
    # 下面设置回测时切割训练集,测试集使用的切割比例参数,默认为10,即切割为10份,9份做为训练,1份做为测试,
    # 由于美股股票数量多,所以切割分为4份,3份做为训练集,1份做为测试集
    abupy.env.g_split_tt_n_folds = 4

    ###########################################################################################

    # 择时股票池
    # choice_symbols = ['603993', '601998', '601992', '601991', '601989', '601988', '601985', '601939', '601933', '601919', '601901', '601899', '601898', '601881', '601877', '601857', '601828', '601818', '601808', '601800', '601788', '601766', '601727', '601688', '601669', '601668', '601633', '601628', '601618', '601607', '601601', '601600', '601398', '601390', '601360', '601328', '601288', '601238', '601229', '601225', '601211', '601186', '601169', '601166', '601155', '601111', '601108', '601088', '601018', '601012', '601009', '601006', '600999', '600958', '600919', '600900', '600893', '600887', '600837', '600816', '600795', '600703', '600690', '600688', '600663', '600660', '600606', '600600', '600588', '600585', '600518', '600487', '600406', '600398', '600383', '600362', '600346', '600340', '600309', '600297', '600221', '600196', '600188', '600176', '600115', '600111', '600104', '600061', '600050', '600048', '600036', '600031', '600030', '600029', '600028', '600025', '600023', '600019', '600018', '600016', '600015', '600011', '600010', '600000', '300498', '300433', '300124', '300072', '300070', '300059', '300015', '300003', '002739', '002736', '002714', '002600', '002558', '002493', '002475', '002456', '002450', '002415', '002310', '002252', '002241', '002236', '002202', '002142', '002120', '002044', '002027', '002024', '002010', '001979', '001965', '000895', '000776', '000725', '000617', '000166', '000069', '000063', '000039', '000002', '000001']
    # choice_symbols = ['601398']
    choice_symbols = [
        '601398', '601988', '601939', '601328', '601288', '600887', '600029',
        '000002'
    ]

    abu_result_tuple, _ = abu.run_loop_back(read_cash,
                                            buy_factors,
                                            sell_factors,
                                            stock_pickers,
                                            choice_symbols=choice_symbols,
                                            n_folds=4,
                                            commission_dict=commission_dict)

    # 把运行的结果保存在本地,以便之后分析回测使用,保存回测结果数据代码如下所示
    abu.store_abu_result_tuple(abu_result_tuple,
                               n_folds=4,
                               store_type=abupy.EStoreAbu.E_STORE_CUSTOM_NAME,
                               custom_name='tt_train_cn')

    abu.store_abu_result_tuple(abu_result_tuple,
                               n_folds=4,
                               store_type=abupy.EStoreAbu.E_STORE_CUSTOM_NAME,
                               custom_name='tt_test_cn')

    # AbuMetricsBase.show_general(*abu_result_tuple, only_show_returns=True)

    metrics = AbuMetricsBase(*abu_result_tuple)
    metrics.fit_metrics()
    # 筛出有交易结果的
    orders_pd_atr = abu_result_tuple.orders_pd[
        abu_result_tuple.orders_pd.result != 0]
    orders_pd_atr.filter(
        ['buy_cnt', 'buy_pos', 'buy_price', 'profit', 'result'])
    metrics.plot_returns_cmp(only_info=True)
    # metrics.plot_buy_factors()
    # metrics.plot_sell_factors()
    metrics.plot_effect_mean_day()
    # plt.show()
    metrics.plot_keep_days()
    # plt.show()
    metrics.plot_max_draw_down()
예제 #5
0
def sample_94_2(from_cache=False):
    """
    9.4_2 使用切割训练集测试集模式,且生成交易特征,回测训练集交易数据, mac pro顶配大概下面跑了4个小时
    :return:
    """
    # 关闭沙盒数据环境
    abupy.env.disable_example_env_ipython()
    from abupy import EMarketDataFetchMode
    # 因为sample_94_1下载了预先数据,使用缓存,设置E_DATA_FETCH_FORCE_LOCAL
    abupy.env.g_data_fetch_mode = EMarketDataFetchMode.E_DATA_FETCH_FORCE_LOCAL

    # 回测生成买入时刻特征
    abupy.env.g_enable_ml_feature = True
    # 回测将symbols切割分为训练集数据和测试集数据
    abupy.env.g_enable_train_test_split = True
    # 下面设置回测时切割训练集,测试集使用的切割比例参数,默认为10,即切割为10份,9份做为训练,1份做为测试,
    # 由于美股股票数量多,所以切割分为4份,3份做为训练集,1份做为测试集
    abupy.env.g_split_tt_n_folds = 4

    from abupy import EStoreAbu
    if from_cache:
        abu_result_tuple = \
            abu.load_abu_result_tuple(n_folds=5, store_type=EStoreAbu.E_STORE_CUSTOM_NAME,
                                      custom_name='train_us')
    else:
        # 初始化资金200万,资金管理依然使用默认atr
        read_cash = 5000000
        # 每笔交易的买入基数资金设置为万分之15
        abupy.beta.atr.g_atr_pos_base = 0.0015
        # 使用run_loop_back运行策略,因子使用和之前一样,
        # choice_symbols=None为全市场回测,5年历史数据回测
        # 不同电脑运行速度差异大,mac pro顶配大概下面跑了4小时
        # choice_symbols=None为全市场回测,5年历史数据回测
        abu_result_tuple, _ = abu.run_loop_back(read_cash,
                                                buy_factors,
                                                sell_factors,
                                                stock_pickers,
                                                choice_symbols=None,
                                                start='2012-08-08',
                                                end='2017-08-08')
        # 把运行的结果保存在本地,以便之后分析回测使用,保存回测结果数据代码如下所示
        abu.store_abu_result_tuple(abu_result_tuple,
                                   n_folds=5,
                                   store_type=EStoreAbu.E_STORE_CUSTOM_NAME,
                                   custom_name='train_us')

    print('abu_result_tuple.action_pd.deal.value_counts():\n',
          abu_result_tuple.action_pd.deal.value_counts())

    metrics = AbuMetricsBase(*abu_result_tuple)
    metrics.fit_metrics()
    metrics.plot_returns_cmp(only_show_returns=True)
예제 #6
0
def run_loo_back(choice_symbols, start, end):
    abu_result_tuple, _ = abu.run_loop_back(read_cash,
                                            buy_factors,
                                            sell_factors,
                                            start=start,
                                            end=end,
                                            choice_symbols=choice_symbols,
                                            n_process_pick=1)
    ABuProgress.clear_output()
    AbuMetricsBase.show_general(*abu_result_tuple,
                                returns_cmp=True,
                                only_info=True)
    return abu_result_tuple
예제 #7
0
def run_loop_back():
    global abu_result_tuple
    abu_result_tuple, _ = abu.run_loop_back(read_cash,
                                            buy_factors,
                                            sell_factors,
                                            choice_symbols=None,
                                            start='2012-08-08',
                                            end='2017-08-08')
    # 把运行的结果保存在本地,以便之后分析回测使用,保存回测结果数据代码如下所示
    abu.store_abu_result_tuple(abu_result_tuple,
                               n_folds=5,
                               store_type=EStoreAbu.E_STORE_CUSTOM_NAME,
                               custom_name='train_cn')
    ABuProgress.clear_output()
예제 #8
0
def sample_a22():
    # 设置初始资金数
    read_cash = 5000000

    abupy.env.g_enable_ump_main_deg_block = True
    abupy.env.g_enable_ump_main_jump_block = True
    abupy.env.g_enable_ump_main_price_block = True
    abupy.env.g_enable_ump_main_wave_block = True

    # 择时股票池
    # choice_symbols = ['603993', '601998', '601992', '601991', '601989', '601988', '601985', '601939', '601933', '601919', '601901', '601899', '601898', '601881', '601877', '601857', '601828', '601818', '601808', '601800', '601788', '601766', '601727', '601688', '601669', '601668', '601633', '601628', '601618', '601607', '601601', '601600', '601398', '601390', '601360', '601328', '601288', '601238', '601229', '601225', '601211', '601186', '601169', '601166', '601155', '601111', '601108', '601088', '601018', '601012', '601009', '601006', '600999', '600958', '600919', '600900', '600893', '600887', '600837', '600816', '600795', '600703', '600690', '600688', '600663', '600660', '600606', '600600', '600588', '600585', '600518', '600487', '600406', '600398', '600383', '600362', '600346', '600340', '600309', '600297', '600221', '600196', '600188', '600176', '600115', '600111', '600104', '600061', '600050', '600048', '600036', '600031', '600030', '600029', '600028', '600025', '600023', '600019', '600018', '600016', '600015', '600011', '600010', '600000', '300498', '300433', '300124', '300072', '300070', '300059', '300015', '300003', '002739', '002736', '002714', '002600', '002558', '002493', '002475', '002456', '002450', '002415', '002310', '002252', '002241', '002236', '002202', '002142', '002120', '002044', '002027', '002024', '002010', '001979', '001965', '000895', '000776', '000725', '000617', '000166', '000069', '000063', '000039', '000002', '000001']
    # choice_symbols = ['601398']
    # choice_symbols = ['600036']
    # choice_symbols = ['601398', '601988', '601939', '601328', '601288', '600887', '600029', '000002']
    # choice_symbols = ['601398', '601988', '601939', '603993', '600999', '300059', '600900', '601328', '601288',
    # '600887', '600029', '000002', '600196', '002024', '002241', '600050', '601989', '601992', '601901']
    # choice_symbols = ['601398', '601988', '601939', '603993', '600196', '600660', '600703', '600887', '600999', '300059', '600900', '601328', '601288', '600887', '600029', '000002']

    choice_symbols = load_today_stock_list()
    print(choice_symbols)

    abu_result_tuple, _ = abu.run_loop_back(read_cash,
                                            buy_factors,
                                            sell_factors,
                                            stock_pickers,
                                            choice_symbols=choice_symbols,
                                            n_folds=1,
                                            commission_dict=commission_dict)

    # AbuMetricsBase.show_general(*abu_result_tuple, only_show_returns=True)

    metrics = AbuMetricsBase(*abu_result_tuple)
    metrics.fit_metrics()
    # 筛出有交易结果的
    orders_pd_atr = abu_result_tuple.orders_pd[
        abu_result_tuple.orders_pd.result != 0]
    orders_pd_atr.filter(
        ['buy_cnt', 'buy_pos', 'buy_price', 'profit', 'result'])

    # 保存交易结果
    store_abu_result_out_put(abu_result_tuple)
    metrics.plot_returns_cmp(only_info=True)
    # metrics.plot_buy_factors()
    # metrics.plot_sell_factors()
    metrics.plot_effect_mean_day()
    # plt.show()
    metrics.plot_keep_days()
    # plt.show()
    metrics.plot_max_draw_down()
예제 #9
0
파일: c9.py 프로젝트: 3774257/abu
def sample_94_2(from_cache=False):
    """
    9.4_2 使用切割训练集测试集模式,且生成交易特征,回测训练集交易数据, mac pro顶配大概下面跑了4个小时
    :return:
    """
    # 关闭沙盒数据环境
    abupy.env.disable_example_env_ipython()
    from abupy import EMarketDataFetchMode
    # 因为sample_94_1下载了预先数据,使用缓存,设置E_DATA_FETCH_FORCE_LOCAL
    abupy.env.g_data_fetch_mode = EMarketDataFetchMode.E_DATA_FETCH_FORCE_LOCAL

    # 回测生成买入时刻特征
    abupy.env.g_enable_ml_feature = True
    # 回测将symbols切割分为训练集数据和测试集数据
    abupy.env.g_enable_train_test_split = True
    # 下面设置回测时切割训练集,测试集使用的切割比例参数,默认为10,即切割为10份,9份做为训练,1份做为测试,
    # 由于美股股票数量多,所以切割分为4份,3份做为训练集,1份做为测试集
    abupy.env.g_split_tt_n_folds = 4

    from abupy import EStoreAbu
    if from_cache:
        abu_result_tuple = \
            abu.load_abu_result_tuple(n_folds=5, store_type=EStoreAbu.E_STORE_CUSTOM_NAME,
                                      custom_name='train_us')
    else:
        # 初始化资金200万,资金管理依然使用默认atr
        read_cash = 5000000
        # 每笔交易的买入基数资金设置为万分之15
        abupy.beta.atr.g_atr_pos_base = 0.0015
        # 使用run_loop_back运行策略,因子使用和之前一样,
        # choice_symbols=None为全市场回测,5年历史数据回测
        # 不同电脑运行速度差异大,mac pro顶配大概下面跑了4小时
        # choice_symbols=None为全市场回测,5年历史数据回测
        abu_result_tuple, _ = abu.run_loop_back(read_cash,
                                                buy_factors, sell_factors,
                                                stock_pickers,
                                                choice_symbols=None,
                                                start='2012-08-08', end='2017-08-08')
        # 把运行的结果保存在本地,以便之后分析回测使用,保存回测结果数据代码如下所示
        abu.store_abu_result_tuple(abu_result_tuple, n_folds=5, store_type=EStoreAbu.E_STORE_CUSTOM_NAME,
                                   custom_name='train_us')

    print('abu_result_tuple.action_pd.deal.value_counts():\n', abu_result_tuple.action_pd.deal.value_counts())

    metrics = AbuMetricsBase(*abu_result_tuple)
    metrics.fit_metrics()
    metrics.plot_returns_cmp(only_show_returns=True)
예제 #10
0
def sample_94_3(from_cache=False, show=True):
    """
    9.4_3 使用切割好的测试数据集快,mac pro顶配大概下面跑了半个小时
    :return:
    """
    # 关闭沙盒数据环境
    abupy.env.disable_example_env_ipython()
    from abupy import EMarketDataFetchMode
    # 因为sample_94_1下载了预先数据,使用缓存,设置E_DATA_FETCH_FORCE_LOCAL
    abupy.env.g_data_fetch_mode = EMarketDataFetchMode.E_DATA_FETCH_FORCE_LOCAL

    abupy.env.g_enable_train_test_split = False
    # 使用切割好的测试数据
    abupy.env.g_enable_last_split_test = True
    # 回测生成买入时刻特征
    abupy.env.g_enable_ml_feature = True

    from abupy import EStoreAbu
    if from_cache:
        abu_result_tuple_test = \
            abu.load_abu_result_tuple(n_folds=5, store_type=EStoreAbu.E_STORE_CUSTOM_NAME,
                                      custom_name='test_us')
    else:
        read_cash = 5000000
        abupy.beta.atr.g_atr_pos_base = 0.007
        choice_symbols = None
        abu_result_tuple_test, kl_pd_manager_test = abu.run_loop_back(
            read_cash,
            buy_factors,
            sell_factors,
            stock_pickers,
            choice_symbols=choice_symbols,
            start='2012-08-08',
            end='2017-08-08')
        abu.store_abu_result_tuple(abu_result_tuple_test,
                                   n_folds=5,
                                   store_type=EStoreAbu.E_STORE_CUSTOM_NAME,
                                   custom_name='test_us')

    print('abu_result_tuple_test.action_pd.deal.value_counts():\n',
          abu_result_tuple_test.action_pd.deal.value_counts())

    metrics = AbuMetricsBase(*abu_result_tuple_test)
    metrics.fit_metrics()
    if show:
        metrics.plot_returns_cmp(only_show_returns=True)
    return metrics
예제 #11
0
def sample_a21():
    # 设置初始资金数
    read_cash = 500000000

    # 择时股票池
    # choice_symbols = ['603993', '601998', '601992', '601991', '601989', '601988', '601985', '601939', '601933', '601919', '601901', '601899', '601898', '601881', '601877', '601857', '601828', '601818', '601808', '601800', '601788', '601766', '601727', '601688', '601669', '601668', '601633', '601628', '601618', '601607', '601601', '601600', '601398', '601390', '601360', '601328', '601288', '601238', '601229', '601225', '601211', '601186', '601169', '601166', '601155', '601111', '601108', '601088', '601018', '601012', '601009', '601006', '600999', '600958', '600919', '600900', '600893', '600887', '600837', '600816', '600795', '600703', '600690', '600688', '600663', '600660', '600606', '600600', '600588', '600585', '600518', '600487', '600406', '600398', '600383', '600362', '600346', '600340', '600309', '600297', '600221', '600196', '600188', '600176', '600115', '600111', '600104', '600061', '600050', '600048', '600036', '600031', '600030', '600029', '600028', '600025', '600023', '600019', '600018', '600016', '600015', '600011', '600010', '600000', '300498', '300433', '300124', '300072', '300070', '300059', '300015', '300003', '002739', '002736', '002714', '002600', '002558', '002493', '002475', '002456', '002450', '002415', '002310', '002252', '002241', '002236', '002202', '002142', '002120', '002044', '002027', '002024', '002010', '001979', '001965', '000895', '000776', '000725', '000617', '000166', '000069', '000063', '000039', '000002', '000001']
    choice_symbols = ['601398']
    # choice_symbols = ['600999']
    choice_symbols = ['601398', '601988', '601939', '603993', '600999', '300059', '600900', '601328', '601288', '600887', '600029', '000002']
    # choice_symbols = ['002285', '600109']
    choice_symbols = None

    abu_result_tuple, _ = abu.run_loop_back(read_cash,
                                            buy_factors, sell_factors, stock_pickers, choice_symbols=choice_symbols,
                                            n_folds=15, commission_dict=commission_dict)

    print(abu_result_tuple.orders_pd)

    # AbuMetricsBase.show_general(*abu_result_tuple, only_show_returns=False)
    metrics = AbuMetricsBase(*abu_result_tuple)
    metrics.fit_metrics()

    # plot_simple = abu_result_tuple.orders_pd[abu_result_tuple.orders_pd.profit_cg < 0]
    # save=True保存在本地,耗时操作,需要运行几分钟
    # ABuMarketDrawing.plot_candle_from_order(abu_result_tuple.orders_pd, save=False)
    # 筛出有交易结果的
    orders_pd_atr = abu_result_tuple.orders_pd[abu_result_tuple.orders_pd.result != 0]
    orders_pd_atr.filter(['buy_cnt', 'buy_pos', 'buy_price', 'profit', 'result'])
    metrics.plot_returns_cmp()

    # kl_pd = ABuSymbolPd.make_kl_df('601398', n_folds=15)

    # plot_his_trade(abu_result_tuple.orders_pd, kl_pd)
    # 保存交易结果
    store_abu_result_out_put(abu_result_tuple)
    metrics.plot_order_returns_cmp()
    # metrics.plot_buy_factors()
    metrics.plot_sell_factors()
    # metrics.show_general(*abu_result_tuple, only_show_returns=True)
    # metrics.plot_effect_mean_day()
    # plt.show()
    # metrics.plot_keep_days()
    # plt.show()
    metrics.plot_max_draw_down()
예제 #12
0
파일: c9.py 프로젝트: 3774257/abu
def sample_91(show=True):
    """
    9.1 度量的基本使用方法
    :return:
    """
    # 设置初始资金数
    read_cash = 1000000
    # 择时股票池
    choice_symbols = ['usNOAH', 'usSFUN', 'usBIDU', 'usAAPL', 'usGOOG',
                      'usTSLA', 'usWUBA', 'usVIPS']
    # 使用run_loop_back运行策略
    abu_result_tuple, kl_pd_manager = abu.run_loop_back(read_cash,
                                                        buy_factors,
                                                        sell_factors,
                                                        stock_pickers,
                                                        choice_symbols=choice_symbols, n_folds=2)
    metrics = AbuMetricsBase(*abu_result_tuple)
    metrics.fit_metrics()
    if show:
        metrics.plot_returns_cmp()
    return metrics
예제 #13
0
파일: c9.py 프로젝트: 3774257/abu
def sample_94_3(from_cache=False, show=True):
    """
    9.4_3 使用切割好的测试数据集快,mac pro顶配大概下面跑了半个小时
    :return:
    """
    # 关闭沙盒数据环境
    abupy.env.disable_example_env_ipython()
    from abupy import EMarketDataFetchMode
    # 因为sample_94_1下载了预先数据,使用缓存,设置E_DATA_FETCH_FORCE_LOCAL
    abupy.env.g_data_fetch_mode = EMarketDataFetchMode.E_DATA_FETCH_FORCE_LOCAL

    abupy.env.g_enable_train_test_split = False
    # 使用切割好的测试数据
    abupy.env.g_enable_last_split_test = True
    # 回测生成买入时刻特征
    abupy.env.g_enable_ml_feature = True

    from abupy import EStoreAbu
    if from_cache:
        abu_result_tuple_test = \
            abu.load_abu_result_tuple(n_folds=5, store_type=EStoreAbu.E_STORE_CUSTOM_NAME,
                                      custom_name='test_us')
    else:
        read_cash = 5000000
        abupy.beta.atr.g_atr_pos_base = 0.007
        choice_symbols = None
        abu_result_tuple_test, kl_pd_manager_test = abu.run_loop_back(read_cash,
                                                                      buy_factors, sell_factors, stock_pickers,
                                                                      choice_symbols=choice_symbols, start='2012-08-08',
                                                                      end='2017-08-08')
        abu.store_abu_result_tuple(abu_result_tuple_test, n_folds=5, store_type=EStoreAbu.E_STORE_CUSTOM_NAME,
                                   custom_name='test_us')

    print('abu_result_tuple_test.action_pd.deal.value_counts():\n', abu_result_tuple_test.action_pd.deal.value_counts())

    metrics = AbuMetricsBase(*abu_result_tuple_test)
    metrics.fit_metrics()
    if show:
        metrics.plot_returns_cmp(only_show_returns=True)
    return metrics
예제 #14
0
def run_loo_back(choice_symbols,
                 ps=None,
                 n_folds=3,
                 start=None,
                 end=None,
                 only_info=False):
    abu_result_tuple, _ = abu.run_loop_back(cash,
                                            buy_factors,
                                            sell_factors,
                                            ps,
                                            start=start,
                                            end=end,
                                            n_folds=n_folds,
                                            choice_symbols=choice_symbols)

    abu_result_tuple.orders_pd['buy_factor'] = abu_result_tuple.orders_pd[
        'buy_factor'].apply(lambda bf: bf.split(':')[0])
    ABuProgress.clear_output()
    metrics = AbuMetricsBase.show_general(*abu_result_tuple,
                                          returns_cmp=only_info,
                                          only_info=only_info,
                                          only_show_returns=True)
    return abu_result_tuple, metrics
예제 #15
0
}, {
    'xd': 42,
    'class': AbuFactorBuyBreak
}]

# 卖出因子继续使用上一节使用的因子
sell_factors = [{
    'stop_loss_n': 1.0,
    'stop_win_n': 3.0,
    'class': AbuFactorAtrNStop
}, {
    'class': AbuFactorPreAtrNStop,
    'pre_atr_n': 1.5
}, {
    'class': AbuFactorCloseAtrNStop,
    'close_atr_n': 1.5
}]

abupy.beta.atr.g_atr_pos_base = 0.5
abu_result_tuple, kl_pd_manger = abu.run_loop_back(read_cash,
                                                   buy_factors,
                                                   sell_factors,
                                                   start='2018-06-01',
                                                   end='2019-06-25',
                                                   choice_symbols=['btc'])
ABuProgress.clear_output()
print(abu_result_tuple)
AbuMetricsBase.show_general(*abu_result_tuple, only_show_returns=True)
print('over')
# ABuMarketDrawing.plot_simple_two_stock({'btc': btc, 'eth': eth})
# print(btc.tail(7))
예제 #16
0
# 卖出因子

sell_factors = [{
    'stop_loss_n': 1.0,
    'stop_win_n': 3.0,
    'class': AbuFactorAtrNStop
}, {
    'class': AbuFactorPreAtrNStop,
    'pre_atr_n': 1.5
}, {
    'class': AbuFactorCloseAtrNStop,
    'close_atr_n': 1.5
}]

# 择时股票池
choice_symbols = [
    'hk03333', 'hk00700', 'hk02333', 'hk01359', 'hk00656', 'hk03888', 'hk02318'
]

# 设置市场类型为港股
abupy.env.g_market_target = EMarketTargetType.E_MARKET_TARGET_HK

abu_result_tuple, kl_pd_manger = \
    abu.run_loop_back(read_cash,
                      buy_factors,
                      sell_factors,
                      n_folds=6,choice_symbols=choice_symbols)

ABuProgress.clear_output()
AbuMetricsBase.show_general(*abu_result_tuple, only_show_returns=True)
예제 #17
0
파일: test.py 프로젝트: Leo70kg/Backtesting
                            # {'class': AbuFactorBuyPutBreakSellOption, 'freq': '60m', 'xd': 8, 'xd1': 12, 'cp': 1, 'direction': -1,
                            #  'maturity': 5, 'option_max_num': 10, 'option_clear_proportion': 0.618, 'dynamic': True,
                            #  'premium': 5000, 'threshold': 0.3, 'notional': None, 'slippage': AbuSlippageBuyPutTick,
                            #  'calendar_type': 1, 'rate': 0.03, 'dividend': 0.03, 'position': {'class': AbuEuroOptionHedgeBuyPosition},
                            #  'sell_factors': [{'class': AbuFactorSellOptionHedge,
                            #                    'position': AbuEuroOptionHedgeSellPosition, 'threshold': 0.3,
                            #                    'slippage': AbuSlippageSellPutTick},
                            #                   {'class': AbuFactorSellClearPut,
                            #                    'position': AbuEuroOptionHedgeSellPosition, 'slippage': AbuSlippageSellPutTick}
                            #                   ]}
                        ]

                        abu_result_tuple, kl_pd_manager = abu.run_loop_back(
                            read_cash=20000000,
                            buy_factors=buy_factors,
                            sell_factors=sell_factors,
                            choice_symbols=us_choice_symbols,
                            start='2015-01-08',
                            end='2017-11-30')

                        store_abu_result_out_put_and_plot(abu_result_tuple,
                                                          show_log=True)

            # import cProfile
            #
            # cProfile.run("""abu_result_tuple, kl_pd_manager = abu.run_loop_back(read_cash=30000000, buy_factors=buy_factors,
            #                                                     sell_factors=sell_factors,
            #                                                     choice_symbols=us_choice_symbols,
            #                                                     start='2017-01-08',
            #                                                     end='2018-11-30')""")
예제 #18
0
파일: lecture10.py 프로젝트: hey0311/abu
    # 买入因子依然延用向上突破因子
    buy_factors = [{
        'xd': 60,
        'class': AbuFactorBuyBreak
    }, {
        'xd': 42,
        'class': AbuFactorBuyBreak
    }]
    # 卖出因子继续使用上一节使用的因子
    sell_factors = [{
        'stop_loss_n': 1.0,
        'stop_win_n': 3.0,
        'class': AbuFactorAtrNStop
    }, {
        'class': AbuFactorPreAtrNStop,
        'pre_atr_n': 1.5
    }, {
        'class': AbuFactorCloseAtrNStop,
        'close_atr_n': 1.5
    }]
    # 注意这里把atr资金管理的仓位基数设置为0.5,即50%
    abupy.beta.atr.g_atr_pos_base = 0.5
    abu_result_tuple, kl_pd_manger = abu.run_loop_back(read_cash,
                                                       buy_factors,
                                                       sell_factors,
                                                       start='2013-09-01',
                                                       end='2017-07-26',
                                                       choice_symbols=None)
    ABuProgress.clear_output()
    AbuMetricsBase.show_general(*abu_result_tuple, only_show_returns=True)
예제 #19
0
def sample_1051_1(from_cache=False, show=True):
    """
    10.5.1 回测中生成特征,切分训练测试集,成交买单快照: 数据准备
    :return:
    """
    from abupy import AbuMetricsBase
    from abupy import AbuFactorBuyBreak
    from abupy import AbuFactorAtrNStop
    from abupy import AbuFactorPreAtrNStop
    from abupy import AbuFactorCloseAtrNStop

    # 关闭沙盒数据环境
    abupy.env.disable_example_env_ipython()
    from abupy import EMarketDataFetchMode
    # 因为sample_94_1下载了预先数据,使用缓存,设置E_DATA_FETCH_FORCE_LOCAL,实际上run_kl_update最后会把设置set到FORCE_LOCAL
    abupy.env.g_data_fetch_mode = EMarketDataFetchMode.E_DATA_FETCH_FORCE_LOCAL

    # 设置选股因子,None为不使用选股因子
    stock_pickers = None
    # 买入因子依然延用向上突破因子
    buy_factors = [{
        'xd': 60,
        'class': AbuFactorBuyBreak
    }, {
        'xd': 42,
        'class': AbuFactorBuyBreak
    }]

    # 卖出因子继续使用上一章使用的因子
    sell_factors = [{
        'stop_loss_n': 1.0,
        'stop_win_n': 3.0,
        'class': AbuFactorAtrNStop
    }, {
        'class': AbuFactorPreAtrNStop,
        'pre_atr_n': 1.5
    }, {
        'class': AbuFactorCloseAtrNStop,
        'close_atr_n': 1.5
    }]

    # 回测生成买入时刻特征
    abupy.env.g_enable_ml_feature = True
    # 回测将symbols切割分为训练集数据和测试集数据
    abupy.env.g_enable_train_test_split = True
    # 下面设置回测时切割训练集,测试集使用的切割比例参数,默认为10,即切割为10份,9份做为训练,1份做为测试,
    # 由于美股股票数量多,所以切割分为4份,3份做为训练集,1份做为测试集
    abupy.env.g_split_tt_n_folds = 4

    from abupy import EStoreAbu
    if from_cache:
        abu_result_tuple = \
            abu.load_abu_result_tuple(n_folds=5, store_type=EStoreAbu.E_STORE_CUSTOM_NAME,
                                      custom_name='train_us')
    else:
        # 初始化资金500万,资金管理依然使用默认atr
        read_cash = 5000000
        # 每笔交易的买入基数资金设置为万分之15
        abupy.beta.atr.g_atr_pos_base = 0.0015
        # 使用run_loop_back运行策略,因子使用和之前一样,
        # choice_symbols=None为全市场回测,5年历史数据回测
        abu_result_tuple, _ = abu.run_loop_back(read_cash,
                                                buy_factors,
                                                sell_factors,
                                                stock_pickers,
                                                choice_symbols=None,
                                                start='2012-08-08',
                                                end='2017-08-08')
        # 把运行的结果保存在本地,以便之后分析回测使用,保存回测结果数据代码如下所示
        abu.store_abu_result_tuple(abu_result_tuple,
                                   n_folds=5,
                                   store_type=EStoreAbu.E_STORE_CUSTOM_NAME,
                                   custom_name='train_us')

    if show:
        metrics = AbuMetricsBase(*abu_result_tuple)
        metrics.fit_metrics()
        metrics.plot_returns_cmp(only_show_returns=True)

    "*****************************************************************"
    abupy.env.g_enable_train_test_split = False
    # 使用切割好的测试数据
    abupy.env.g_enable_last_split_test = True

    from abupy import EStoreAbu
    if from_cache:
        abu_result_tuple_test = \
            abu.load_abu_result_tuple(n_folds=5, store_type=EStoreAbu.E_STORE_CUSTOM_NAME,
                                      custom_name='test_us')
    else:
        read_cash = 5000000
        abupy.beta.atr.g_atr_pos_base = 0.007
        choice_symbols = None
        abu_result_tuple_test, kl_pd_manager_test = abu.run_loop_back(
            read_cash,
            buy_factors,
            sell_factors,
            stock_pickers,
            choice_symbols=choice_symbols,
            start='2012-08-08',
            end='2017-08-08')
        abu.store_abu_result_tuple(abu_result_tuple_test,
                                   n_folds=5,
                                   store_type=EStoreAbu.E_STORE_CUSTOM_NAME,
                                   custom_name='test_us')

    if show:
        metrics = AbuMetricsBase(*abu_result_tuple_test)
        metrics.fit_metrics()
        metrics.plot_returns_cmp(only_show_returns=True)
        print(abu_result_tuple.orders_pd[
            abu_result_tuple.orders_pd.result != 0].head())

    return abu_result_tuple, abu_result_tuple_test
예제 #20
0
def main():

    ## 读股票
    symbols = read_symbols()
    print("一共有多少个股票? %d" % len(symbols))

    # 设置初始资金数
    read_cash = 1000000
    # 设置选股因子,None为不使用选股因子
    stock_pickers = None
    # 买入因子依然延用向上突破因子
    buy_factors = [{
        'xd': 60,
        'class': AbuFactorBuyBreak
    }, {
        'xd': 42,
        'class': AbuFactorBuyBreak
    }]
    buy_factors = [{
        'xd': 42,
        'class': AbuFactorBuyBreak,
        'position': {
            'class': AbuABinPosition
        }
    }]

    # 卖出因子继续使用上一节使用的因子
    sell_factors = [{
        'stop_loss_n': 1.0,
        'stop_win_n': 3.0,
        'class': AbuFactorAtrNStop
    }, {
        'class': AbuFactorPreAtrNStop,
        'pre_atr_n': 1.5
    }, {
        'class': AbuFactorCloseAtrNStop,
        'close_atr_n': 1.5
    }]

    sell_factors = [{
        'stop_loss_n': 1.0,
        'stop_win_n': 20.0,
        'class': AbuFactorAtrNStop
    }]
    #sell_factors = [ ]

    # 择时股票池
    # 使用run_loop_back运行策略

    # 买入因子依然延用向上突破因子
    buy_factors = [{
        'xd': 60,
        'class': AbuSDBreak
    }, {
        'xd': 42,
        'class': AbuSDBreak
    }]
    buy_factors = [{
        'xd': 60,
        'class': AbuFactorBuyBreak
    }, {
        'xd': 42,
        'class': AbuFactorBuyBreak
    }]
    # 卖出因子继续使用上一节使用的因子
    sell_factors = [{
        'stop_loss_n': 1.0,
        'stop_win_n': 3.0,
        'class': AbuFactorAtrNStop
    }, {
        'class': AbuFactorPreAtrNStop,
        'pre_atr_n': 1.5
    }, {
        'class': AbuFactorCloseAtrNStop,
        'close_atr_n': 1.5
    }]

    choice_symbols = [
        'hk03333', 'hk00700', 'hk02333', 'hk01359', 'hk00656', 'hk03888',
        'hk02318'
    ]
    choice_symbols = [
        'usNOAH', 'usSFUN', 'usBIDU', 'usAAPL', 'usGOOG', 'usTSLA', 'usWUBA',
        'usVIPS'
    ]
    abupy.env.g_market_target = abupy.EMarketTargetType.E_MARKET_TARGET_HK
    abupy.env.g_market_target = abupy.EMarketTargetType.E_MARKET_TARGET_US
    abu_result_tuple, kl_pd_manger = abu.run_loop_back(
        read_cash,
        buy_factors,
        sell_factors,
        stock_pickers,
        choice_symbols=choice_symbols,
        n_folds=6)
    ABuProgress.clear_output()

    metrics = AbuMetricsBase(*abu_result_tuple)
    metrics.fit_metrics()
    metrics.plot_returns_cmp()

    pd.set_option('display.expand_frame_repr', False)
    pd.options.display.max_rows = 999
예제 #21
0
#卖出因子
sell_factors = [{
    'stop_loss_n': 1.0,
    'stop_win_n': 3.0,
    'class': AbuFactorAtrNStop
}, {
    'class': AbuFactorPreAtrNStop,
    'pre_atr_n': 1.5
}, {
    'class': AbuFactorCloseAtrNStop,
    'close_atr_n': 1.5
}]

#择时股票池
choice_symbols = [
    'usNOAH', 'usSFUN', 'usBIDU', 'usAAPL', 'usGOOG', 'usTSLA', 'usWUBA',
    'usVIPS'
]
abu_result_tuple, kl_pd_manger = abu.run_loop_back(read_cash,
                                                   buy_factors,
                                                   sell_factors,
                                                   stock_pickers,
                                                   choice_symbols,
                                                   n_folds=2)

metrics = AbuMetricsBase(*abu_result_tuple)
metrics.fit_metrics()
# metrics.plot_returns_cmp()
metrics.plot_sharp_volatility_cmp()
metrics.plot_max_draw_down()
예제 #22
0
파일: c10.py 프로젝트: 3774257/abu
def sample_1051_1(from_cache=False, show=True):
    """
    10.5.1 回测中生成特征,切分训练测试集,成交买单快照: 数据准备
    :return:
    """
    from abupy import AbuMetricsBase
    from abupy import AbuFactorBuyBreak
    from abupy import AbuFactorAtrNStop
    from abupy import AbuFactorPreAtrNStop
    from abupy import AbuFactorCloseAtrNStop

    # 关闭沙盒数据环境
    abupy.env.disable_example_env_ipython()
    from abupy import EMarketDataFetchMode
    # 因为sample_94_1下载了预先数据,使用缓存,设置E_DATA_FETCH_FORCE_LOCAL,实际上run_kl_update最后会把设置set到FORCE_LOCAL
    abupy.env.g_data_fetch_mode = EMarketDataFetchMode.E_DATA_FETCH_FORCE_LOCAL

    # 设置选股因子,None为不使用选股因子
    stock_pickers = None
    # 买入因子依然延用向上突破因子
    buy_factors = [{'xd': 60, 'class': AbuFactorBuyBreak},
                   {'xd': 42, 'class': AbuFactorBuyBreak}]

    # 卖出因子继续使用上一章使用的因子
    sell_factors = [
        {'stop_loss_n': 1.0, 'stop_win_n': 3.0,
         'class': AbuFactorAtrNStop},
        {'class': AbuFactorPreAtrNStop, 'pre_atr_n': 1.5},
        {'class': AbuFactorCloseAtrNStop, 'close_atr_n': 1.5}
    ]

    # 回测生成买入时刻特征
    abupy.env.g_enable_ml_feature = True
    # 回测将symbols切割分为训练集数据和测试集数据
    abupy.env.g_enable_train_test_split = True
    # 下面设置回测时切割训练集,测试集使用的切割比例参数,默认为10,即切割为10份,9份做为训练,1份做为测试,
    # 由于美股股票数量多,所以切割分为4份,3份做为训练集,1份做为测试集
    abupy.env.g_split_tt_n_folds = 4

    from abupy import EStoreAbu
    if from_cache:
        abu_result_tuple = \
            abu.load_abu_result_tuple(n_folds=5, store_type=EStoreAbu.E_STORE_CUSTOM_NAME,
                                      custom_name='train_us')
    else:
        # 初始化资金500万,资金管理依然使用默认atr
        read_cash = 5000000
        # 每笔交易的买入基数资金设置为万分之15
        abupy.beta.atr.g_atr_pos_base = 0.0015
        # 使用run_loop_back运行策略,因子使用和之前一样,
        # choice_symbols=None为全市场回测,5年历史数据回测
        abu_result_tuple, _ = abu.run_loop_back(read_cash,
                                                buy_factors, sell_factors,
                                                stock_pickers,
                                                choice_symbols=None,
                                                start='2012-08-08', end='2017-08-08')
        # 把运行的结果保存在本地,以便之后分析回测使用,保存回测结果数据代码如下所示
        abu.store_abu_result_tuple(abu_result_tuple, n_folds=5, store_type=EStoreAbu.E_STORE_CUSTOM_NAME,
                                   custom_name='train_us')

    if show:
        metrics = AbuMetricsBase(*abu_result_tuple)
        metrics.fit_metrics()
        metrics.plot_returns_cmp(only_show_returns=True)

    "*****************************************************************"
    abupy.env.g_enable_train_test_split = False
    # 使用切割好的测试数据
    abupy.env.g_enable_last_split_test = True

    from abupy import EStoreAbu
    if from_cache:
        abu_result_tuple_test = \
            abu.load_abu_result_tuple(n_folds=5, store_type=EStoreAbu.E_STORE_CUSTOM_NAME,
                                      custom_name='test_us')
    else:
        read_cash = 5000000
        abupy.beta.atr.g_atr_pos_base = 0.007
        choice_symbols = None
        abu_result_tuple_test, kl_pd_manager_test = abu.run_loop_back(read_cash,
                                                                      buy_factors, sell_factors, stock_pickers,
                                                                      choice_symbols=choice_symbols, start='2012-08-08',
                                                                      end='2017-08-08')
        abu.store_abu_result_tuple(abu_result_tuple_test, n_folds=5, store_type=EStoreAbu.E_STORE_CUSTOM_NAME,
                                   custom_name='test_us')

    if show:
        metrics = AbuMetricsBase(*abu_result_tuple_test)
        metrics.fit_metrics()
        metrics.plot_returns_cmp(only_show_returns=True)
        print(abu_result_tuple.orders_pd[abu_result_tuple.orders_pd.result != 0].head())

    return abu_result_tuple, abu_result_tuple_test