阶段4数据获取●●●●●

yfinance:美股与全球市场的免费入场券

我的掌握程度:
q-323精讲

先掌握这个答案

基本用法:yf.download('AAPL', start=..., auto_adjust=False)——支持股票/ETF/指数/汇率/加密。关键坑:auto_adjust参数——默认True返回已复权价(分红调整进价格);若你以为拿到的是原始价再自己复权=双重复权错误——研究收益用默认True即可、需要真实历史价格时显式关掉。与中国源差异:无涨跌停(回测约束可放宽但熔断另计)、T+0(融资约束不同)、时间戳是美东时间(对齐时区)。跨市场三注意:①交易日历不同(节假日差异——对齐用交集日历);②会计制度(财务字段口径差异——跨市场财务因子要谨慎);③货币(收益含汇率暴露——隔离它或对冲它)。

先读结论,再核对下方使用边界;数字例题为教学情景,涉及实际行情与规则时请核对原始来源。

从理解到使用

填充前先解释为什么缺失

停牌、未披露、窗口不足、接口失败应分别标记。沿用上一值不等于当日可交易;bfill可能把未来信息带回过去。中位数填充也会改变分布,需在训练范围内估计并做敏感性比较。

本阶段实战方法 · 一条能复现的数据流水线

把接口返回的数据变成可用于因子研究的面板时,先处理时点、主键与单位。

  1. 建立数据字典:字段、单位、时区、交易日历、数据源、抓取时间、原始价与复权因子。
  2. 用(date, code)查重,区分停牌、未上市、窗口不足和真实缺失;不要用向后填充把未来值带回过去。
  3. 保存原始快照与清洗日志,固定随机种子和环境版本;接口字段变化时先核对官方文档。

使用边界

  • 报告期不等于公告可用日,盘后公告通常不能用于当天收盘前决策。
  • API输出名为“动态市盈率”时不能直接改名TTM;浏览器练习不支持任意原生库或行情抓取接口。
背景 · 从一个困惑说起
想验证「动量在美股更强」这类跨市场假设?yfinance(非官方的雅虎财经接口)一张免费入场券:一行代码拉苹果十年日线。它也是本课程「跨市场验证」环节的默认工具。
由此产生的问题
yfinance的基本用法与数据口径(auto_adjust的坑)?它与中国数据源的差异(无涨跌停/T+1假设不适用)?跨市场研究的三个注意?
核心概念
基本用法:yf.download('AAPL', start=..., auto_adjust=False)——支持股票/ETF/指数/汇率/加密。关键坑:auto_adjust参数——默认True返回已复权价(分红调整进价格);若你以为拿到的是原始价再自己复权=双重复权错误——研究收益用默认True即可、需要真实历史价格时显式关掉。与中国源差异:无涨跌停(回测约束可放宽但熔断另计)、T+0(融资约束不同)、时间戳是美东时间(对齐时区)。跨市场三注意:①交易日历不同(节假日差异——对齐用交集日历);②会计制度(财务字段口径差异——跨市场财务因子要谨慎);③货币(收益含汇率暴露——隔离它或对冲它)。
为什么需要它
①假设的跨国检验:A股结论移植前先在美股跑一遍(q-406动量的地域差异)——避免把本地规律当普适真理;②口径意识的进阶:复权/时区/货币三重口径问题在同一接口里相遇——处理它们是数据素养的综合练习;③策略素材:跨市场价差、ADR折溢价、全球动量轮动——多市场数据打开策略空间。
实际应用场景
标准动作:yf.download(['AAPL','SPY'], auto_adjust=True)算收益直接可用;跨市场对齐用两列日期的交集;研究美股动量:12-1动量构造(q-406)在SPY成分或大票池复现。
与之前知识的联系
q-321(akshare)的国际分部;q-050(三市场规则对比)的数据实操;q-406/407(动量反转)的跨市场验证工具。
⚠ 常见误解
  • yfinance的收盘价是交易所原始价:默认auto_adjust=True给的是复权价——要原始价显式设False并知道自己为什么
  • 美股策略可以直接搬A股代码:涨跌停/T+1/印花税约束全部不同——约束层必须重写(q-050的实操面)
  • 跨市场收益直接可比:含汇率与时段错位——对齐日历、隔离货币后再比

🤖 AI导师

导师会先检查你的前置知识(akshare使用、复权),再用案例、公式和代码帮助理解。此功能需要先启用服务。