首页 > 解决方案 > 重新运行单元格时,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 才能做到这一点。

提前致谢!

标签: pythonplotgraphjupyter-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')

推荐阅读