我使用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/