예제 #1
0
파일: c11.py 프로젝트: 3774257/abu
def load_abu_result_tuple():
    abupy.env.g_market_target = EMarketTargetType.E_MARKET_TARGET_CN
    abupy.env.g_data_fetch_mode = EMarketDataFetchMode.E_DATA_FETCH_FORCE_LOCAL
    abu_result_tuple_train = abu.load_abu_result_tuple(n_folds=5, store_type=EStoreAbu.E_STORE_CUSTOM_NAME,
                                                       custom_name='train_cn')
    abu_result_tuple_test = abu.load_abu_result_tuple(n_folds=5, store_type=EStoreAbu.E_STORE_CUSTOM_NAME,
                                                      custom_name='test_cn')
    metrics_train = AbuMetricsBase(*abu_result_tuple_train)
    metrics_train.fit_metrics()
    metrics_test = AbuMetricsBase(*abu_result_tuple_test)
    metrics_test.fit_metrics()

    return abu_result_tuple_train, abu_result_tuple_test, metrics_train, metrics_test
예제 #2
0
def sample_c2():
    """
    C.2 量化技术指标应用: 对量化策略失败结果的人工分析
    :return:
    """
    abupy.env.disable_example_env_ipython()

    # 从之前章节的缓存中读取交易数据
    abu_result_tuple_train = abu.load_abu_result_tuple(
        n_folds=5,
        store_type=EStoreAbu.E_STORE_CUSTOM_NAME,
        custom_name='train_cn')
    # 只筛选orders中有交易结果的单子
    has_result = abu_result_tuple_train.orders_pd[
        abu_result_tuple_train.orders_pd.result == -1]

    # 随便拿一个交易数据作为示例
    sample_order = has_result.ix[100]
    _ = ABuMarketDrawing.plot_candle_from_order(sample_order)

    nd.macd.plot_macd_from_order(sample_order, date_ext=252)
    nd.boll.plot_boll_from_order(has_result.ix[100], date_ext=252)
    nd.ma.plot_ma_from_order(has_result.ix[100],
                             date_ext=252,
                             time_period=[10, 20, 30, 60, 90, 120])
예제 #3
0
def load_abu_result_tuple():
    abu_result_tuple_train = abu.load_abu_result_tuple(
        n_folds=6,
        store_type=abupy.EStoreAbu.E_STORE_CUSTOM_NAME,
        # custom_name='tt_train_cn')
        custom_name='18_6_top_train_cn')
    abu_result_tuple_test = abu.load_abu_result_tuple(
        n_folds=6,
        store_type=abupy.EStoreAbu.E_STORE_CUSTOM_NAME,
        # custom_name='tt_test_cn')
        custom_name='18_6_top_test_cn')
    metrics_train = AbuMetricsBase(*abu_result_tuple_train)
    metrics_train.fit_metrics()
    metrics_test = AbuMetricsBase(*abu_result_tuple_test)
    metrics_test.fit_metrics()

    return abu_result_tuple_train, abu_result_tuple_test, metrics_train, metrics_test
예제 #4
0
def load_abu_result_tuple():
    abupy.env.g_market_target = EMarketTargetType.E_MARKET_TARGET_CN
    abupy.env.g_data_fetch_mode = EMarketDataFetchMode.E_DATA_FETCH_FORCE_LOCAL
    abu_result_tuple_train = abu.load_abu_result_tuple(
        n_folds=5,
        store_type=EStoreAbu.E_STORE_CUSTOM_NAME,
        custom_name='train_cn')
    abu_result_tuple_test = abu.load_abu_result_tuple(
        n_folds=5,
        store_type=EStoreAbu.E_STORE_CUSTOM_NAME,
        custom_name='test_cn')
    metrics_train = AbuMetricsBase(*abu_result_tuple_train)
    metrics_train.fit_metrics()
    metrics_test = AbuMetricsBase(*abu_result_tuple_test)
    metrics_test.fit_metrics()

    return abu_result_tuple_train, abu_result_tuple_test, metrics_train, metrics_test
