示例#1
0
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
示例#2
0
            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,