上一節(jié)我們經過簡單優(yōu)化后實現(xiàn)了第一個盈利的策略,,但我們依然需要思考一下策略參數(shù)是不是最優(yōu)的,是否還有優(yōu)化的空間,? 本節(jié)我們將基于 freqtrade 的Hyperopt模塊,,對我們的策略參數(shù)進行優(yōu)化,Hyperopt本質上還是基于scikit-optimize進行開發(fā)的,。 我們先簡單介紹一下原理,,超參數(shù)優(yōu)化一般有三種方式: 1、網格搜索(Grid Search) 網格搜索是暴力搜索,,在給定超參搜索空間內,,嘗試所有超參組合,最后搜索出最優(yōu)的超參組合,,主要缺點是耗時,,不適應大量參數(shù)的窮舉,如下圖: 2,、隨機搜索(Randomized Search) 隨機搜索是在搜索空間中采樣出超參組合,,然后選出采樣組合中最優(yōu)的超參組合。隨機搜索的好處如下圖所示: 網格搜索和隨機搜索的對比[2] 網格搜索不會care這個參數(shù)是否為important parameter,對于所有參數(shù)一視同仁,,窮舉所有的情況,,尋找最優(yōu)參數(shù)組合,;而隨機搜索會有更多的參數(shù)值參與到important parameter中,減少搜索范圍,,提升搜索效率,。 3、貝葉斯優(yōu)化(Bayesian Optimization) 調優(yōu)的目的是要找到一組最優(yōu)的超參組合,,能使目標函數(shù)f達到全局最小值,。 舉個例子,若學習率設置過大,,模型可能會在代價函數(shù)的全局最優(yōu)點附近不斷來回震蕩,,甚至跳出全局最優(yōu)點,而設置過小,,又可能會陷入局部最優(yōu),,因此調學習率這一參數(shù),是為了讓模型能收斂到代價函數(shù)的全局最小值,??墒窃跈C器學習中,目標函數(shù)f常是被稱作expensive blackbox function,,計算開銷大且不一定為凸函數(shù),。為此,貝葉斯優(yōu)化出現(xiàn)了,,它特別適合針對expensive blackbox function找到全局最優(yōu),。 隨機采樣10個點的目標函數(shù)f(x)[4] 貝葉斯優(yōu)化使用了高斯過程(gasussian processes, GP)去構建代理模型,基于給定的輸入和輸出,,GP會推斷出一個模型(這里為代理模型),。假設我們從expensive step的f(x)采樣了4個點,然后我們把這4個點交給GP,,它會返回一個代理模型 綠色實線就是GP的代理模型,,綠色條帶是輸出分布的標準差(即為Uncertainty)。我們有了代理模型,,后續(xù)我們去找下一個合適的超參值,,就能帶入到計算開銷相對較小的代理模型中,評估給定超參值的情況,。 對上述原理感興趣的小伙伴,,還可以再深入了解一下。 Code 實現(xiàn)我們HyperOpt的超參數(shù)調優(yōu)代碼:(相對比較簡單) # Hyperoptable parametersbuy_rsi = IntParameter(low=1, high=50, default=30, space='buy', optimize=True, load=True)sell_rsi = IntParameter(low=50, high=100, default=70, space='sell', optimize=True, load=True)short_rsi = IntParameter(low=51, high=100, default=70, space='sell', optimize=True, load=True)exit_short_rsi = IntParameter(low=1, high=50, default=30, space='buy', optimize=True, load=True) 將買入?yún)?shù)變量替換至買入策略中: 同理將賣出參數(shù)變量替換至賣出策略中: 啟動參數(shù)調優(yōu),,設置為500epoch: docker-compose run --rm freqtrade hyperopt --config user_data/config.json --hyperopt-loss SharpeHyperOptLossDaily --strategy HyperIndexStrategy -e 500 參數(shù)調優(yōu)結果 從截圖中可以看到,,500 epoch運行完成后,best結果是在第141個epoch中得到,最大收益率1.6%,,最大回撤2.02%,。給出最優(yōu)參數(shù)(買入、賣出,、ROI,、止損)組合如下: (吐槽:參數(shù)調優(yōu)太消耗CPU了,小機器調2次,,2個晚上就沒了,傷不起,。,。。,。,。) 下一節(jié)準備部署介紹一下如何將策略部署實盤。 |
|