跳转到主内容
极星编程网:以代码为星,赴技术山海!

Python中如何快速获取股票历史数据分析_使用yfinance或Tushare接口

yfinance获取美股/港股历史行情最简路径是用download()方法,如yf.download("AAPL", start="2023-01-01", end="2024-01-01"),支持auto_adjust=True前复权,但港股支持不稳定,A股基本不可靠。 用 yfinance 获取美股/港股历史行情最简路径 yfinance 是纯 Python 实现、无需申请 token、开箱即用的方案,适合快速验证或小规模分析。它本质是绕过 Yahoo Finance 官方 API,直接解析网页数据,因此对 A 股支持有限(部分股票代码能查,但不稳定)。 关键点在于:
download()
比
history()
更省心——前者自动处理时区、分割调整、缺失填充,后者返回原始 OHLCV 数据但不自动修正复权(除非显式传
auto_adjust=True
)。 获取苹果日线:
yf.download("AAPL", start="2023-01-01", end="2024-01-01")
想保留前复权价格:加参数
auto_adjust=True
;要后复权则用
back_adjust=True
注意时区:
download()
默认返回 UTC 时区的 DatetimeIndex,本地分析前建议
.tz_localize(None)
或
.tz_convert("Asia/Shanghai")
常见报错
HTTPError 404
多因代码拼错(如用
"600519.SS"
查茅台,实际应为
"600519.SS"
—— 但 yfinance 对 A 股支持差,大概率返回空 DataFrame) Tushare 获取 A 股全量历史数据的硬性前提 Tushare 需要注册获取
token
,且免费版调用频率受限(180次/分钟),但数据质量高、字段全、A 股覆盖完整。真正卡住新手的不是代码,而是 token 配置和权限开通。 注册后必须去「个人中心 → 接口权限」手动开通
pro_api
权限,否则调用
pro_api(token)
会静默失败(返回空对象,无报错) 首次使用需执行
ts.set_token("your_token_here")
,之后用
pro = ts.pro_api()
;若跳过 set_token,
pro.query("daily", ...)
直接抛
AttributeError: 'NoneType' object has no attribute 'query'
A 股代码格式严格:6位数字 + 交易所后缀,如
"000001.SZ"
(平安银行)、
"600519.SH"
(贵州茅台),漏掉后缀或写成
"600519"
会导致查不到数据 批量下载多只股票时,避免循环调用
pro.daily()
,改用
pro.trade_cal()
先取交易日历,再用
pro.daily(trade_date="20230101")
分日期拉取,更稳定且不易触发限流 yfinance 和 Tushare 的数据差异在哪 表面都是 OHLCV,但底层逻辑不同:yfinance 的“开盘价”是 Yahoo 页面显示值,未经交易所确认;Tushare 的
daily
表来自交易所官方接口,含
pre_close
(昨收)、
change
(涨跌额)、
pct_chg
(涨跌幅)等衍生字段,且分红送股信息可查
dividend
表。 Python 3.14.3 微软官方的 Python 扩展,是 VS Code 安装量最高的扩展(209M+)。集成 IntelliSense(通过 Pylance)、调试(通过 Python Debugger)、代码检查、格式化、重构和单元测试等功能。支持 Jupyter Notebook、虚拟环境管理和多 Python 版本切换。 下载 立即学习 “ Python免费学习笔记(深入) ”; yfinance 不提供成交额(
amount
)、换手率、市盈率等基本面字段;Tushare 的
daily_basic
表可补全这些 复权方式:yfinance 的
auto_adjust
是简单前复权(仅除权除息),Tushare 的
adj_factor
字段支持自定义复权计算,更灵活 停牌处理:yfinance 在停牌日仍返回前一日收盘价(伪数据);Tushare 的
daily
表中停牌日
trade_date
存在但
close
为 NaN,真实反映市场状态 遇到 “No data found for this date range” 怎么排查 这个错误在两个库中都高频出现,但原因完全不同,不能一概而论。 yfinance:先检查代码是否有效(如
"BABA"
可用,
"BABA.HK"
大概率失败),再确认日期是否为交易日(Yahoo 不返回非交易日数据,且美股假期多,用
yf.Ticker("AAPL").calendar
可查最近财报日,侧面验证连通性) Tushare:重点看
trade_date
格式——必须是 8 位字符串(
"20230101"
),不能是 datetime 或带横杠的
"2023-01-01"
;另外免费用户无法访问 2018 年以前数据,若请求
start_date="20100101"
就会静默截断 通用技巧:用
pro.query("stock_basic", exchange="", list_status="L")
先拉一次上市股票列表,确认目标代码确实在库中,比盲试高效得多 数据源的边界条件比语法更重要:yfinance 的“可用性”取决于 Yahoo 页面是否渲染该股票,Tushare 的“可得性”取决于你开通的权限等级和调用时间窗口。别在报错信息里找答案,先去源头确认数据是否存在。

相关文章