自从雅虎财经停止了他们的历史数据API,许多依赖它的程序停止工作。yfinance
旨在通过提供一种可靠的、线程化的(threaded)、Pythonic的方式从Yahoo! finance下载历史市场数据来解决这个问题。
注:该库最初命名为
fix-yahoo-finance
,但后来作者将其重命名为yfinance
,因为作者不再认为它只是一个“修复”器。出于竞争力落后的原因,fix-yahoo-finance
现在导入并使用yfinance
,但您应该直接安装并使用yfinance
。
可以通过查阅 Blog post 获取更多代码教程。
Ticker
模块
Ticker()
模块可以使我们能以一种更安全更Pythonic的方式获取金融市场数据:
import yfinance as yf
import ssl
ssl._create_default_https_context = ssl._create_unverified_context
msft = yf.Ticker("MSFT")
print(msft)
# get stock info
msft.info
# get historical market data
msft.history(period="max")
# show actions (dividends, splits)
msft.actions
# show dividends
msft.dividends
# show splits
msft.splits
yfinance.Ticker object <MSFT>
Date
1987-09-21 2.0
1990-04-16 2.0
1991-06-27 1.5
1992-06-15 1.5
1994-05-23 2.0
1996-12-09 2.0
1998-02-23 2.0
1999-03-29 2.0
2003-02-18 2.0
Name: Stock Splits, dtype: float64
Available paramaters for the history()
method are:
period: data period to download (Either Use period parameter or use start and end) Valid periods are: 1d, 5d, 1mo, 3mo, 6mo, 1y, 2y, 5y, 10y, ytd, max
interval: data interval (intraday data cannot extend last 60 days) Valid intervals are: 1m, 2m, 5m, 15m, 30m, 60m, 90m, 1h, 1d, 5d, 1wk, 1mo, 3mo
start: If not using period - Download start date string (YYYY-MM-DD) or datetime.
end: If not using period - Download end date string (YYYY-MM-DD) or datetime.
prepost: Include Pre and Post market data in results? (Default is False
)
auto_adjust: Adjust all OHLC automatically? (Default is True
)
actions: Download stock dividends and stock splits events? (Default is True
)
批量下载市场数据:
您也可以像以前一样一次下载多个股票的数据。
import yfinance as yf
data = yf.download("SPY AAPL", start="2017-01-01", end="2017-04-30")
[*********************100%***********************] 2 of 2 completed
例如想要获取股票 SPY收盘价格, 你可以使用: data['Close']['SPY']
.
如果你想通过Symbol
对数据进行分组可以使用:
import yfinance as yf
data = yf.download("SPY AAPL", start="2017-01-01", end="2017-04-30",
group_by="ticker")
[*********************100%***********************] 2 of 2 completed
要获取SPY的收盘价数据,请使用:data['SPY']['Close']
。
当一次下载大量symbols时,download()
方法接受一个额外的参数-threads
以加快完成速度。
注意:为保持与旧版本的兼容性,批量下载时,
auto_adjust
默认为False
。
使用pandas_datareader
:
如果使用的是历史遗留代码并且用的是pandas_datareader
,如果你希望将代码更改保持在最小,则只需调用override
方法并保持代码原样即可:
from pandas_datareader import data as pdr
from pandas.util.testing import assert_frame_equal
import yfinance as yf
yf.pdr_override() # <== 就像这样用 :-)
# download dataframe using pandas_datareader
data = pdr.get_data_yahoo("SPY", start="2017-01-01", end="2017-04-30")
[*********************100%***********************] 1 of 1 completed
安装或升级该库使用:
$ pip install yfinance --upgrade --no-cache-dir
需要注意的是:
可选项(if you want to use pandas_datareader
)
- pandas_datareader >= 0.4.0
参考学习资料:
https://github.com/ranaroussi/yfinance
https://github.com/ranaroussi/yfinance/blob/master/CHANGELOG.rst
总算是找到了之前为什么不能完全复现别人的代码了,没有使用大招yf.pdr_override()
,软件更新提高性能是好事,但是老改参数或语法学习过程还是要查更新说明书才行。