Python backtrader回测之布林带策略
在做量化分析時,我們有很多種策略,這些策略的好壞如何去評價,那就是用過往數(shù)據(jù)進(jìn)行測試。這里就需要用到量化分析的回測系統(tǒng)了。由于剛?cè)腴T,就使用了Python中的backtrader。由于自己Python水平有限,也是摸索了很久,才簡單的掌握了如何用這個系統(tǒng)去進(jìn)行回測。很多文章中,有介紹比較簡單的均線策略,關(guān)于indicators里的其他包介紹比較少,這里我就用布林帶策略作為演示。因為我基本沒有查到有用這個包做測試的文章,而且我對于類的調(diào)用不是很熟悉,如果你和我一樣,對于類不是很熟悉,那么想去調(diào)用,確實會很費勁。
回測系統(tǒng),我的理解是一個迭代器,在一段時間內(nèi),使用我們寫的策略去迭代,然后這個時間段內(nèi)的收益。首先介紹策略的寫法。
import pandas as pd from datetime import datetime from datetime import timedelta import backtrader as bt import matplotlib.pyplot as pltclass Boll_strategy(bt.Strategy):#自定義參數(shù),每次買入100手params=(('size',1000),)def __init__(self):self.dataclose=self.datas[0].closeself.order=Noneself.buyprice=Noneself.buycomm=None##使用自帶的indicators中自帶的函數(shù)計算出支撐線和壓力線,period設(shè)置周期,默認(rèn)是20self.lines.top=bt.indicators.BollingerBands(self.datas[0],period=20).topself.lines.bot=bt.indicators.BollingerBands(self.datas[0],period=20).botdef next(self):if not self.position:if self.dataclose<=self.lines.bot[0]:#執(zhí)行買入self.order=self.buy(size=self.params.size)else:if self.dataclose>=self.lines.top[0]:#執(zhí)行賣出self.order=self.sell(size=self.params.size)BollingerBands函數(shù),一共有三個值分別為mid(均值),top(壓力線),bot(支撐線),設(shè)置時間周期參數(shù)是period,默認(rèn)20,還有一個倍數(shù)參數(shù)devfactor,默認(rèn)2.0。若不設(shè)置,則為默認(rèn)值。
策略寫好后,就是調(diào)用并回測計算收益了。但是我先通過tushare獲取數(shù)據(jù)。
#使用tushare舊版接口獲取數(shù)據(jù) import tushare as ts def get_data(code,start=start.strftime("%Y-%m-%d"),end=end.strftime("%Y-%m-%d")):df=ts.get_k_data(code,autype='qfq',start=start,end=end)df.index=pd.to_datetime(df.date)df['openinterest']=0df=df[['open','high','low','close','volume','openinterest']]return df ##加載數(shù)據(jù) start=datetime(2020,1,31) end=datetime(2020,9,15) dataframe=get_data('601021') #將數(shù)據(jù)轉(zhuǎn)換為回測系統(tǒng)可識別的 data = bt.feeds.PandasData(dataname=dataframe,fromdate=start,todate=end)通過code碼獲取了2020年1月31號開始的數(shù)據(jù),接下來就是回測步驟了。
##回測設(shè)置主要包括幾項:回測系統(tǒng)初始化,數(shù)據(jù)加載到回測系統(tǒng),添加交易策略, broker設(shè)置(如交易資金和交易傭金), ##頭寸規(guī)模設(shè)置作為策略一部分的交易規(guī)模等,最后顯示執(zhí)行交易策略時積累的總資金和凈收益。 # 初始化cerebro回測系統(tǒng)設(shè)置 cerebro=bt.Cerebro() #將數(shù)據(jù)傳入回測系統(tǒng) cerebro.adddata(data) # 將交易策略加載到回測系統(tǒng)中 cerebro.addstrategy(Boll_strategy) # 設(shè)置初始資本為200,000 startcash=200000 cerebro.broker.setcash(startcash) # 設(shè)置交易手續(xù)費為 0.25% cerebro.broker.setcommission(commission=0.0025) d1=start.strftime('%Y%m%d') d2=end.strftime('%Y%m%d') print(f'初始資金: {startcash}\n回測期間:{d1}:{d2}') #運行回測系統(tǒng) cerebro.run() #獲取回測結(jié)束后的總資金 portvalue=cerebro.broker.getvalue() pnl=portvalue-startcash #打印結(jié)果 print(f'總資金: {round(portvalue,2)}') #最后可視化 %matplotlib inline cerebro.plot(style='candlestick')最后就輸出我們的結(jié)果啦,如下所示:
初始資金: 200000 回測期間:20200131:20200916 總資金: 204718.38截了一張模糊的圖,可以試運行一下,有問題請留言。
總結(jié)
以上是生活随笔為你收集整理的Python backtrader回测之布林带策略的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python seo编程_gogo闯SE
- 下一篇: R语言读写文件