2

我正在尝试用 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 行,在 _start self.start() 文件“C:\Users\risha \anaconda3\lib\site-packages\backtrader\feeds\yahoo.py”,第 355 行,在 start super(YahooFinanceData, self).start() 文件“C:\Users\risha\anaconda3\lib\site-packages\ backtrader\feeds\yahoo.py",第 94 行,在 start super(YahooFinanceCSVData, self).start() 文件中"C:\Users\risha\anaconda3\lib\site-packages\backtrader\feed.py",第 674 行,在 start self.f = io.open(self.p.dataname, 'r') FileNotFoundError: [Errno 2 ] 没有这样的文件或目录:'SPY'

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

4

3 回答 3

3

我实际上想出了解决方案。如果你使用,代码:

import yfinance as yf

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

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

pip install yfinance

在运行此代码之前。

于 2021-07-05T16:18:34.780 回答
1

雅虎!金融业的结构略有改变。现在需要对 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更改的原始链接。

可能 backtrader 将很快推出升级。

对于 Pandas 和 Pandas-DataReader

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

祝你今天过得愉快 ;)。

于 2021-07-19T06:01:36.510 回答
0

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

于 2021-07-04T17:55:32.843 回答