【问题标题】:Getting data in Backtrader issue在 Backtrader 问题中获取数据
【发布时间】:2021-09-14 16:32:48
【问题描述】:

我正在尝试用 Python 编写 Backtrader 的回测策略,下面是给我错误的代码。我正在使用截至 2021 年 7 月 2 日的最新版本的 backtrader。

import backtrader as bt
import backtrader.feeds as btfeeds
from datetime import datetime

cerebro = bt.Cerebro()
cerebro.broker.setcash(100000)
data = btfeeds.YahooFinanceData(dataname="SPY", fromdate=datetime(2016, 6, 25), 
todate=datetime(2021, 6, 25))
cerebro.adddata(data)
cerebro.run()

我得到的错误是

Traceback(最近一次调用最后一次):文件 "c:\Users\risha\PycharmProjects\PythonDataScience\BacktraderBacktesting\TestingData.py", 第 9 行,在 cerebro.run() 文件 "C:\Users\risha\anaconda3\lib\site-packages\backtrader\cerebro.py", 第 1127 行,运行中 runstrat = self.runstrategies(iterstrat) 文件 "C:\Users\risha\anaconda3\lib\site-packages\backtrader\cerebro.py", 第 1210 行,在运行策略中 data._start() 文件“C:\Users\risha\anaconda3\lib\site-packages\backtrader\feed.py”,行 203,在_开始 self.start() 文件 "C:\Users\risha\anaconda3\lib\site-packages\backtrader\feeds\yahoo.py", 第 355 行,开始 super(YahooFinanceData, self).start() 文件 "C:\Users\risha\anaconda3\lib\site-packages\backtrader\feeds\yahoo.py", 第 94 行,开始 super(YahooFinanceCSVData, self).start() 文件“C:\Users\risha\anaconda3\lib\site-packages\backtrader\feed.py”,行 674,开始 self.f = io.open(self.p.dataname, 'r') FileNotFoundError: [Errno 2] 没有这样的文件或目录:'SPY'

我对为什么会发生这种情况感到困惑。我也尝试通过在 Cebro 中添加策略来运行它,但这仍然会导致相同的错误。有人可以帮我解决这个问题吗?

【问题讨论】:

标签: python backtrader


【解决方案1】:

我实际上找到了解决方案。如果使用,代码:

import yfinance as yf

data = bt.feeds.PandasData(dataname=yf.download('SPY', '2015-07-06', '2021-07-01', auto_adjust=True))

这将允许您从在线获取任何代码的数据。您还必须使用:

pip install yfinance

在运行此代码之前。

【讨论】:

    【解决方案2】:

    雅虎!金融业的结构略有改变。 现在需要标头,以便在 http 请求上检索数据。由于 backtrader 在第 271 行有一个“旧版本”的 yahoo.py,您需要添加标题。完成后工作正常。

    pandas 和 pandas-datareader 也会发生这种情况,如果你使用它,你需要升级它们。 (已经排序)

    对于 yahoo.py 第 271 行中的 Backtrader:

     crumb = None
     sess = requests.Session()
     ## ADD HEADERS
     sess.headers['User-Agent'] = 'backtrader'
     ## END HERE
     for i in range(self.p.retries + 1):  # at least once
         resp = sess.get(url, **sesskwargs)
         if resp.status_code != requests.codes.ok:
                
    

    这里有 yahoo.py changes 的原始链接。

    backtrader 可能很快就会启动升级。

    对于 Pandas 和 Pandas-DataReader

    pip install --upgrade pandas
    pip install --upgrade pandas-datareader
    

    祝你有美好的一天;)。

    【讨论】:

      【解决方案3】:

      尝试升级您的反向交易者。 7 月 3 日有一个新版本。我确实更新了它,但它仍然无法正常工作。 问题是它没有 bt.feed.YahooFinance,以正确的格式获取数据。这是一个新错误...我也在等待他们修复它。

      【讨论】:

      • 我手动修复了我的。所以在 dataname=.. 中手动下载和上传文件而不是“SPY”
      • 这可能最好作为评论而不是答案。
      猜你喜欢
      • 2022-08-19
      • 2018-12-07
      • 2021-06-02
      • 2021-07-18
      • 1970-01-01
      • 2013-04-17
      • 1970-01-01
      • 2013-06-29
      • 1970-01-01
      相关资源
      最近更新 更多