Project Icon

yfinance

Python库实现高效获取雅虎财经市场数据

yfinance是一个Python库,通过线程化方式从雅虎财经API获取市场数据。它能够下载股票信息、历史数据、财务报表、持股情况和分析师推荐等多种数据。yfinance支持处理单个或多个股票代码,提供灵活的数据获取选项。这个库主要用于金融研究和教育目的,使用时需遵守雅虎的相关条款。

从雅虎财经API下载市场数据

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


雅虎!、Y!Finance和雅虎财经是雅虎公司的注册商标。

yfinance与雅虎公司没有任何关联,也未经其认可或审核。它是一个开源工具,使用雅虎公开可用的API,旨在用于研究和教育目的。

关于您使用实际下载数据的权利详情,请参阅雅虎的使用条款这里这里这里)。请记住 - 雅虎财经API仅供个人使用。


Python版本 PyPi版本 PyPi状态 PyPi下载量 Travis-CI构建状态 CodeFactor 为此仓库加星 在Twitter上关注我

yfinance提供了一种多线程且符合Python风格的方式来从雅虎财经下载市场数据。

→ 查看这篇博客文章,获取详细教程和代码示例。

更新日志 »



安装

使用pip安装yfinance

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

使用Conda安装

要安装可选依赖,将optional替换为:nospam用于更智能的抓取repair用于价格修复,或nospam,repair同时安装两者:

$ pip install "yfinance[optional]"

必需依赖所有依赖


快速开始

Ticker模块

Ticker模块允许您以更符合Python风格的方式访问股票数据:

import yfinance as yf

msft = yf.Ticker("MSFT")

# 获取所有股票信息
msft.info

# 获取历史市场数据
hist = msft.history(period="1mo")

# 显示历史数据的元信息(需要先调用history())
msft.history_metadata

# 显示公司行为(股息、拆分、资本利得)
msft.actions
msft.dividends
msft.splits
msft.capital_gains  # 仅适用于共同基金和ETF

# 显示股票数量
msft.get_shares_full(start="2022-01-01", end=None)

# 显示财务报表:
# - 利润表
msft.income_stmt
msft.quarterly_income_stmt
# - 资产负债表
msft.balance_sheet
msft.quarterly_balance_sheet
# - 现金流量表
msft.cashflow
msft.quarterly_cashflow
# 查看`Ticker.get_income_stmt()`了解更多选项

# 显示持股人
msft.major_holders
msft.institutional_holders
msft.mutualfund_holders
msft.insider_transactions
msft.insider_purchases
msft.insider_roster_holders

msfs.sustainability

# 显示推荐
msft.recommendations
msft.recommendations_summary
msft.upgrades_downgrades

# 显示未来和历史盈利日期,默认最多返回未来4个季度和过去8个季度。
# 注意:如果需要更多,请使用msft.get_earnings_dates(limit=XX)并增加limit参数。
msft.earnings_dates

# 显示ISIN代码 - *实验性功能*
# ISIN = 国际证券识别码
msft.isin
# 显示期权到期日
msft.options

# 显示新闻
msft.news

# 获取特定到期日的期权链
opt = msft.option_chain('YYYY-MM-DD')
# 可通过以下方式获取数据:opt.calls, opt.puts

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

import yfinance as yf

msft = yf.Ticker("MSFT")

msft.history(..., proxy="代理服务器")
msft.get_actions(proxy="代理服务器")
msft.get_dividends(proxy="代理服务器")
msft.get_splits(proxy="代理服务器")
msft.get_capital_gains(proxy="代理服务器")
msft.get_balance_sheet(proxy="代理服务器")
msft.get_cashflow(proxy="代理服务器")
msft.option_chain(..., proxy="代理服务器")
...

多个股票代码

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

import yfinance as yf

tickers = yf.Tickers('msft aapl goog')

# 访问每个股票代码(示例)
tickers.tickers['MSFT'].info
tickers.tickers['AAPL'].history(period="1mo")
tickers.tickers['GOOG'].actions

要将价格历史下载到一个表格中:

import yfinance as yf
data = yf.download("SPY AAPL", period="1mo")

yf.download()Ticker.history()有许多选项用于配置获取和处理。查看Wiki了解更多选项和详细信息。

日志记录

yfinance现在使用logging模块处理消息,默认行为仅打印错误。如果调试,请使用yf.enable_debug_mode()切换到带有自定义格式的调试日志。

更智能的爬取

使用pip安装nospam包以实现更智能的爬取(参见安装)。这些包有助于缓存调用,从而避免频繁请求Yahoo。

要使用自定义requests会话,请将session=参数传递给Ticker构造函数。这允许缓存API调用,并通过User-agent头自定义修改请求的方式。

import requests_cache
session = requests_cache.CachedSession('yfinance.cache')
session.headers['User-agent'] = 'my-program/1.0'
ticker = yf.Ticker('msft', session=session)
# 爬取的响应将存储在缓存中
ticker.actions

