簡體   English   中英

在 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()

我得到的錯誤是

回溯(最近一次調用):文件“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 行, 在 runstrategies 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 行, 在開始 self.f = io.open(self.p.dataname, 'r') FileNotFoundError: [Errno 2] No such file or directory: 'SPY'

我很困惑為什么會這樣。 我也嘗試通過在 Cebro 中添加策略來運行它,但這仍然導致相同的錯誤。 有人可以幫我解決這個問題嗎?

我實際上想出了解決方案。 如果使用,代碼:

data = bt.feeds.PandasData(dataname=yf.download('SPY', '2015-07-06', '2021-07-01', auto_adjust=True)) 這將允許您從在線獲取任何代碼的數據。 在運行此代碼之前,您還必須使用 pip install yfinance。

嘗試升級您的 backtrader。 7 月 3 日有一個新版本。 我確實更新了它,但它仍然不起作用。 問題在於它沒有 bt.feed.YahooFinance,以正確的格式獲取數據。 這是一個新錯誤......我也在等待他們修復它。

雅虎! 財務結構略有改變。 現在需要在 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

祝你今天過得愉快 ;)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM