Ejemplo n.º 1
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
Ejemplo n.º 2
0
def sample_814(show=True):
    """
    8.1.4 对多支股票进行择时
    :return:
    """

    sell_factor1 = {'xd': 120, 'class': AbuFactorSellBreak}
    sell_factor2 = {'stop_loss_n': 0.5, 'stop_win_n': 3.0, 'class': AbuFactorAtrNStop}
    sell_factor3 = {'class': AbuFactorPreAtrNStop, 'pre_atr_n': 1.0}
    sell_factor4 = {'class': AbuFactorCloseAtrNStop, 'close_atr_n': 1.5}
    sell_factors = [sell_factor1, sell_factor2, sell_factor3, sell_factor4]
    benchmark = AbuBenchmark()
    buy_factors = [{'xd': 60, 'class': AbuFactorBuyBreak},
                   {'xd': 42, 'class': AbuFactorBuyBreak}]

    choice_symbols = ['usTSLA', 'usNOAH', 'usSFUN', 'usBIDU', 'usAAPL', 'usGOOG', 'usWUBA', 'usVIPS']
    capital = AbuCapital(1000000, benchmark)
    orders_pd, action_pd, all_fit_symbols_cnt = ABuPickTimeExecute.do_symbols_with_same_factors(choice_symbols,
                                                                                                benchmark, buy_factors,
                                                                                                sell_factors, capital,
                                                                                                show=False)

    metrics = AbuMetricsBase(orders_pd, action_pd, capital, benchmark)
    metrics.fit_metrics()
    if show:
        print('orders_pd[:10]:\n', orders_pd[:10].filter(
            ['symbol', 'buy_price', 'buy_cnt', 'buy_factor', 'buy_pos', 'sell_date', 'sell_type_extra', 'sell_type',
             'profit']))
        print('action_pd[:10]:\n', action_pd[:10])
        metrics.plot_returns_cmp(only_show_returns=True)
    return metrics
Ejemplo n.º 3
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()
Ejemplo n.º 4
0
Archivo: extA.py Proyecto: 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()
Ejemplo n.º 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)
Ejemplo n.º 6
0
Archivo: c11.py Proyecto: 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
Ejemplo n.º 7
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()
Ejemplo n.º 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()
Ejemplo n.º 9
0
Archivo: c8.py Proyecto: fuimaz/abu
def sample_817():
    """
    8.1.7 使用并行来提升择时运行效率
    :return:
    """
    # 要关闭沙盒数据环境,因为沙盒里就那几个股票的历史数据, 下面要随机做50个股票
    from abupy import EMarketSourceType
    abupy.env.g_market_source = EMarketSourceType.E_MARKET_SOURCE_tx

    abupy.env.disable_example_env_ipython()

    # 关闭沙盒后,首先基准要从非沙盒环境换取,否则数据对不齐,无法正常运行
    benchmark = AbuBenchmark()
    # 当传入choice_symbols为None时代表对整个市场的所有股票进行回测
    # noinspection PyUnusedLocal
    choice_symbols = None
    # 顺序获取市场后300支股票
    # noinspection PyUnusedLocal
    choice_symbols = ABuMarket.all_symbol()[-50:]
    # 随机获取300支股票
    choice_symbols = ABuMarket.choice_symbols(50)
    capital = AbuCapital(1000000, benchmark)

    sell_factor1 = {'xd': 120, 'class': AbuFactorSellBreak}
    sell_factor2 = {
        'stop_loss_n': 0.5,
        'stop_win_n': 3.0,
        'class': AbuFactorAtrNStop
    }
    sell_factor3 = {'class': AbuFactorPreAtrNStop, 'pre_atr_n': 1.0}
    sell_factor4 = {'class': AbuFactorCloseAtrNStop, 'close_atr_n': 1.5}
    sell_factors = [sell_factor1, sell_factor2, sell_factor3, sell_factor4]
    buy_factors = [{
        'xd': 60,
        'class': AbuFactorBuyBreak
    }, {
        'xd': 42,
        'class': AbuFactorBuyBreak
    }]

    orders_pd, action_pd, _ = AbuPickTimeMaster.do_symbols_with_same_factors_process(
        choice_symbols, benchmark, buy_factors, sell_factors, capital)

    metrics = AbuMetricsBase(orders_pd, action_pd, capital, benchmark)
    metrics.fit_metrics()
    metrics.plot_returns_cmp(only_show_returns=True)

    abupy.env.enable_example_env_ipython()
