老熟女激烈的高潮_日韩一级黄色录像_亚洲1区2区3区视频_精品少妇一区二区三区在线播放_国产欧美日产久久_午夜福利精品导航凹凸

重慶分公司,新征程啟航

為企業(yè)提供網(wǎng)站建設(shè)、域名注冊(cè)、服務(wù)器等服務(wù)

python多進(jìn)程和VNPY多進(jìn)程參數(shù)優(yōu)化舉例分析-創(chuàng)新互聯(lián)

這篇文章主要講解了“python多進(jìn)程和VNPY多進(jìn)程參數(shù)優(yōu)化舉例分析”,文中的講解內(nèi)容簡(jiǎn)單清晰,易于學(xué)習(xí)與理解,下面請(qǐng)大家跟著小編的思路慢慢深入,一起來(lái)研究和學(xué)習(xí)“python多進(jìn)程和VNPY多進(jìn)程參數(shù)優(yōu)化舉例分析”吧!

創(chuàng)新互聯(lián)公司專(zhuān)注于雁江企業(yè)網(wǎng)站建設(shè),成都響應(yīng)式網(wǎng)站建設(shè)公司,商城網(wǎng)站開(kāi)發(fā)。雁江網(wǎng)站建設(shè)公司,為雁江等地區(qū)提供建站服務(wù)。全流程按需網(wǎng)站設(shè)計(jì),專(zhuān)業(yè)設(shè)計(jì),全程項(xiàng)目跟蹤,創(chuàng)新互聯(lián)公司專(zhuān)業(yè)和態(tài)度為您提供的服務(wù)

首先,由于GIL(全局解釋鎖)的問(wèn)題,全局對(duì)象只能一個(gè)進(jìn)程調(diào)用,python多線程并不能充分利用多核處理器,比如有時(shí)候用pandas跑大型數(shù)據(jù)分析,發(fā)現(xiàn)只有一核在累死累活。如果想要充分地使用多核CPU的資源,在python中大部分情況需要使用多進(jìn)程。multiprocessing可以給每個(gè)進(jìn)程賦予單獨(dú)的Python解釋器,這樣就規(guī)避了全局解釋鎖所帶來(lái)的問(wèn)題。可以理解為多核CPU分配好一個(gè)工作任務(wù),這個(gè)工作任務(wù)包括工作方法和工作內(nèi)容。

其實(shí)python多線程很簡(jiǎn)單,相對(duì)于其他語(yǔ)言來(lái)說(shuō)。其實(shí)簡(jiǎn)單就是針對(duì)需要多線程的方法func(a),a是參數(shù)。相當(dāng)于工作內(nèi)容;使用Multiprocessing.Process(target = func, args =(a,)),創(chuàng)建一個(gè)Prcoess對(duì)象,也就是工作任務(wù),再啟動(dòng)這個(gè)對(duì)象,這樣一個(gè)多進(jìn)程任務(wù)就完成了。等CPU分配一個(gè)獨(dú)立核去干活,func(a)就開(kāi)動(dòng)了。這里唯一要注意args是默認(rèn)輸入元祖參數(shù)。

P = Multiprocessing.Process(target = func, args =(a,))
P.start()

Multiprocessing提供了更簡(jiǎn)潔的pool做為進(jìn)程池,其實(shí)叫任務(wù)池更為恰當(dāng)。把需要干的工作任務(wù)打包好,放在這個(gè)池子里面,這樣空閑下來(lái)的核心就撿pool的任務(wù)干活。

常見(jiàn)的pool的使用如下,其中prcesses = 4 是定義任務(wù)池大小,不一定要小于或者等于cpu核心數(shù)量,可以大于cpu核心數(shù)量,不過(guò)這樣就有幾個(gè)任務(wù)空掛著還占用內(nèi)存。

然后使用pool方法apply_async(task, args=(x,)),把打包好的任務(wù)插入池中。apply_asyncs是異步的帶返回值。如果用apply也可以正常,但是會(huì)沒(méi)有返回值,此處不仔細(xì)研究了。

之后close()是把這個(gè)任務(wù)池關(guān)閉,不再接受新的任務(wù);但是還有一些已有任務(wù)在跑,所以用pool.join(),吊著主程序,直到所有任務(wù)完成才進(jìn)入下一步。

