backtrader的版本由于相对比较完善了,所以最近更新的比较慢,这就导致了一个问题,如果依赖的模块进行更新了,就可能导致backtrader的某些功能不可用,即版本兼容问题。比如,当使用最新版本的matplotlib的时候,在backtrader中,使用cerebro.plot()进行画图会保持,出现兼容问题,如果把matplotlib的版本进行倒退到3.1.2,就可以使用了。
简单点的解决方式
直接尝试把matplotlib的版本倒退到3.1.2
这种向后兼容的方式是不合理的,但是可以作为权宜之计,暂时使用。比较合理的方式是修改backtrader的源码,使得backtrader能够使用最新版的matplotlib。
尝试从backtrader上进行修改
直接在backtrader.plot.locator上进行修改,把从matplotlib.dates中引用的warnings换成直接引用就好了。如下所示
修改完这两行代码之后,就可以直接使用最新版的matplotlib了,目前使用的是3.5.0版本,没有报错。
import datetimefrom matplotlib.dates import AutoDateLocator as ADLocatorfrom matplotlib.dates import RRuleLocator as RRLocatorfrom matplotlib.dates import AutoDateFormatter as ADFormatterfrom matplotlib.dates import (HOURS_PER_DAY, MIN_PER_HOUR, SEC_PER_MIN, MONTHS_PER_YEAR, DAYS_PER_WEEK, SEC_PER_HOUR, SEC_PER_DAY, num2date, rrulewrapper, YearLocator, # MicrosecondLocator, warnings) MicrosecondLocator)import warnings from dateutil.relativedelta import relativedeltaimport numpy as np
谈一谈backtrader画图的替代方案
这个世界上不存在真正完美的东西。作为一个量化投资框架,使用matplotlib进行画图分析,确实有些丢面子,因为好多好用的功能,在matplotlib上实现起来特别难,所以,建议考虑其他的数据展示方案。
为了解决这个问题,很多人也进行过尝试,其中一个比较好的方案是backtrader_plotting,使用画图工具bokeh,对相关数据进行形象化展示,但是最近应该很长时间没有维护了,使用起来是有bug的。如果您想要使用bokeh作为您数据分析的工具,可以考虑在这个包的基础上改一改bug,然后使用,避免重复造轮子。
画图工具
当时想要形象化展示backtrader的回测结果的时候,bokeh是一个备选方案,还有pyechart,这个也是非常有名的画图工具;另外一个备选方案是plotly和dash,最终的选择是使用了plotly和dash作为画图工具和数据分析展示工具,在公司开发了一个backtrader的回测结果分析小脚本,暂时不太好开源。
这三个工具的优劣,不太好说。看起来,plotly和dash更贴近金融一些,所以选择的是这个。
前后端框架形成网页
使用简单的画图工具,有时候可能过于简略了,不能完全满足我们的需要,可以考虑使用一些前端框架和后端框架,做一套比较精美的数据分析、回测结果分析的网页。前端一般使用html、css、vue,后端一般使用flask、fastapi、django等。
客户端界面
也有一些模块支持创建图形化界面,比如python的thinker,但是考虑下性能,还是不建议了。可以考虑QT,比如pyqt6(号称最强大的客户端界面),做成类似于vnpy的那种界面。
使用画图工具仅仅是权宜之计,可以考虑后两种方案,相对来说,使用起来会比较舒服。但是,任何事情都有两面性,使用起来舒服的东西,开发出来一般需要更多的时间和精力。
后期我可能会用flask写一个集历史数据分析、回测结果分析的小模块,作为backtrader的补充。前面已经实现了一个简单的用flask展示pyfolio回测结果的小脚本,后续会进一步完善改进。
————————————————
版权声明:本文为CSDN博主「云金杞」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:【答读者问27】backtrader不支持最新版本的matplotlib怎么办以及backtrader画图的解决方案_云金杞-CSDN博客
发布于 11-20 11:22
修改于 12-2 22:43 用于测试蜗牛笔记的文章修改功能是否实现了