def sample_933(): """ 9.3.3 GridSearch寻找最优参数 :return: """ from abupy import GridSearch read_cash = 1000000 choice_symbols = ['usNOAH', 'usSFUN', 'usBIDU', 'usAAPL', 'usGOOG', 'usTSLA', 'usWUBA', 'usVIPS'] sell_factors_product, buy_factors_product = sample_932(show=False) grid_search = GridSearch(read_cash, choice_symbols, buy_factors_product=buy_factors_product, sell_factors_product=sell_factors_product) from abupy import ABuFileUtil """ 注意下面的运行耗时大约1小时多,如果所有cpu都用上的话,也可以设置n_jobs为 < cpu进程数,一边做其它的一边跑 """ # 运行GridSearch n_jobs=-1启动cpu个数的进程数 scores, score_tuple_array = grid_search.fit(n_jobs=-1) """ 针对运行完成输出的score_tuple_array可以使用dump_pickle保存在本地,以方便修改其它验证效果。 """ ABuFileUtil.dump_pickle(score_tuple_array, '../gen/score_tuple_array') print('组合因子参数数量{}'.format(len(buy_factors_product) * len(sell_factors_product))) print('最终评分结果数量{}'.format(len(scores))) best_score_tuple_grid = grid_search.best_score_tuple_grid AbuMetricsBase.show_general(best_score_tuple_grid.orders_pd, best_score_tuple_grid.action_pd, best_score_tuple_grid.capital, best_score_tuple_grid.benchmark)
# sell_n_range = np.arange(1,2,1) # #设定买入后只持有天数,默认1 is_sell_today = True #设定买入n天后,当天还是隔天卖出。默认False。 # sell_atr_nstop_factor_grid = {'class':[AbuFactorSellNDay],'sell_n':sell_n_range} sell_atr_nstop_factor_grid = {'class':[AbuFactorSellJiJinWave]} # sell_atr_nstop_factor_grid = {'class':[AbuFactorSellMinMax]} sell_factors_product = ABuGridHelper.gen_factor_grid(ABuGridHelper.K_GEN_FACTOR_PARAMS_SELL,[sell_atr_nstop_factor_grid]) for sell_factors_product_item in sell_factors_product: # sell_factors_product_item[0]['slippage'] = AbuSlippageSellOpen sell_factors_product_item[0]['slippage'] = AbuSlippageSellClose # sell_factors_product_item[0]['slippage'] = AbuSlippageSellMinMax print('卖出因子参数共有{}种组合方式'.format(len(sell_factors_product))) ABuEnv.date_str = datetime.datetime.now().strftime("_%Y_%m_%d") grid_search = GridSearch(read_cash,choice_symbols,buy_factors_product=buy_factors_product, sell_factors_product=sell_factors_product,n_folds=1,start=startDate, end=endDate) if __name__ == '__main__': #多线程必须内容,不可删除。 scores,score_tuple_array = grid_search.fit(n_jobs=-1) store_python_obj(score_tuple_array, 'score_tuple_array'+ABuEnv.date_str, show_log=False) #-------权重方式开始------ if score_tuple_array != None: scorer = WrsmScorer(score_tuple_array, weights=[1, 0, 0, 0]) scorer_returns_max = scorer.fit_score() best_result_tuple = score_tuple_array[scorer_returns_max.index[-1]] print(best_result_tuple.buy_factors) #打印最优因子 print(best_result_tuple.sell_factors) #打印最优因子 store_abu_result_tuple(best_result_tuple, n_folds=None, store_type=EStoreAbu.E_STORE_CUSTOM_NAME, custom_name='best_1_0_0_0') AbuMetricsBase.show_general(best_result_tuple.orders_pd, best_result_tuple.action_pd, best_result_tuple.capital, best_result_tuple.benchmark, only_info=False)
endDate = ['2020-02-26'] concept = symbols_dic['行业'] symbols = symbols_dic['数据'] windowSell = np.arange(7, 8, 1) AbuBigNDown_grid2 = { 'startDate': startDate, 'endDate': endDate, 'windowBuy': windowBuy, 'windowSell': windowSell, 'poly': poly } buy_factors_product = ABuGridHelper.gen_factor_grid_4_jijin( [AbuBigNDown_grid2]) print('买入因子参数共有{}种组合方式'.format(len(buy_factors_product))) grid_search = GridSearch(100000, choice_symbols=symbols, buy_factors_product=buy_factors_product, sell_factors_product=None, start=startDate[0], end=endDate[0], concept=concept) if __name__ == '__main__': #多线程必须内容,不可删除。 scores, score_tuple_array = grid_search.fit4JiJin( n_jobs=1, isJiJin=False, showWindowBuy=showWindowBuy, showWindowSell=showWindowSell, concept=concept)
sell_atr_close_factor_grid ], need_empty_sell=True) buy_bk_factor_grid1 = {'class': [AbuFactorBuyBreak], 'xd': [42]} buy_bk_factor_grid2 = {'class': [AbuFactorBuyBreak], 'xd': [60]} buy_factors_product = ABuGridHelper.gen_factor_grid( ABuGridHelper.K_GEN_FACTOR_PARAMS_BUY, [buy_bk_factor_grid1, buy_bk_factor_grid2]) read_cash = 100000 choice_symbols = ['usAAPL', 'usTSLA', 'usTQQQ'] grid_search = GridSearch(read_cash, choice_symbols, buy_factors_product=buy_factors_product, sell_factors_product=sell_factors_product) scores = None score_tuple_array = None def run_grid_search(): global scores, score_tuple_array # 运行GridSearch n_jobs=-1启动cpu个数的进程数 scores, score_tuple_array = grid_search.fit(n_jobs=-1) # 运行完成输出的score_tuple_array可以使用dump_pickle保存在本地,以方便之后使用 ABuFileUtil.dump_pickle(score_tuple_array, '../gen/score_tuple_array') def load_score_cache():
showWindowBuy = True showWindowSell = False showMutil = False AbuBigNDown_grid2 = { 'jiJinCode': ['123456'], 'startDate': startDate, 'endDate': endDate, 'windowBuy': windowBuy, 'windowSell': windowSell, 'poly': poly } buy_factors_product = ABuGridHelper.gen_factor_grid_4_jijin( [AbuBigNDown_grid2]) print('买入因子参数共有{}种组合方式'.format(len(buy_factors_product))) grid_search = GridSearch(None, jiJinCode, buy_factors_product=buy_factors_product, sell_factors_product=None, n_folds=1, start=startDate[0], end=endDate[0]) if __name__ == '__main__': #多线程必须内容,不可删除。 keysObj = {'showMutil': showMutil} scores, score_tuple_array = grid_search.fit4JiJin( n_jobs=-1, showWindowBuy=showWindowBuy, showWindowSell=showWindowSell, keysObj=keysObj)
'xd': [42] } buy_bk_factor_grid2 = { 'class': [AbuFactorBuyBreak], 'xd': [60] } buy_factors_product = ABuGridHelper.gen_factor_grid( ABuGridHelper.K_GEN_FACTOR_PARAMS_BUY, [buy_bk_factor_grid1, buy_bk_factor_grid2]) # 有三种组合,分别为,只使用42日突破,只使用60日突破和同时使用42日和60日突破。 print('买入因子参数共有{}种组合方式'.format(len(buy_factors_product))) print('买入因子组合形式为{}'.format(buy_factors_product)) # 3、进行gridsearch read_cash = 100000 choice_symbols = ['usNOAH', 'usSFUN', 'usBIDU'] grid_search = GridSearch(read_cash, choice_symbols, buy_factors_product=buy_factors_product, sell_factors_product=sell_factors_product) scores,score_tuple_array=grid_search.fit(n_jobs=-1) print('组合因子参数数量{}'.format(len(buy_factors_product) * len(sell_factors_product))) # 如果从本地序列文件中读取则没有scores print('最终评分结果数量{}'.format(len(scores))) # 可视化策略 best_score_tuple_grid = grid_search.best_score_tuple_grid AbuMetricsBase.show_general(best_score_tuple_grid.orders_pd, best_score_tuple_grid.action_pd, best_score_tuple_grid.capital, best_score_tuple_grid.benchmark)