天天看點

粒子群算法組卷_backtrader政策參數大規模優化--使用粒子群和其他智能算法 修訂...

按:上次我們發了一個大規模參數優化的例子,但是采用了停牌的股票,無法運作。這裡修正後重發,代碼可以運作。我們還加了必要的注釋。

backtrader内置的政策參數優化方法是暴力全量搜尋方法,也就是周遊每個參數組合值。在參數很多,每個參數取值變化範圍大的情況下,優化效率是很低的。

可以采用智能優化算法,比如粒子群優化等進行大規模參數優化。下面,我們用python開源算法庫optunity來對backtrader政策參數進行優化。

粒子群算法組卷_backtrader政策參數大規模優化--使用粒子群和其他智能算法 修訂...

我們的示例政策是一個簡單的雙均線政策,要優化兩個參數,即兩個均線移動視窗,目标是使得賬戶市值最大化。從Yahoo線上api取得微軟股票日線資料,進行回測。

采用optunity中的粒子群算法來優化,代碼如下:

from datetime import datetime
import backtrader as bt

import optunity
import optunity.metrics


class SmaCross(bt.SignalStrategy):
    params = (
        ('sma1', 10), # 需要優化的參數1,短期均線視窗
        ('sma2', 30), # 需要優化的參數2,長期均線視窗
    )
    def __init__(self):
        SMA1 = bt.ind.SMA(period=int(self.params.sma1)) # 用int取整
        SMA2 = bt.ind.SMA(period=int(self.params.sma2)) # 用int取整
        crossover = bt.ind.CrossOver(SMA1, SMA2)
        self.signal_add(bt.SIGNAL_LONG, crossover)


data0 = bt.feeds.YahooFinanceData(dataname='MSFT',
                                  fromdate=datetime(2011, 1, 1),
                                  todate=datetime(2012, 12, 31))

def runstrat(sma1,sma2):
    
    cerebro = bt.Cerebro()
    cerebro.addstrategy(SmaCross, sma1=sma1, sma2=sma2)

    cerebro.adddata(data0)
    cerebro.run()
    return cerebro.broker.getvalue()

# 執行優化,執行5次回測(num_evals,實戰時回測次數要設大一些,比如100次),
# 設定兩個參數sma1,sma2的取值範圍
# solver_name可取算法包括 particle swarm,sobol,random search,cma-es,grid search
opt = optunity.maximize(runstrat,  num_evals=5,solver_name='particle swarm', sma1=[2, 55], sma2=[2, 55])

# 得到最優參數結果
optimal_pars, details, _ = opt
print('Optimal Parameters:')
print('sma1 = %.2f' % optimal_pars['sma1'])
print('sma2 = %.2f' % optimal_pars['sma2'])
# 利用最優參數最後回測一次,作圖
cerebro = bt.Cerebro()
cerebro.addstrategy(SmaCross, sma1=optimal_pars['sma1'], sma2=optimal_pars['sma2'])
cerebro.adddata(data0)
cerebro.run()
cerebro.plot()
           

optunity支援如下幾種算法(solver),讀者可以分别測試它們。

particle swarm

,

sobol

,

random search

,

cma-es

,

grid search

更多内容請參考我們編寫的backtrader教程

optMaster:為什麼需要一本系統化的python量化架構Backtrader中文技術教程v1.1​zhuanlan.zhihu.com

粒子群算法組卷_backtrader政策參數大規模優化--使用粒子群和其他智能算法 修訂...