我使用BackTrader进行回溯测试(在Mac上的Jupiter笔记本中使用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的snebero.plot()函数绘制图形时,它第一次运行良好(参见图1)。First time plot
但是,当我再次运行单元格(调整输入)时,它会消失,只剩下底部的图形大小输出(参见图2)。Output after re-running cell
如果我将代码复制粘贴到下面的新单元格中并运行它,它仍然无法工作。我仍然只剩下图大小输出在底部。
这是非常令人沮丧的,因为每次我想复制他们的情节之一,我必须重新启动木星笔记本来做。
提前谢谢!

最佳答案

我也遇到过同样的问题,我相信这与backtrader与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')

关于python - 重新运行单元格时,Jupiter笔记本中的BackTrader图形图消失,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/51098041/

10-09 17:18