requests_cache与速率限制结合使用,以避免触发Yahoo的速率限制器/阻止器,从而可能导致数据损坏。

from requests import Session
from requests_cache import CacheMixin, SQLiteCache
from requests_ratelimiter import LimiterMixin, MemoryQueueBucket
from pyrate_limiter import Duration, RequestRate, Limiter
class CachedLimiterSession(CacheMixin, LimiterMixin, Session):
    pass

session = CachedLimiterSession(
    limiter=Limiter(RequestRate(2, Duration.SECOND*5)),  # 每5秒最多2个请求
    bucket_class=MemoryQueueBucket,
    backend=SQLiteCache("yfinance.cache"),
)

管理多级列

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

  • yfinance返回一个带有多级列名的pandas.DataFrame,包括股票代码层和股票价格数据层
    • 回答讨论了:
      • 如何在使用pandas.DataFrame.to_csv将数据框保存为csv后正确读取多级列
      • 如何将单个或多个股票代码下载到具有单级列名和股票代码列的单个数据框中

持久化缓存存储

为了减少对Yahoo的请求,yfinance在本地存储一些数据:用于本地化日期的时区和cookie。缓存位置为:

  • Windows = C:/Users/<用户>/AppData/Local/py-yfinance
  • Linux = /home/<用户>/.cache/py-yfinance
  • MacOS = /Users/<用户>/Library/Caches/py-yfinance

你可以使用set_tz_cache_location()将缓存定向到不同的位置:

import yfinance as yf
yf.set_tz_cache_location("自定义/缓存/位置")
...

开发者:想要贡献吗?

yfinance依靠社区调查错误并贡献代码。开发者指南:https://github.com/ranaroussi/yfinance/discussions/1084


法律声明

yfinanceApache软件许可下分发。有关详细信息,请参阅发布版中的LICENSE.txt文件。

再次声明 - yfinance隶属于Yahoo公司,也未经Yahoo公司认可或审核。它是一个开源工具,使用Yahoo公开可用的API,旨在用于研究和教育目的。你应该参考Yahoo的使用条款(此处此处此处)了解有关你使用实际下载数据的权利的详细信息。


附言

请给我留言,告诉我你的任何反馈。

Ran Aroussi

项目侧边栏1项目侧边栏2
推荐项目
Project Cover

豆包MarsCode

豆包 MarsCode 是一款革命性的编程助手,通过AI技术提供代码补全、单测生成、代码解释和智能问答等功能,支持100+编程语言,与主流编辑器无缝集成,显著提升开发效率和代码质量。

Project Cover

AI写歌

Suno AI是一个革命性的AI音乐创作平台,能在短短30秒内帮助用户创作出一首完整的歌曲。无论是寻找创作灵感还是需要快速制作音乐,Suno AI都是音乐爱好者和专业人士的理想选择。

Project Cover

有言AI

有言平台提供一站式AIGC视频创作解决方案,通过智能技术简化视频制作流程。无论是企业宣传还是个人分享,有言都能帮助用户快速、轻松地制作出专业级别的视频内容。

Project Cover

Kimi

Kimi AI助手提供多语言对话支持,能够阅读和理解用户上传的文件内容,解析网页信息,并结合搜索结果为用户提供详尽的答案。无论是日常咨询还是专业问题,Kimi都能以友好、专业的方式提供帮助。

Project Cover

阿里绘蛙

绘蛙是阿里巴巴集团推出的革命性AI电商营销平台。利用尖端人工智能技术,为商家提供一键生成商品图和营销文案的服务,显著提升内容创作效率和营销效果。适用于淘宝、天猫等电商平台,让商品第一时间被种草。

Project Cover

吐司

探索Tensor.Art平台的独特AI模型,免费访问各种图像生成与AI训练工具,从Stable Diffusion等基础模型开始,轻松实现创新图像生成。体验前沿的AI技术,推动个人和企业的创新发展。

Project Cover

SubCat字幕猫

SubCat字幕猫APP是一款创新的视频播放器,它将改变您观看视频的方式!SubCat结合了先进的人工智能技术,为您提供即时视频字幕翻译,无论是本地视频还是网络流媒体,让您轻松享受各种语言的内容。

Project Cover

美间AI

美间AI创意设计平台,利用前沿AI技术,为设计师和营销人员提供一站式设计解决方案。从智能海报到3D效果图,再到文案生成,美间让创意设计更简单、更高效。

Project Cover

AIWritePaper论文写作

AIWritePaper论文写作是一站式AI论文写作辅助工具,简化了选题、文献检索至论文撰写的整个过程。通过简单设定,平台可快速生成高质量论文大纲和全文,配合图表、参考文献等一应俱全,同时提供开题报告和答辩PPT等增值服务,保障数据安全,有效提升写作效率和论文质量。

投诉举报邮箱: service@vectorlightyear.com
@2024 懂AI·鲁ICP备2024100362号-6·鲁公网安备37021002001498号