コード例 #1
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()
コード例 #2
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)
コード例 #3
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()
コード例 #4
0
def sample_94_4(from_cache=False):
    """
    满仓乘数
    9.4_4 《量化交易之路》中通过把初始资金扩大到非常大,但是每笔交易的买入基数却不增高,来使交易全部都成交,
    再使用满仓乘数的示例,由于需要再次进行全市场回测,比较耗时。

    下面直接示例通过AbuMetricsBase中的transform_to_full_rate_factor接口将之前的回测结果转换为使用大初始资金回测的结果
    :return:
    """
    metrics_test = sample_94_3(from_cache=True, show=False)

    from abupy import EStoreAbu
    if from_cache:
        test_us_fr = abu.load_abu_result_tuple(
            n_folds=5,
            store_type=EStoreAbu.E_STORE_CUSTOM_NAME,
            custom_name='test_us_full_rate')
        # 本地读取后使用AbuMetricsBase构造度量对象,参数enable_stocks_full_rate_factor=True, 即使用满仓乘数
        test_frm = AbuMetricsBase(test_us_fr.orders_pd,
                                  test_us_fr.action_pd,
                                  test_us_fr.capital,
                                  test_us_fr.benchmark,
                                  enable_stocks_full_rate_factor=True)
        test_frm.fit_metrics()
    else:
        test_frm = metrics_test.transform_to_full_rate_factor(n_process_kl=4,
                                                              show=False)
        # 转换后保存起来,下次直接读取,不用再转换了
        from abupy import AbuResultTuple
        test_us_fr = AbuResultTuple(test_frm.orders_pd, test_frm.action_pd,
                                    test_frm.capital, test_frm.benchmark)
        abu.store_abu_result_tuple(test_us_fr,
                                   n_folds=5,
                                   store_type=EStoreAbu.E_STORE_CUSTOM_NAME,
                                   custom_name='test_us_full_rate')
    """
        使用test_frm进行度量结果可以看到所有交易都顺利成交了,策略买入成交比例:100.0000%,但资金利用率显然过低,
        它导致基准收益曲线和策略收益曲线不在一个量级上,无法有效的进行对比
    """
    AbuMetricsBase.show_general(test_frm.orders_pd,
                                test_frm.action_pd,
                                test_frm.capital,
                                test_frm.benchmark,
                                only_show_returns=True)
    """转换出来的test_frm即是一个使用满仓乘数的度量对象,下面使用test_frm直接进行满仓度量即可"""
    print(type(test_frm))
    test_frm.plot_returns_cmp(only_show_returns=True)

    # 如果不需要与基准进行对比,最简单的方式是使用plot_order_returns_cmp
    metrics_test.plot_order_returns_cmp()
コード例 #5
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
コード例 #6
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)
コード例 #7
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
コード例 #8
0
ファイル: c9.py プロジェクト: 3774257/abu
def sample_94_4(from_cache=False):
    """
    满仓乘数
    9.4_4 《量化交易之路》中通过把初始资金扩大到非常大,但是每笔交易的买入基数却不增高,来使交易全部都成交,
    再使用满仓乘数的示例,由于需要再次进行全市场回测,比较耗时。

    下面直接示例通过AbuMetricsBase中的transform_to_full_rate_factor接口将之前的回测结果转换为使用大初始资金回测的结果
    :return:
    """
    metrics_test = sample_94_3(from_cache=True, show=False)

    from abupy import EStoreAbu
    if from_cache:
        test_us_fr = abu.load_abu_result_tuple(n_folds=5, store_type=EStoreAbu.E_STORE_CUSTOM_NAME,
                                               custom_name='test_us_full_rate')
        # 本地读取后使用AbuMetricsBase构造度量对象,参数enable_stocks_full_rate_factor=True, 即使用满仓乘数
        test_frm = AbuMetricsBase(test_us_fr.orders_pd, test_us_fr.action_pd, test_us_fr.capital, test_us_fr.benchmark,
                                  enable_stocks_full_rate_factor=True)
        test_frm.fit_metrics()
    else:
        test_frm = metrics_test.transform_to_full_rate_factor(n_process_kl=4, show=False)
        # 转换后保存起来,下次直接读取,不用再转换了
        from abupy import AbuResultTuple
        test_us_fr = AbuResultTuple(test_frm.orders_pd, test_frm.action_pd, test_frm.capital, test_frm.benchmark)
        abu.store_abu_result_tuple(test_us_fr, n_folds=5, store_type=EStoreAbu.E_STORE_CUSTOM_NAME,
                                   custom_name='test_us_full_rate')

    """
        使用test_frm进行度量结果可以看到所有交易都顺利成交了,策略买入成交比例:100.0000%,但资金利用率显然过低,
        它导致基准收益曲线和策略收益曲线不在一个量级上,无法有效的进行对比
    """
    AbuMetricsBase.show_general(test_frm.orders_pd,
                                test_frm.action_pd, test_frm.capital, test_frm.benchmark, only_show_returns=True)
    """转换出来的test_frm即是一个使用满仓乘数的度量对象,下面使用test_frm直接进行满仓度量即可"""
    print(type(test_frm))
    test_frm.plot_returns_cmp(only_show_returns=True)

    # 如果不需要与基准进行对比,最简单的方式是使用plot_order_returns_cmp
    metrics_test.plot_order_returns_cmp()
コード例 #9
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
コード例 #10
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