Yahoo! Finance-ng python3 / pandas market data downloader
Ever since Yahoo! finance decommissioned their historical data API, many programs that relied on it to stop working.
yfinanceng aimes to solve this problem by offering a reliable, threaded, and Pythonic way to download historical market data from Yahoo! finance.
NOTE
The library was originally named yfinance
, but I've since renamed it to yfinanceng
as I no longer consider it a mere "fix", and the author is not promptly maintaining it or merging PRs.
Quick Start
The Ticker module
The Ticker
module, which allows you to access ticker data in amore Pythonic way:
import yfinanceng as yf
msft = yf.Ticker("MSFT")
# get stock info
msft.info
# get historical market data
hist = msft.history(period="max")
# show actions (dividends, splits)
msft.actions
# show dividends
msft.dividends
# show splits
msft.splits
# show financials
msft.financials
msft.quarterly_financials
# show major holders
msft.major_holders
# show institutional holders
msft.institutional_holders
# show balance heet
msft.balance_sheet
msft.quarterly_balance_sheet
# show cashflow
msft.cashflow
msft.quarterly_cashflow
# show earnings
msft.earnings
msft.quarterly_earnings
# show sustainability
msft.sustainability
# show analysts recommendations
msft.recommendations
# show next event (earnings, etc)
msft.calendar
# show ISIN code - *experimental*
# ISIN = International Securities Identification Number
msft.isin
# show options expirations
msft.options
# get option chain for specific expiration
opt = msft.option_chain('YYYY-MM-DD')
# data available via: opt.calls, opt.puts
If you want to use a proxy server for downloading data, use:
import yfinanceng as yf
msft = yf.Ticker("MSFT")
msft.history(..., proxy="PROXY_SERVER")
msft.get_actions(proxy="PROXY_SERVER")
msft.get_dividends(proxy="PROXY_SERVER")
msft.get_splits(proxy="PROXY_SERVER")
msft.get_balance_sheet(proxy="PROXY_SERVER")
msft.get_cashflow(proxy="PROXY_SERVER")
msgt.option_chain(..., proxy="PROXY_SERVER")
...
To initialize multiple Ticker
objects, use
import yfinanceng as yf
tickers = yf.Tickers('msft aapl goog')
# ^ returns a named tuple of Ticker objects
# access each ticker using (example)
tickers.msft.info
tickers.aapl.history(period="1mo")
tickers.goog.actions
Fetching data for multiple tickers
import yfinanceng as yf
data = yf.download("SPY AAPL", start="2017-01-01", end="2017-04-30")
I've also added some options to make life easier :)
data = yf.download( # or pdr.get_data_yahoo(...
# tickers list or string as well
tickers = "SPY AAPL MSFT",
# use "period" instead of start/end
# valid periods: 1d,5d,1mo,3mo,6mo,1y,2y,5y,10y,ytd,max
# (optional, default is '1mo')
period = "ytd",
# fetch data by interval (including intraday if period < 60 days)
# valid intervals: 1m,2m,5m,15m,30m,60m,90m,1h,1d,5d,1wk,1mo,3mo
# (optional, default is '1d')
interval = "1m",
# group by ticker (to access via data['SPY'])
# (optional, default is 'column')
group_by = 'ticker',
# adjust all OHLC automatically
# (optional, default is False)
auto_adjust = True,
# download pre/post regular market hours data
# (optional, default is False)
prepost = True,
# use threads for mass downloading? (True/False/Integer)
# (optional, default is True)
threads = True,
# proxy URL scheme use use when downloading?
# (optional, default is None)
proxy = None
)
pandas_datareader
override
If your code uses pandas_datareader
and you want to download data faster, you can "hijack" pandas_datareader.data.get_data_yahoo()
method to use yfinanceng while making sure the returned data is in the same format as pandas_datareader's get_data_yahoo()
.
from pandas_datareader import data as pdr
import yfinanceng as yf
yf.pdr_override() # <== that's all it takes :-)
# download dataframe
data = pdr.get_data_yahoo("SPY", start="2017-01-01", end="2017-04-30")
Installation
Install yfinanceng
using pip
:
$ pip install yfinanceng --upgrade --no-cache-dir
Install yfinanceng
using conda
:
$ conda install -c larroy yfinanceng
Requirements
pandas_datareader
)
Optional (if you want to use - pandas_datareader >= 0.4.0
Legal Stuff
yfinanceng is distributed under the Apache Software License. See the LICENSE.txt file in the release for details.
Based on yfinance from Ran Aroussi.