Ejemplo n.º 10
0
Archivo: c9.py Proyecto: 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)
Ejemplo n.º 11
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
Ejemplo n.º 12
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
Ejemplo n.º 13
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
Ejemplo n.º 14
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()
Ejemplo n.º 15
0
Archivo: c9.py Proyecto: 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
Ejemplo n.º 16
0
Archivo: c8.py Proyecto: 3774257/abu
def sample_817():
    """
    8.1.7 使用并行来提升择时运行效率
    :return:
    """
    # 要关闭沙盒数据环境,因为沙盒里就那几个股票的历史数据, 下面要随机做50个股票
    from abupy import EMarketSourceType
    abupy.env.g_market_source = EMarketSourceType.E_MARKET_SOURCE_tx

    abupy.env.disable_example_env_ipython()

    # 关闭沙盒后,首先基准要从非沙盒环境换取,否则数据对不齐,无法正常运行
    benchmark = AbuBenchmark()
    # 当传入choice_symbols为None时代表对整个市场的所有股票进行回测
    # noinspection PyUnusedLocal
    choice_symbols = None
    # 顺序获取市场后300支股票
    # noinspection PyUnusedLocal
    choice_symbols = ABuMarket.all_symbol()[-50:]
    # 随机获取300支股票
    choice_symbols = ABuMarket.choice_symbols(50)
    capital = AbuCapital(1000000, benchmark)

    sell_factor1 = {'xd': 120, 'class': AbuFactorSellBreak}
    sell_factor2 = {'stop_loss_n': 0.5, 'stop_win_n': 3.0, 'class': AbuFactorAtrNStop}
    sell_factor3 = {'class': AbuFactorPreAtrNStop, 'pre_atr_n': 1.0}
    sell_factor4 = {'class': AbuFactorCloseAtrNStop, 'close_atr_n': 1.5}
    sell_factors = [sell_factor1, sell_factor2, sell_factor3, sell_factor4]
    buy_factors = [{'xd': 60, 'class': AbuFactorBuyBreak},
                   {'xd': 42, 'class': AbuFactorBuyBreak}]

    orders_pd, action_pd, _ = AbuPickTimeMaster.do_symbols_with_same_factors_process(
        choice_symbols, benchmark, buy_factors, sell_factors,
        capital)

    metrics = AbuMetricsBase(orders_pd, action_pd, capital, benchmark)
    metrics.fit_metrics()
    metrics.plot_returns_cmp(only_show_returns=True)

    abupy.env.enable_example_env_ipython()
Ejemplo n.º 17
0
Archivo: c9.py Proyecto: 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
Ejemplo n.º 18
0
Archivo: c9.py Proyecto: 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()
Ejemplo n.º 19
0
 from abupy import ABuPickTimeExecute
 orders_pd, action_pd, _ = ABuPickTimeExecute.do_symbols_with_same_factors(
     [
         'usTSLA', 'usNOAH', 'usSFUN', 'usBIDU', 'usAAPL', 'usGOOG',
         'usWUBA', 'usVIPS'
     ],
     benchmark,
     buy_factors,
     sell_factors,
     capital,
     show=False)
 print(orders_pd[:10])
 # 3) metric the profit
 from abupy import AbuMetricsBase
 metrics = AbuMetricsBase(orders_pd, action_pd, capital, benchmark)
 metrics.fit_metrics()
 metrics.plot_returns_cmp(only_show_returns=True)
 # 4) evaluate win_rate(为了计算胜率)
 win_rate = metrics.win_rate
 gains_mean = metrics.gains_mean
 losses_mean = -metrics.losses_mean
 # 5) add position control
 # n天向上突破买入策略(加入买入价格策略,加入仓位控制策略)
 buy_factors = [{
     'xd': 60,
     'class': AbuFactorBuyBreak,
     'slippage': AbuSlippageBuyMean,
     'win_rate': win_rate,
     'gains_mean': gains_mean,
     'losses_mean': losses_mean,
     'position': AbuKellyPosition
Ejemplo n.º 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