我正试图用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行,incerebro.run((文件"C: \Users\risha\anaconda3\lib\site-packages\backtrader\cebiro.py";,线路1127,运行中runstrat=self.runstrategies(iterstrat(文件"C: \Users\risha\anaconda3\lib\site-packages\backtrader\cebiro.py";,第1210行,运行策略中数据_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行,起始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:[Erno 2]没有这样的文件或目录:'SPY'
我对为什么会发生这种情况感到困惑。我也尝试过在Cebro中添加一个策略来运行它,但这仍然导致了同样的错误。有人能帮我解决这个问题吗?
我确实找到了解决方案。如果你使用,代码:
import yfinance as yf
data = bt.feeds.PandasData(dataname=yf.download('SPY', '2015-07-06', '2021-07-01', auto_adjust=True))
这将允许您从网上获取任何股票行情的数据。您还必须使用:
pip install yfinance
在运行此代码之前。
Yahoo!金融结构略有变化现在需要http请求上的数据检索头。由于backtrader有一个";旧版本";在yahoo.py的第271行,您需要添加标题。一旦完成效果良好。
熊猫也是如此;pandas数据读取器,如果你使用它,你需要升级它。(已经排序(
对于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
祝你今天过得愉快。
尝试升级您的backtrader。7月3日有一个新版本。我确实更新了它,但它仍然不起作用。问题是它没有bt.feed.YahooFinance,以正确的格式获取数据。这是一个新的bug。。。我也在等他们把它修好。