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()
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
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
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()
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)
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
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()
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()
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
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()
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
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
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
}, { '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))
# 卖出因子 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)
# {'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')""")
# 买入因子依然延用向上突破因子 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)
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
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
#卖出因子 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()
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