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
或补丁。
所以,这最终对我起到了作用:
-
卸载
backtrader
:pip uninstall backtrader
-
安装上述解决方案中提供的补丁:
pip install git+https://github.com/mementum/backtrader.git@0fa63ef4a35dc53cc7320813f8b15480c8f85517#egg=backtrader
-
如有必要,再次安装
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