量化交易学习(四十九)backtrader保存结果图片

在backtrader,如果想画出回测结果,可以用cerebro.plot(),但是如果只想保存结果图片不显示怎么做呢,backtrader中并没有直接提供保存图片的方法。

经过摸索,我找到了不显示图片保存回测结果图片的方法。

代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
'''
保存策略的图表
参数:
- strat: 需要绘制图表的策略对象。
- plotter: 绘图器对象,如果未提供,则使用默认的plot.Plot_OldSync。
- numfigs: 要绘制的图表数量。
- iplot: 是否使用交互式绘图。
- start: 图表的起始日期。
- end: 图表的结束日期。
- width: 图表的宽度。
- height: 图表的高度。
- dpi: 图表的分辨率。
- tight: 是否使用紧凑的布局。
- use: 指定使用的数据。
- filename: 保存的文件名前缀。
- **kwargs: 传递给绘图器的额外参数。

返回值:

'''
def saveImg(strat, plotter=None, numfigs=1, iplot=True, start=None, end=None,
width=16, height=9, dpi=300, tight=True, use=None,filename='',
**kwargs):
# 如果未提供plotter,创建默认的绘图器对象
if not plotter:
from backtrader import plot
plotter = plot.Plot_OldSync(**kwargs)
# 绘制图表并获取第一个图表的引用
rfig = plotter.plot(strat, figid=0 * 100,
numfigs=numfigs, iplot=iplot,
start=start, end=end, use=use)
# 保存图表为PNG文件
plotter.savefig(rfig[0],filename+'.png')

使用时,在主函数中可以这样写:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
cerebro = bt.Cerebro()
cerebro.addstrategy(strategy.MACDStrategy)
today=datetime.datetime.today()
data=mysqlDataFeed.MySQLData(
dataname=symbol,
timeframe=bt.TimeFrame.Days,
fromdate=today-relativedelta(months=6),
todate=today,
adj_base_date=today
)
cerebro.adddata(data)
cerebro.broker.setcash(10000)

# 获取回测后所有策略的结果数据列表
# 如果只有一个策略会返回只有一个数据的列表
strat=cerebro.run()

# 画出策略回测的结果图,目前只支持单个策略,单幅图片
saveImg(strat[0],style='candle',barup='red',bardown='green',volup='red',voldown='green',voloverlay=False,filename='test')

结果图片如下:

test.png

江达小记