Графики BackTrader в блокноте Юпитера исчезают при повторном запуске ячейки - PullRequest
0 голосов
/ 29 июня 2018

Я использую BackTrader для тестирования на истории (использую python3 в Jupiter Notebook на Mac) и использовал следующий пример из их документации, найденной по адресу 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()

Когда я строю график с помощью функции cereTrax.plot () BackTrader, он работает нормально с первого раза (см. Рисунок 1). Первый сюжет

Однако, когда я снова запускаю ячейку (для настройки входов), она исчезает и остается только с выводом размера фигуры внизу (см. Рисунок 2). Выход после повторного запуска ячейки

Это все еще не работает, если я скопирую и вставлю код в новую ячейку ниже и запусту его. Я все еще остался с выводом размера фигуры внизу.

Это очень печально, так как каждый раз, когда я хочу воспроизвести один из их сюжетов, мне приходится перезагружать блокнот Юпитера, чтобы сделать это.

Заранее спасибо!

1 Ответ

0 голосов
/ 30 октября 2018

Я столкнулся с той же проблемой, я думаю, что это связано с взаимодействием backtrader с 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')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...