【问题标题】:ImportError Cannot import name 'warnings' from 'matplotlib.datesImportError 无法从“matplotlib.dates”导入名称“警告”
【发布时间】:2020-12-07 19:46:44
【问题描述】:

Alpaca backtrader plot 问题:我遇到了这个导入问题,发现this article,所以我应用了代码,但同样的问题没有解决。有谁可以帮忙吗?

我安装的 matplotlib 版本是 3.3.1 反向交易者 1.9.76.123 蟒蛇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 backtrader


【解决方案1】:

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

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

【讨论】:

  • 这是唯一适用于 Python 3.9 和 Mac OS X Catalina 的答案。在您的系统上找到 locator.py 并从导入语句中删除“警告”参数。请参阅此答案中上面给出的链接中 Ch4r0n 的帖子。
【解决方案2】:

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

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

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

【讨论】:

  • 这适用于 Python 3.9 吗?就我而言,它不起作用,我无法安装此版本的 matplotlib。
  • PackagesNotFoundError 使用 conda (miniforge/osx-arm)
【解决方案3】:

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

【讨论】:

    【解决方案4】:

    麦克大苏尔 对我来说,只有在以下情况下才有效: 将 python3.9 降级到 python 3.8 然后我降级了 matplotlib==3.2.2

    【讨论】:

      【解决方案5】:

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

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

      【讨论】:

      • 请提供您使用的确切终端命令。记得格式化为代码。
      • pip install matplotlib==3.2.2
      【解决方案6】:

      如上所述,该问题已在 this pull request 中得到解决,并且该补丁是对 master 的最新提交,但自 2019 年 5 月以来一直没有发布。

      你可以像这样安装补丁版本:

      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
      ...
      

      How to install from git

      【讨论】:

      • 这对我也适用于 python 3.9。添加到需求 .txt 的选项是一个很好的提示
      • 这太奇怪了。我安装了完全相同版本的 backtrader,但它仍然给我同样的错误。
      【解决方案7】:

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

      所以,这最终对我有用:

      1. 卸载backtrader:

        pip uninstall backtrader
        
      2. 安装the above solution提供的补丁:

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

        pip install matplotlib
        

      【讨论】:

        【解决方案8】:

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

        pip install matplotlib==3.2.2
        

        我默认使用matplotlib==3.4.x版本出现问题。

        【讨论】:

          【解决方案9】:

          我可以使用 python 3.9 安装 matplotlib==3.2.2。

          我是如何解决这个问题的:

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

          参考: Github: Fix ImportError from matplotlib.dates #418

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2022-01-22
            • 2021-06-30
            • 2020-10-19
            • 2018-08-13
            • 2015-01-26
            • 2020-10-10
            • 2020-02-12
            • 2021-11-27
            相关资源
            最近更新 更多