重新运行单元格时,Jupiter笔记本中的BackTrader图形图消失

时间:2018-06-29 09:01:11

标签: python plot graph jupyter-notebook

我正在使用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)。 First time plot

但是,当我再次运行单元(以调整输入)时,它消失了,只剩下底部的图形尺寸输出(见图2)。 Output after re-running cell

如果我将代码复制并粘贴到下面的新单元格中并运行它,它仍然不起作用。我仍然只剩下底部的图形尺寸输出。

这非常令人沮丧,因为每次我要复制他们的地块之一时,我都必须重新启动Jupiter Notebook来完成它。

谢谢!

1 个答案:

答案 0 :(得分:0)

我遇到了同样的问题,我相信它与回购者与matplotlib的交互有关。我可以通过添加该行来修复它

%matplotlib inline

位于笔记本的最上方(位于最上方似乎很重要,as noted here)。我确实不需要需要包含诸如import matplotlib之类的语句。

这会在每次生成图时生成系统警告消息,可以使用以下方法将其抑制

import warnings
warnings.filterwarnings('ignore')

in this question所述。

对操作问题的最小修复:

在[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')