导入错误无法从“matplotlib.dates”导入名称“警告”

G C*_*Chu 32 matplotlib backtrader

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

我安装的 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()
Run Code Online (Sandbox Code Playgroud)

cam*_*ous 62

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

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

pip uninstall matplotlib  # or conda
pip install matplotlib==3.2.2
Run Code Online (Sandbox Code Playgroud)

  • 这适用于 Python 3.9 吗?就我而言,它不起作用,我无法安装此版本的 matplotlib。 (3认同)

Jos*_*sip 12

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

所以,这最终对我有用:

  1. 卸载backtrader

    pip uninstall backtrader
    
    Run Code Online (Sandbox Code Playgroud)
  2. 安装上述解决方案中提供的补丁:

    pip install git+https://github.com/mementum/backtrader.git@0fa63ef4a35dc53cc7320813f8b15480c8f85517#egg=backtrader
    
    Run Code Online (Sandbox Code Playgroud)
  3. 如果需要,请matplotlib重新安装:

    pip install matplotlib
    
    Run Code Online (Sandbox Code Playgroud)


小智 8

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

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


pti*_*tim 6

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

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

pip install git+https://github.com/mementum/backtrader.git@0fa63ef4a35dc53cc7320813f8b15480c8f85517#egg=backtrader
Run Code Online (Sandbox Code Playgroud)

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

-e git+https://github.com/mementum/backtrader.git@0fa63ef4a35dc53cc7320813f8b15480c8f85517#egg=backtrader
Run Code Online (Sandbox Code Playgroud)

…然后 pip install -r requirements.txt

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

-e git+https://github.com/mementum/backtrader.git@0fa63ef4a35dc53cc7320813f8b15480c8f85517#egg=backtrader
Run Code Online (Sandbox Code Playgroud)

如何从 git 安装


小智 5

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