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