python - 重新运行单元格时,Jupiter notebook 中的 BackTrader 图表消失
问题描述
我正在使用 BackTrader 进行回测(在 Mac 上的 Jupiter Notebook 中使用 python3),并使用了https://www.backtrader.com/docu/plotting/plotting.html上的文档中的以下示例:
import backtrader as bt
class Ind(bt.Strategy):
def __init__(self):
self.sma = bt.indicators.SimpleMovingAverage(self.data)
datapath = 'CSV file on my computer.txt'
data = bt.feeds.BacktraderCSVData(dataname = datapath)
cerebro = bt.Cerebro()
cerebro.adddata(data)
cerebro.addstrategy(Ind)
cerebro.run()
cerebro.plot()
当我使用 BackTrader 的 cerebro.plot() 函数绘制图表时,它第一次运行良好(见图 1)。第一次剧情
但是,当我再次重新运行该单元格(以调整输入)时,它会消失并仅在底部留下图形大小输出(见图 2)。重新运行单元后的输出
如果我将代码复制并粘贴到下面的新单元格中并运行它,它仍然不起作用。我仍然只剩下底部的图形大小输出。
这非常令人沮丧,因为每次我想重现他们的一个情节时,我都必须重新启动 Jupiter notebook 才能做到这一点。
提前致谢!
解决方案
我遇到了同样的问题,我认为这与反向交易者与 matplotlib 的交互有关。我能够通过包含该行来修复它
%matplotlib inline
在我笔记本的最顶部(正如在此处指出的那样,位于最顶部似乎很重要)。我不需要包括像import matplotlib
.
这会在每次生成绘图时生成系统警告消息,这些可以使用来抑制
import warnings
warnings.filterwarnings('ignore')
如本问题所述。
操作问题的最小失败重现:
在 [1] 中:
import backtrader as bt
import datetime
if __name__ == '__main__':
cerebro = bt.Cerebro()
data = bt.feeds.YahooFinanceData(
dataname='AAPL',
fromdate=datetime.datetime(2000, 1, 1),
todate=datetime.datetime(2000, 12, 31),
reverse=False)
cerebro.adddata(data)
cerebro.run()
cerebro.plot(style='bar')
在 [2] 中:
cerebro.plot(style='bar')
修复了最小失败重现的版本:
在 [1] 中:
%matplotlib inline
import warnings
warnings.filterwarnings('ignore')
import backtrader as bt
import datetime
if __name__ == '__main__':
cerebro = bt.Cerebro()
data = bt.feeds.YahooFinanceData(
dataname='AAPL',
fromdate=datetime.datetime(2000, 1, 1),
todate=datetime.datetime(2000, 12, 31),
reverse=False)
cerebro.adddata(data)
cerebro.run()
cerebro.plot(style='bar')
在 [2] 中:
cerebro.plot(style='bar')
推荐阅读
- java - 如何将此 if-else 简化为一个语句?
- c++ - 以非常低的资源要求强制文件复制
- unity3d - Unity列表项在高分辨率下留下了额外的空间
- excel - Excel COUNTIFS 问题
- javascript - Google Maps OverlayView:仅使 SVG 可点击
- csv - Prestahsop 导入 csv 文件
- java - 如何从不同的类更改活动布局中的属性?
- .net - 在一个 PDF/报告中导出/合并两个单独的 SSRS 报告
- css - 如何仅在 bulma 中悬停时使导航栏项目下拉菜单始终可见且处于活动状态
- php - Laravel 的 belongsTo 和 hasMany 关系工作逻辑