Skip to main content

从雅虎下载市场数据!金融API

项目描述

从雅虎下载市场数据!金融API

*** 重要的法律免责声明 ***


Yahoo!、Y!Finance 和 Yahoo! Finance 是 Yahoo, Inc. 的注册商标。

yfinance不受雅虎公司的附属、认可或审查。它是一个使用雅虎公开可用 API 的开源工具,旨在用于研究和教育目的。

您应该参考 Yahoo! 的使用条款此处此处此处,以了解有关您使用下载的实际数据的权利的详细信息。记住 - 雅虎!财务 API 仅供个人使用。


蟒蛇版本 派皮版本 PyPi 状态 PyPi 下载 Travis-CI 构建状态 代码因子 为这个 repo 加注星标 在推特上关注我

yfinance提供了一种线程化和 Pythonic 的方式来从Yahoo!Ⓡ Finance下载市场数据。

→ 查看此博客文章以获取包含代码示例的详细教程。

变更日志 »


快速开始

代码模块

Ticker模块允许您以更 Pythonic 的方式访问代码数据:

注意:yahoo Finance 日期时间以 UTC 格式接收。

import yfinance 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 sheet
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 all earnings dates
msft.earnings_dates

# show ISIN code - *experimental*
# ISIN = International Securities Identification Number
msft.isin

# show options expirations
msft.options

# show news
msft.news

# get option chain for specific expiration
opt = msft.option_chain('YYYY-MM-DD')
# data available via: opt.calls, opt.puts

如果要使用代理服务器下载数据,请使用:

import yfinance 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")
msft.option_chain(..., proxy="PROXY_SERVER")
...

要使用自定义requests会话(例如缓存对 API 的调用或自定义User-agent标头),session=请将参数传递给 Ticker 构造函数。

import requests_cache
session = requests_cache.CachedSession('yfinance.cache')
session.headers['User-agent'] = 'my-program/1.0'
ticker = yf.Ticker('msft aapl goog', session=session)
# The scraped response will be stored in the cache
ticker.actions

要初始化多个Ticker对象,请使用

import yfinance as yf

tickers = yf.Tickers('msft aapl goog')
# ^ returns a named tuple of Ticker objects

# access each ticker using (example)
tickers.tickers.MSFT.info
tickers.tickers.AAPL.history(period="1mo")
tickers.tickers.GOOG.actions

获取多个代码的数据

import yfinance as yf
data = yf.download("SPY AAPL", start="2017-01-01", end="2017-04-30")

我还添加了一些选项让生活更轻松 :)

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
    )

管理多级列

Stack Overflow 上的以下答案是关于如何处理使用 yfinance 下载的多级列名?

  • yfinance返回pandas.DataFrame具有多级列名称的 a,其中一个级别代表股票代码,一个级别代表股票价格数据
    • 答案讨论:
      • 将数据框保存到 csv 后如何正确读取多级列pandas.DataFrame.to_csv
      • 如何将单个或多个代码下载到具有单级列名称和代码列的单个数据框中

pandas_datareader覆盖

如果您的代码使用pandas_datareader并且您想更快地下载数据,您可以“劫持”pandas_datareader.data.get_data_yahoo() 方法来使用yfinance,同时确保返回的数据与pandas_datareader的格式相同get_data_yahoo()

from pandas_datareader import data as pdr

import yfinance 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")

安装

yfinance使用安装pip

$ pip install yfinance --upgrade --no-cache-dir

要安装yfinance使用conda,请参阅

要求

可选(如果你想使用pandas_datareader


法律资料

yfinance是根据Apache 软件许可证分发的。有关详细信息,请参阅发行版中的LICENSE.txt文件。

再次 - yfinance不受Yahoo, Inc. 的附属、认可或审查。它是一个使用 Yahoo 公开可用 API 的开源工具,旨在用于研究和教育目的。您应该参考 Yahoo! 的使用条款(此处此处此处),了解您使用下载的实际数据的权利的详细信息。


附言

如果您有任何反馈,请给我留言。

冉阿鲁西