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
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) barxm_dic = DI.getBarBySymbolList(domain_symbol, symbol_info.getSymbolList(), bar_type, startdate, enddate, cols) if 'multi_sl' in stop_loss_dic.keys(): # 混合止损模式 sltlist = [] price_tick = symbol_info.getPriceTick() for sl_name, stop_loss in stop_loss_dic.items(): if sl_name != 'multi_sl': stop_loss[ 'price_tick'] = price_tick # 传入的止损参数中加入price_tick,部分止损方式定价时要用到 stop_loss_class = StopLoss.strategy_mapping_dic[ sl_name](stop_loss) sltlist.append({ 'name': sl_name,