if __name__ == '__main__':
    Multiprocessing.pool = Pool(processes=4)
    for x in range(10):
        pool.apply_async(task, args=(x,))
    pool.close()
    pool.join()

下面看看VNPY多進(jìn)程優(yōu)化方法。其實(shí)很好理解了,runParallelOptimization是類(lèi)BacktestingEngine的一個(gè)方法。

傳入?yún)?shù)strategyClass就是這個(gè)策略類(lèi),setting是要優(yōu)化參數(shù)范圍,后面通過(guò)optimizationSetting.generateSetting()生成策略參數(shù)隊(duì)列,做為任務(wù)內(nèi)容;optimizationSetting.optimizeTarget是后面返回值。至于回測(cè)品種,回測(cè)時(shí)間段,交易費(fèi)用什么,在BacktestingEngine創(chuàng)建時(shí)候維護(hù)了。

然后創(chuàng)建任務(wù)池pool,大小剛好是cpu核數(shù),這個(gè)也是比較穩(wěn)妥設(shè)置。

之后做一個(gè)l隊(duì)列來(lái)放返回值。

然后打包策略類(lèi),回測(cè)參數(shù),策略參數(shù)做為任務(wù)內(nèi)容,和任務(wù)方法optimize一起組合為一個(gè)工作任務(wù)。然后插入任務(wù)池給cpu核心去跑。這個(gè)時(shí)候在系統(tǒng)監(jiān)視器可以看到于核心數(shù)相同的python虛擬環(huán)境運(yùn)作。

然后就是對(duì)返回值排序。后面詳細(xì)說(shuō)說(shuō)。

df =  engine.runParallelOptimization(AtrRsiStrategy, setting)
def runParallelOptimization(self, strategyClass, optimizationSetting):
    """并行優(yōu)化參數(shù)"""
    # 獲取優(yōu)化設(shè)置        
    settingList = optimizationSetting.generateSetting()
    targetName = optimizationSetting.optimizeTarget
    
    # 檢查參數(shù)設(shè)置問(wèn)題
    if not settingList or not targetName:
        self.output(u'優(yōu)化設(shè)置有問(wèn)題,請(qǐng)檢查')
    
    # 多進(jìn)程優(yōu)化,啟動(dòng)一個(gè)對(duì)應(yīng)CPU核心數(shù)量的進(jìn)程池
    pool = multiprocessing.Pool(multiprocessing.cpu_count())
    l = []
    for setting in settingList:
        l.append(pool.apply_async(optimize, (strategyClass, setting,
                                             targetName, self.mode, 
                                             self.startDate, self.initDays, self.endDate,
                                             self.slippage, self.rate, self.size, self.priceTick,
                                             self.dbName, self.symbol)))
    pool.close()
    pool.join()
    
    # 顯示結(jié)果
    resultList = [res.get() for res in l]
    resultList.sort(reverse=True, key=lambda result:result[1])
    return resultList

像現(xiàn)在雙核四線程就有四個(gè)python環(huán)境在跑任務(wù)。

python多進(jìn)程和VNPY多進(jìn)程參數(shù)優(yōu)化舉例分析

這里會(huì)發(fā)現(xiàn)是用靜態(tài)方法optimize,如果直接調(diào)用BacktestingEngine的回測(cè)方法更簡(jiǎn)潔,為什么沒(méi)有呢,這個(gè)是python2.7的Multiprocessing的一個(gè)局限,只能打包靜態(tài)方法做為工作方法,如果打包類(lèi)中的方法,會(huì)提示錯(cuò)誤。

cPickle.PicklingError: Can't pickle : attribute lookup builtin.instanceme

如果VNPY2.0基于python3.6版本,應(yīng)該就會(huì)更簡(jiǎn)化一些。

下面看看靜態(tài)方法optimize,其實(shí)沒(méi)什么好說(shuō),就是新建一個(gè)回測(cè)引擎BacktestingEngine對(duì)象,按照參數(shù)跑一遍回測(cè),返回一個(gè)元祖,包含了這次回測(cè)的參數(shù),針對(duì)回測(cè)目標(biāo)的值,和一個(gè)包含回測(cè)結(jié)果的字典,這個(gè)字典包括什么年化收入,sharpe等一堆回測(cè)結(jié)果。

