backtrader学习之三-布林线策略回测

继续用backtrader进行回测,这次采用布林线来判断买卖点。数据还是从证券宝获取,整理成pandas的csv文件格式。

数据采用了2020年-2021年的工商银行。下面贴代码。

import datetime
import pandas as pd
import backtrader as bt
import matplotlib.pyplot as plt

class Boll_strategy(bt.Strategy):
#自定义参数,每次买入1800手
params=(('size',1800),)
def __init__(self):
self.dataclose=self.datas[0].close
self.order=None
self.buyprice=None
self.buycomm=None
##使用自带的indicators中自带的函数计算出支撑线和压力线,period设置周期,默认是20
self.lines.top=bt.indicators.BollingerBands(self.datas[0],period=20).top
self.lines.bot=bt.indicators.BollingerBands(self.datas[0],period=20).bot
def next(self):
if not self.position:
if self.dataclose<=self.lines.bot[0]:
#执行买入
self.order=self.buy(size=self.params.size)
else:
if self.dataclose>=self.lines.top[0]:
#执行卖出
self.order=self.sell(size=self.params.size)

dataframe = pd.read_csv(r"C:\gsyh.csv", index_col=0, parse_dates=True)
dataframe['openinterest'] = 0
data = bt.feeds.PandasData(dataname=dataframe,
fromdate = datetime.datetime(2020, 1, 1),
todate = datetime.datetime(2021, 3, 31)
)

# 初始化cerebro回测系统设置
cerebro=bt.Cerebro()
#将数据传入回测系统
cerebro.adddata(data)
# 将交易策略加载到回测系统中
cerebro.addstrategy(Boll_strategy)
# 设置初始资本为10,000
startcash=10000
cerebro.broker.setcash(startcash)
# 设置交易手续费为 0.25%
cerebro.broker.setcommission(commission=0.001)
#运行回测系统
cerebro.run()
#获取回测结束后的总资金
portvalue=cerebro.broker.getvalue()
pnl=portvalue-startcash
#打印结果
print(f'总资金: {round(portvalue,2)}')
#最后可视化
cerebro.plot()

看下测试结果,原始资金1w,最后是11132,收益率11%。看上去不错,不过还是没有算上分红(分红在6月,貌似没有影响)。

有建议请留言。

 

 

posted @ 2021-05-19 19:26  ZhongciWang  阅读(1490)  评论(0编辑  收藏  举报