我正在使用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来完成它。
谢谢!
答案 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')