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月,貌似没有影响)。

有建议请留言。

 

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM