运行Backtrader官方示例报Yahoo Finance数据源FileNotFoundError如何解决
报错原因
Backtrader 官方内置的 YahooFinanceData 数据源依赖的雅虎财经公开API早已下线,旧版数据源发起网络请求失败后会默认回退到本地读取对应股票代码的CSV文件,因此会抛出找不到AAPL文件的错误,和本地文件配置无关。
修复方案(无需修改Backtrader源码)
优先使用当前稳定维护的雅虎数据工具yfinance拉取数据,再转成Backtrader可识别的Pandas格式数据源即可,步骤如下:
- 第一步:安装依赖库
pip install yfinance
- 第二步:替换原有数据源加载逻辑,完整可运行代码如下:
from datetime import datetime import backtrader as bt import yfinance as yf class SmaCross(bt.SignalStrategy): def __init__(self): sma1, sma2 = bt.ind.SMA(period=10), bt.ind.SMA(period=30) crossover = bt.ind.CrossOver(sma1, sma2) self.signal_add(bt.SIGNAL_LONG, crossover) cerebro = bt.Cerebro() cerebro.addstrategy(SmaCross) # 替换原有YahooFinanceData加载逻辑 df = yf.download('AAPL', start='2011-01-01', end='2012-12-31') data0 = bt.feeds.PandasData(dataname=df) cerebro.adddata(data0) cerebro.run() cerebro.plot()
额外说明
- 如果需要使用复权后价格回测,拉取数据时可以添加
auto_adjust=True参数:df = yf.download('AAPL', start='2011-01-01', end='2012-12-31', auto_adjust=True),即可自动处理除权除息的价格偏差。 - 如果网络环境无法正常访问雅虎服务,拉取数据时可指定代理参数:
df = yf.download('AAPL', start='2011-01-01', end='2012-12-31', proxy='http://你的代理地址:端口')。
内容的提问来源于stack exchange,提问作者Andrei Larion
相关产品推荐
相关产品推荐