然后所有的回測(cè)結(jié)果元祖組成一個(gè)回測(cè)結(jié)果隊(duì)列,這個(gè)結(jié)果隊(duì)列按照targetValue反向排序,大放在第一位。

因?yàn)樘嗔耍话阄叶际禽敵龅絜xcel里面,之前說(shuō)過(guò)怎么實(shí)現(xiàn)。

#----------------------------------------------------------------------
def optimize(strategyClass, setting, targetName,
             mode, startDate, initDays, endDate,
             slippage, rate, size, priceTick,
             dbName, symbol):
    """多進(jìn)程優(yōu)化時(shí)跑在每個(gè)進(jìn)程中運(yùn)行的函數(shù)"""
    engine = BacktestingEngine()
    engine.setBacktestingMode(mode)
    engine.setStartDate(startDate, initDays)
    engine.setEndDate(endDate)
    engine.setSlippage(slippage)
    engine.setRate(rate)
    engine.setSize(size)
    engine.setPriceTick(priceTick)
    engine.setDatabase(dbName, symbol)
    engine.initStrategy(strategyClass, setting)
    engine.runBacktesting()
    engine.calculateDailyResult()
    d, result = engine.calculateDailyStatistics()
    try:
        targetValue = result[targetName]
    except KeyError:
        targetValue = 0
    return (str(setting), targetValue, result)

其實(shí)python的多進(jìn)程庫(kù)Multiprocessing不算復(fù)雜,但是用在回測(cè)上效果很好;現(xiàn)在有了遺傳算法,進(jìn)行策略?xún)?yōu)化更加方便了。

感謝各位的閱讀,以上就是“python多進(jìn)程和VNPY多進(jìn)程參數(shù)優(yōu)化舉例分析”的內(nèi)容了,經(jīng)過(guò)本文的學(xué)習(xí)后,相信大家對(duì)python多進(jìn)程和VNPY多進(jìn)程參數(shù)優(yōu)化舉例分析這一問(wèn)題有了更深刻的體會(huì),具體使用情況還需要大家實(shí)踐驗(yàn)證。這里是創(chuàng)新互聯(lián),小編將為大家推送更多相關(guān)知識(shí)點(diǎn)的文章,歡迎關(guān)注!


名稱(chēng)欄目:python多進(jìn)程和VNPY多進(jìn)程參數(shù)優(yōu)化舉例分析-創(chuàng)新互聯(lián)
文章出自:http://www.xueling.net.cn/article/jsipi.html

其他資訊

在線咨詢(xún)
服務(wù)熱線
服務(wù)熱線:028-86922220
TOP
主站蜘蛛池模板: 亚洲狠狠婷婷综合久久久久图片 | 又色又爽又黄又硬的视频免费观看 | 一本一道av无码中文字幕麻豆 | 粉嫩在线一区二区三区视频 | 亚洲成成品网站 | 精品久久久久久久妇女 | 国产精品久久高潮无码视频 | 草久久免费视频 | 国产在线精品一区二区三区不卡 | 出租屋勾搭老熟妇啪啪 | 国产在线无码一区二区三区 | av片在线播放网址 | 超碰成人在线播放 | 久久青草国产免费频观 | av天天在线 | 巨茎中出肉欲人妻在线视频 | 亚洲第一无码精品一区 | 国产乱仑视频 | 久久精品一区视频 | 日本专区在线 | 久久人人爽人人爽人人AV东京热 | 91视频在线视频 | a点w片| 久草视频在线首页 | 玖玖综合在线 | 日韩精品久久一区二区三区 | 91chinesevideo永久地址 | 在线看一级毛片免费视频播放 | 黄色的视频在线免费观看 | 2014天堂| 国产精品自在拍一区二区不卡 | 亚洲欧美观看 | 久久天天| 久久天天躁狠狠躁夜夜2020 | 91精品啪在线观看国产足疗 | 欧洲美女粗暴牲交 | www.亚洲综合 | 免费无码成人片 | 黑人40厘米全部进去A片 | 欧美一级视频在线 | 黄色一级片在线观看 |