예제 #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 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()
예제 #7
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
예제 #8
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)
예제 #9
0
파일: extC.py 프로젝트: 3774257/abu
def sample_c2():
    """
    C.2 量化技术指标应用: 对量化策略失败结果的人工分析
    :return:
    """
    abupy.env.disable_example_env_ipython()

    # 从之前章节的缓存中读取交易数据
    abu_result_tuple_train = abu.load_abu_result_tuple(n_folds=5, store_type=EStoreAbu.E_STORE_CUSTOM_NAME,
                                                       custom_name='train_cn')
    # 只筛选orders中有交易结果的单子
    has_result = abu_result_tuple_train.orders_pd[
        abu_result_tuple_train.orders_pd.result == -1]

    # 随便拿一个交易数据作为示例
    sample_order = has_result.ix[100]
    _ = ABuMarketDrawing.plot_candle_from_order(sample_order)

    nd.macd.plot_macd_from_order(sample_order, date_ext=252)
    nd.boll.plot_boll_from_order(has_result.ix[100], date_ext=252)
    nd.ma.plot_ma_from_order(has_result.ix[100], date_ext=252, time_period=[10, 20, 30, 60, 90, 120])
예제 #10
0
def sample_ump_train():
    abu_result_tuple = \
        abu.load_abu_result_tuple(n_folds=4, store_type=abupy.EStoreAbu.E_STORE_CUSTOM_NAME,
                                  custom_name='tt_train_cn')
    # 需要在有缓存的情况下运行
    abupy.env.g_enable_train_test_split = False
    # 使用切割好的测试数据
    abupy.env.g_enable_last_split_test = True

    from abupy.UmpBu.ABuUmpMainMul import UmpMulFiter
    mul = UmpMulFiter(orders_pd=abu_result_tuple.orders_pd, scaler=False)
    print('mul.df.head():\n', mul.df.head())

    # 默认使用svm作为分类器
    print('decision_tree_classifier cv please wait...')
    mul.estimator.decision_tree_classifier()
    mul.cross_val_accuracy_score()

    # 默认使用svm作为分类器
    print('knn_classifier cv please wait...')
    # 默认使用svm作为分类器, 改分类器knn
    mul.estimator.knn_classifier()
    mul.cross_val_accuracy_score()

    from abupy.UmpBu.ABuUmpMainDeg import UmpDegFiter
    deg = UmpDegFiter(orders_pd=abu_result_tuple.orders_pd)
    print('deg.df.head():\n', deg.df.head())

    print('xgb_classifier cv please wait...')
    # 分类器使用GradientBoosting
    deg.estimator.xgb_classifier()
    deg.cross_val_accuracy_score()

    print('adaboost_classifier cv please wait...')
    # 分类器使用adaboost
    deg.estimator.adaboost_classifier(base_estimator=None)
    deg.cross_val_accuracy_score()

    print('train_test_split_xy please wait...')
    deg.train_test_split_xy()
예제 #11
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
예제 #12
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()
예제 #13
0
def run_load_train():
    global abu_result_tuple
    abu_result_tuple = abu.load_abu_result_tuple(
        n_folds=5,
        store_type=EStoreAbu.E_STORE_CUSTOM_NAME,
        custom_name='train_cn')
예제 #14
0
from abupy import AbuFactorAtrNStop, AbuFactorPreAtrNStop, AbuFactorCloseAtrNStop, AbuFactorBuyBreak
from abupy import abu, EMarketTargetType, AbuMetricsBase, ABuMarketDrawing, ABuProgress, ABuSymbolPd
from abupy import EMarketTargetType, EDataCacheType, EMarketSourceType, EMarketDataFetchMode, EStoreAbu, AbuUmpMainMul
from abupy import AbuUmpMainDeg, AbuUmpMainJump, AbuUmpMainPrice, AbuUmpMainWave, feature, AbuFeatureDegExtend
from abupy import AbuUmpEdgeDeg, AbuUmpEdgePrice, AbuUmpEdgeWave, AbuUmpEdgeFull, AbuUmpEdgeMul, AbuUmpEegeDegExtend
from abupy import AbuUmpMainDegExtend, ump, Parallel, delayed, AbuMulPidProgress, AbuProgress

if __name__ == '__main__':
    abu_result_tuple_train = abu.load_abu_result_tuple(
        n_folds=5,
        store_type=EStoreAbu.E_STORE_CUSTOM_NAME,
        custom_name='train_cn')
    abu_result_tuple_test = abu.load_abu_result_tuple(
        n_folds=5,
        store_type=EStoreAbu.E_STORE_CUSTOM_NAME,
        custom_name='test_cn')
    ABuProgress.clear_output()
    print('训练集结果:')
    metrics_train = AbuMetricsBase.show_general(*abu_result_tuple_train,
                                                only_show_returns=True)
    print('测试集结果:')
    metrics_test = AbuMetricsBase.show_general(*abu_result_tuple_test,
                                               only_show_returns=True)
예제 #15
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
예제 #16
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