def getParallelResult(strategyParameter, strategy_class, parasetlist, paranum, indexcols): strategyName = strategyParameter['strategy_name'] exchange_id = strategyParameter['exchange_id'] sec_id = strategyParameter['sec_id'] K_MIN = strategyParameter['K_MIN'] startdate = strategyParameter['startdate'] enddate = strategyParameter['enddate'] domain_symbol = '.'.join([exchange_id, sec_id]) result_para_dic = strategyParameter['result_para_dic'] # ======================数据准备============================================== # 取合约信息 symbolInfo = DI.SymbolInfo(domain_symbol, startdate, enddate) # 取跨合约数据 # contractswaplist = DC.getContractSwaplist(domain_symbol) # swaplist = np.array(contractswaplist.swaputc) # 取K线数据 # rawdata = DC.getBarData(symbol, K_MIN, startdate + ' 00:00:00', enddate + ' 23:59:59').reset_index(drop=True) rawdataDic = DI.getBarBySymbolList(domain_symbol, symbolInfo.getSymbolList(), K_MIN, startdate, enddate) timestart = time.time() # 多进程优化,启动一个对应CPU核心数量的进程池 pool = multiprocessing.Pool(multiprocessing.cpu_count() - 1) l = [] resultlist = pd.DataFrame(columns=['Setname'] + indexcols) strategy_para_name_list = strategy_class.get_para_name_list() for i in range(0, paranum): paraset = {} setname = parasetlist.ix[i, 'Setname'] paraset['Setname'] = setname for strategy_para_name in strategy_para_name_list: paraset[strategy_para_name] = parasetlist.ix[i, strategy_para_name] #l.append(getResult(strategyName, strategy_class, symbolInfo, K_MIN, rawdataDic, paraset, result_para_dic, indexcols,timestart)) l.append( pool.apply_async( getResult, (strategyName, strategy_class, symbolInfo, K_MIN, rawdataDic, paraset, result_para_dic, indexcols, timestart))) pool.close() pool.join() timeend = time.time() print("total time %.2f" % (timeend - timestart)) # 显示结果 i = 0 for res in l: resultlist.loc[i] = res.get() i += 1 finalresults = ("%s %s %d finalresult.csv" % (strategyName, domain_symbol, K_MIN)) resultlist.to_csv(finalresults) return resultlist
strategyParameterSet[strategy_name] = strategy_bt_parameter for strategy_name, strategy_bt_parameter in strategyParameterSet.items(): strategy_folder = "%s%s\\" % (Parameter.root_path, strategy_name) for strategyParameter in strategy_bt_parameter: exchange_id = strategyParameter['exchange_id'] sec_id = strategyParameter['sec_id'] bar_type = strategyParameter['K_MIN'] startdate = strategyParameter['startdate'] enddate = strategyParameter['enddate'] domain_symbol = '.'.join([exchange_id, sec_id]) result_para_dic = strategyParameter['result_para_dic'] stop_loss_dic = strategyParameter['stop_loss_dic'] symbol_info = DI.SymbolInfo(domain_symbol, startdate, enddate) symbol_bar_folder_name = strategy_folder + "%s %s %s %d" % ( strategy_name, exchange_id, sec_id, bar_type) os.chdir(symbol_bar_folder_name) paraset_name = "%s %s %s %d Parameter.csv" % ( strategy_name, exchange_id, sec_id, bar_type) # 读取已有参数表 parasetlist = pd.read_csv(paraset_name)['Setname'].tolist() cols = [ 'open', 'high', 'low', 'close', 'strtime', 'utc_time', 'utc_endtime' ] #bar1m_dic = DI.getBarBySymbolList(domain_symbol, symbol_info.getSymbolList(), 60, startdate, enddate, cols) bar1m_dic = DI.getBarDicAfterDomain(symbol_info, 60, cols)
strategy_folder = "%s%s\\" % (Parameter.root_path, strategy_name) for strategyParameter in strategy_bt_parameter: strategy_name = strategyParameter['strategy_name'] exchange_id = strategyParameter['exchange_id'] sec_id = strategyParameter['sec_id'] bar_type = strategyParameter['K_MIN'] startdate = strategyParameter['startdate'] enddate = strategyParameter['enddate'] symbol = '.'.join([exchange_id, sec_id]) result_para_dic = strategyParameter['result_para_dic'] forward_mode_dic = strategyParameter['forward_mode_dic'] symbol_info = DI.SymbolInfo(symbol, startdate, enddate) price_tick = symbol_info.getPriceTick() symbol_bar_folder_name = strategy_folder + "%s %s %s %d\\" % ( strategy_name, exchange_id, sec_id, bar_type) os.chdir(symbol_bar_folder_name) paraset_name = "%s %s %s %d Parameter.csv" % ( strategy_name, exchange_id, sec_id, bar_type) # 读取已有参数表 parasetlist = pd.read_csv(paraset_name)['Setname'].tolist() # 混合止损模式 sltlist = [] for sl_name, stop_loss in forward_mode_dic.items(): if sl_name != 'multi_sl' and sl_name != 'common': # 混合标志和普通模式标志都是不带参数的 stop_loss['price_tick'] = price_tick stop_loss_class = StopLoss.strategy_mapping_dic[sl_name]( stop_loss)
# 生成月份列表,取开始月 newmonth = Parameter.enddate[:7] month_n = Parameter.month_n monthlist = [ datetime.strftime(x, '%Y-%m') for x in list( pd.date_range( start=Parameter.startdate, end=newmonth + '-01', freq='M')) ] startmonth = monthlist[-month_n] # ======================================参数配置================================================== strategy_name = Parameter.strategy_name exchange_id = Parameter.exchange_id sec_id = Parameter.sec_id bar_type = Parameter.K_MIN symbol = '.'.join([exchange_id, sec_id]) symbolinfo = DC.SymbolInfo(symbol) price_tick = symbolinfo.getPriceTick() symbol_bar_folder_name = Parameter.strategy_folder + "%s %s %s %d\\" % ( strategy_name, exchange_id, sec_id, bar_type) os.chdir(symbol_bar_folder_name) paraset_name = "%s %s %s %d Parameter.csv" % (strategy_name, exchange_id, sec_id, bar_type) # 读取已有参数表 parasetlist = pd.read_csv(paraset_name)['Setname'].tolist() paranum = len(parasetlist) sltlist = [] calcMultiSLT = False for sl_name, stop_loss in Parameter.forward_mode_para_dic.items(): if sl_name == 'multi_sl':