40

Alpaca backtrader plot issue:我遇到了这个导入问题并找到了这篇文章,所以我应用了代码,但同样的问题没有解决。有人可以帮忙吗?

我安装的 matplotlib 版本是 3.3.1 backtrader 1.9.76.123 python 3.8.5

整个代码贴在下面:

from matplotlib.dates 

import (HOURS_PER_DAY, MIN_PER_HOUR, SEC_PER_MIN,MONTHS_PER_YEAR, 
        DAYS_PER_WEEK,SEC_PER_HOUR, SEC_PER_DAY,num2date, rrulewrapper, 
        YearLocator,MicrosecondLocator)

import alpaca_backtrader_api

import backtrader as bt

from datetime import datetime

#import matplotlib
ALPACA_API_KEY = "XXXXX"

ALPACA_SECRET_KEY = "XXXX"

ALPACA_PAPER = True

class SmaCross(bt.SignalStrategy):

def init(self):

sma1, sma2 = bt.ind.SMA(period=10), bt.ind.SMA(period=30)

crossover = bt.ind.CrossOver(sma1, sma2)

self.signal_add(bt.SIGNAL_LONG, crossover)

cerebro = bt.Cerebro()

cerebro.addstrategy(SmaCross)

store = alpaca_backtrader_api.AlpacaStore( key_id=ALPACA_API_KEY,secret_key=ALPACA_SECRET_KEY,paper=ALPACA_PAPER)

if not ALPACA_PAPER:
  
  broker = store.getbroker() # or just alpaca_backtrader_api.AlpacaBroker()
  
  cerebro.setbroker(broker)
  
  DataFactory = store.getdata # or use alpaca_backtrader_api.AlpacaData
  
  data0 = DataFactory(dataname='AAPL', historical=True, fromdate=datetime(2015, 1, 1), timeframe=bt.TimeFrame.Days)
  
  cerebro.adddata(data0)
  
  print('Starting Portfolio Value: %.2f' % cerebro.broker.getvalue())
  
  cerebro.run()
  
  print('Final Portfolio Value: %.2f' % cerebro.broker.getvalue())
  
  cerebro.plot()
4

9 回答 9

80

降级到 matplotlib 3.2.2,直到 backtrader 中的错误得到修复。

这是修复拉取请求:https ://github.com/mementum/backtrader/pull/418 。

pip uninstall matplotlib  # or conda
pip install matplotlib==3.2.2
于 2020-09-19T23:58:57.190 回答
13

我遇到了和你一样的问题,你提供的链接有完美的解决方案。warnings只是摆脱locator.py

https://community.backtrader.com/topic/981/importerror-cannot-import-name-min_per_hour-when-trying-to-plot/8

于 2020-08-20T12:52:58.787 回答
6

如上所述,此拉取请求中解决了该问题,并且该补丁是对 master 的最新提交,但自 2019-05 以来一直没有发布。

您可以像这样安装修补版本:

pip install git+https://github.com/mementum/backtrader.git@0fa63ef4a35dc53cc7320813f8b15480c8f85517#egg=backtrader

您也可以在 requirements.txt 中指定所需的提交,如下所示:

-e git+https://github.com/mementum/backtrader.git@0fa63ef4a35dc53cc7320813f8b15480c8f85517#egg=backtrader

…然后pip install -r requirements.txt

使用任一方法安装后,您可以确认安装的版本pip freeze

...
backtrader==1.9.76.123
...

如何从 git 安装

于 2021-03-30T13:20:07.077 回答
5

Mac Big Sur 对我来说只有在以下情况下才有效: 将 python3.9 降级到 python 3.8 然后我将 matplotlib==3.2.2 降级

于 2021-01-06T20:23:25.327 回答
5

如果不先卸载,我无法安装matplotlib==3.2.2或补丁backtrader

所以,这最终对我有用:

  1. 卸载backtrader

    pip uninstall backtrader
    
  2. 安装上述解决方案中提供的补丁:

    pip install git+https://github.com/mementum/backtrader.git@0fa63ef4a35dc53cc7320813f8b15480c8f85517#egg=backtrader
    
  3. 如有必要,matplotlib重新安装:

    pip install matplotlib
    
于 2021-05-28T13:53:38.323 回答
3

对于 python 3.8.x 和 3.9.x,我通过使用特定版本的 matplotlib==3.2.2 解决了这个问题

pip install matplotlib==3.2.2

默认情况下,我使用 matplotlib==3.4.x 版本,问题就出现了。

于 2021-07-02T16:17:40.493 回答
1

我无法使用python 3.9安装 matplotlib==3.2.2 。

这是我如何解决此问题的方法:

$ pip uninstall backtrader
$ pip install git+https://github.com/mementum/backtrader.git@0fa63ef4a35dc53cc7320813f8b15480c8f85517#egg=backtrader

参考: Github:修复来自 matplotlib.dates #418 的 ImportError

于 2021-12-11T21:42:34.830 回答
0

麦克大苏尔。我也是这样做的:python 3.8.5,卸载 matplotlib,安装 matplotlib==3.2.2

我是新手,所以我首先通过 anaconda.org 尝试了简单的方法,但找不到 3.2.2 版本。然后使用 conda install 从 Jupyter notebook 尝试它......没有用。我终于通过终端直接完成了,效果很好。

于 2021-03-15T00:55:29.647 回答
0

@laffuste 降级到 matplotlib 版本 3.2.2 的解决方案为我解决了这个问题。修复问题的 PR 仍然开放,您也可以关注此论坛以获取有关该问题的更多信息:

于 2020-12-30T05:18:14.023 回答