ImportError 无法从 'matplotlib.dates 导入名称'warnings'



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

我安装的matplotlib版本是3.3.1反向交易者1.9.76.123python 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()

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

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

pip uninstall matplotlib  # or conda
pip install matplotlib==3.2.2

我和你一样遇到了同样的问题,你提供的链接有完美的解决方案。从locator.py中去掉warnings

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

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

所以,这最终对我起到了作用:

  1. 卸载backtrader:

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

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

    pip install matplotlib
    

如上所述,这个问题在这个拉取请求中得到了解决,该补丁是向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 安装

Mac Big Sur对我来说,它只有在以下情况下才有效:将python 3.9降级为python 3.8然后我降级了matplotlib==3.2.2

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

pip install matplotlib==3.2.2

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

以上所有答案都很好。问题是Matplotlib而不是Backtrader库没有跟上Matplotlib的更新。您可以执行上面Joel Brigate建议的标签外Backtrader更新。。。或者您可以对locator.py文件(backtrader.plot(进行简单的修改:

只需更改:

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, warnings)

至:

from matplotlib import warnings
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)

您会注意到,warnings导入现在直接来自matplotlib,而不是matplotlib.dates。这是locator.py中的问题。

这是我的解决方案:

python -m pip uninstall matplotlib
python -m pip uninstall backtrader
python -m pip install backtrader
python -m pip install matplotlib==3.2.2

享受吧!

我可以使用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中的ImportError#418

Mac Big Sur。我也这么做了:python 3.8.5,卸载matplotlib,安装matplotlib==3.2.2

我是新手,所以我第一次尝试了简单的方法,通过anaconda.org,但找不到3.2.2版本。然后在安装了conda的Jupyter笔记本上试用。。。没用。我终于直接通过终点站完成了,效果很好。

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

在使用苹果硅CPU的Mac中安装freetype后,我能够安装matplotlib==3.2.2。

brew install freetype
# then
pip install matplotlib==3.2.2 
# finally
pip install backtrader

最新更新