backtrader_plotting是一个扩展库,用来增强backtrader的绘图功能。它不仅功能更加强大,比如能够把结果分成多个Tab显示,而且显示效果也更加优雅美观。所以推荐大家使用这个,而不是backtrader缺省的plot功能。
安装backtrader_plotting
backtrader_plotting可以通过pip进行安装:
pip install backtrader_plotting
替换backtrader的plot功能
backtrader_plotting的使用也很简单。在前一篇文章的例子中,显示回测结果的代码是这样的:
cerebro.plot()
如果使用backtrader_plotting,需要把代码改成这样:
from backtrader_plotting import Bokeh
from backtrader_plotting.schemes import Tradimo
# 其它回测代码
# ...
b = Bokeh(style='bar', plot_mode='single', scheme=Tradimo())
cerebro.plot(b)
下面是backtrader_plotting的执行结果。
- 账户资产变化情况
- K线
设置不显示K线
在实际的回测中,通常需要设置为不显示K线。因为实际的回测通常包含几百个甚至更多的期权,把每个期权的K线都画出来,既费时也没有必要。
backtrader关闭K线的方法,是把每一个数据流的plotinfo.plot属性设置成False。如下面的代码所示:
# 设置回测结果中不显示期权K线
for d in cerebro.datas:
d.plotinfo.plot = False
# 显示策略运行结果
b = Bokeh(style='bar', plot_mode='single', scheme=Tradimo())
cerebro.plot(b)
但是这个方法在使用backtrader_plotting时遇到一个问题:即使设置了plot=False,backtrader_plotting仍然会显示K线。
这个问题花了我两天的时间,仍然没有头绪。最后咨询了backtrader_plotting的作者,他给了一个解决方案。方法如下:
- 打开backtrader_plotting安装文件里的bokeh.py。
- 找到下面这段代码:
if plotmaster not in data_graph:
data_graph[plotmaster] = []
data_graph[plotmaster].append(obj)
- 把上面的代码替换成下面这样(增加第1行代码):
if plotmaster.plotinfo.plot:
if plotmaster not in data_graph:
data_graph[plotmaster] = []
data_graph[plotmaster].append(obj)
- 替换完成之后,保存bokeh.py文件
然后,当plot=False的时候,backtrader_plotting就不会显示K线了。
有兴趣的读者可以参考作者的回复:how to disable buy/sell chart
注意:这个解决方案对backtrader_plotting当前版本v1.1.0适用,未来可能会有变化。