在 Backtrader 问题中获取数据
Getting data in Backtrader issue
我正在尝试在 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 (most recent call last): File
"c:\Users\risha\PycharmProjects\PythonDataScience\BacktraderBacktesting\TestingData.py",
line 9, in
cerebro.run() File "C:\Users\risha\anaconda3\lib\site-packages\backtrader\cerebro.py",
line 1127, in run
runstrat = self.runstrategies(iterstrat) File "C:\Users\risha\anaconda3\lib\site-packages\backtrader\cerebro.py",
line 1210, in runstrategies
data._start() File "C:\Users\risha\anaconda3\lib\site-packages\backtrader\feed.py", line
203, in _start
self.start() File "C:\Users\risha\anaconda3\lib\site-packages\backtrader\feeds\yahoo.py",
line 355, in start
super(YahooFinanceData, self).start() File "C:\Users\risha\anaconda3\lib\site-packages\backtrader\feeds\yahoo.py",
line 94, in start
super(YahooFinanceCSVData, self).start() File "C:\Users\risha\anaconda3\lib\site-packages\backtrader\feed.py", line
674, in start
self.f = io.open(self.p.dataname, 'r') FileNotFoundError: [Errno 2] No such file or directory: 'SPY'
我很困惑为什么会这样。我也通过在 Cebro 中添加一个策略来尝试 运行 ,但这仍然导致了同样的错误。有人可以帮我解决这个问题吗?
尝试升级您的 backtrader。 7 月 3 日有一个新版本。我确实更新了它,但它仍然不起作用。
问题是它没有bt.feed.YahooFinance,以正确的格式获取数据。这是一个新的错误...我也在等待他们修复它。
我真的想出了解决办法。如果使用,代码:
import yfinance as yf
data = bt.feeds.PandasData(dataname=yf.download('SPY', '2015-07-06', '2021-07-01', auto_adjust=True))
这将允许您从网上获取任何代码的数据。您还必须使用:
pip install yfinance
在你 运行 这个代码之前。
雅虎!财务略微改变了他们的结构。 现在需要 headers 用于 http 请求的数据检索。由于 backtrader 在第 271 行有一个 yahoo.py 的“旧版本”,您需要添加 headers。完成后效果很好。
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 的原始 link。
估计 backtrader 很快就会推出升级。
对于Pandas和Pandas-DataReader
pip install --upgrade pandas
pip install --upgrade pandas-datareader
祝你有愉快的一天 ;).
我正在尝试在 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 (most recent call last): File "c:\Users\risha\PycharmProjects\PythonDataScience\BacktraderBacktesting\TestingData.py", line 9, in cerebro.run() File "C:\Users\risha\anaconda3\lib\site-packages\backtrader\cerebro.py", line 1127, in run runstrat = self.runstrategies(iterstrat) File "C:\Users\risha\anaconda3\lib\site-packages\backtrader\cerebro.py", line 1210, in runstrategies data._start() File "C:\Users\risha\anaconda3\lib\site-packages\backtrader\feed.py", line 203, in _start self.start() File "C:\Users\risha\anaconda3\lib\site-packages\backtrader\feeds\yahoo.py", line 355, in start super(YahooFinanceData, self).start() File "C:\Users\risha\anaconda3\lib\site-packages\backtrader\feeds\yahoo.py", line 94, in start super(YahooFinanceCSVData, self).start() File "C:\Users\risha\anaconda3\lib\site-packages\backtrader\feed.py", line 674, in start self.f = io.open(self.p.dataname, 'r') FileNotFoundError: [Errno 2] No such file or directory: 'SPY'
我很困惑为什么会这样。我也通过在 Cebro 中添加一个策略来尝试 运行 ,但这仍然导致了同样的错误。有人可以帮我解决这个问题吗?
尝试升级您的 backtrader。 7 月 3 日有一个新版本。我确实更新了它,但它仍然不起作用。 问题是它没有bt.feed.YahooFinance,以正确的格式获取数据。这是一个新的错误...我也在等待他们修复它。
我真的想出了解决办法。如果使用,代码:
import yfinance as yf
data = bt.feeds.PandasData(dataname=yf.download('SPY', '2015-07-06', '2021-07-01', auto_adjust=True))
这将允许您从网上获取任何代码的数据。您还必须使用:
pip install yfinance
在你 运行 这个代码之前。
雅虎!财务略微改变了他们的结构。 现在需要 headers 用于 http 请求的数据检索。由于 backtrader 在第 271 行有一个 yahoo.py 的“旧版本”,您需要添加 headers。完成后效果很好。
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 的原始 link。
估计 backtrader 很快就会推出升级。
对于Pandas和Pandas-DataReader
pip install --upgrade pandas
pip install --upgrade pandas-datareader
祝你有愉快的一天 ;).