第1章:yfinance入门——从零开始拉取美股数据
做量化交易,第一步就是搞定数据。没有数据,再牛的策略也是纸上谈兵。
今天咱们聊聊 yfinance 这个库。说实话,我入行那会儿,拉美股数据还得手动爬雅虎财经的页面,又慢又容易挂。后来发现 yfinance 这个神器,简直像捡到宝一样。
1.1 yfinance 是什么?
yfinance 是一个 Python 库,专门用来从 Yahoo Finance 获取金融数据。它免费、轻量、API 设计得很人性化。
我个人习惯把它叫做「数据水龙头」——拧开就有水,不用自己打井。
核心特点:
- 免费开源,社区活跃
- 支持美股、港股、A股(部分)
- 一行代码就能拿到历史行情
- 自动处理股票分割、分红调整
安装也很简单:
pip install yfinance
嗯,就这一句。我当年第一次跑通的时候,还愣了几秒——就这么简单?
1.2 获取单只股票历史数据
先拿苹果公司(AAPL)练手。这是最基础的操作,也是你以后每天都会用到的。
import yfinance as yf
# 创建股票对象
aapl = yf.Ticker("AAPL")
# 获取历史数据
hist = aapl.history(period="1y")
print(hist.head())
跑完你会看到这样的输出:
| Date | Open | High | Low | Close | Volume |
|---|---|---|---|---|---|
| 2024-01-02 | 185.64 | 188.93 | 184.28 | 185.64 | 82488700 |
| 2024-01-03 | 184.22 | 185.88 | 183.43 | 184.25 | 67820400 |
这里有个坑,我踩过。第一次用的时候,我直接打印了 aapl.history() 没加参数,结果只拿到最近5天的数据。为什么?因为默认参数就是 period="5d"。
小技巧: 如果你想要全部历史数据,用 period="max"。但小心,苹果这种老牌公司数据量很大,第一次拉可能要等十几秒。
1.3 获取多只股票数据
单只股票不够看,咱们做量化通常要对比多只。yfinance 支持批量操作,效率高很多。
# 方法一:循环拉取(简单但慢)
tickers = ["AAPL", "MSFT", "GOOGL", "AMZN"]
data = {}
for t in tickers:
data[t] = yf.download(t, period="1y")
# 方法二:批量下载(推荐)
data = yf.download(tickers, period="1y")
方法二返回的是一个 MultiIndex DataFrame,列名是 (Price, Ticker) 的元组。我第一次看到这个结构有点懵,后来习惯了就觉得真香。
你想想看,如果手动去雅虎财经一个个下载CSV,再合并,得花多少时间?yfinance 几秒钟搞定。
1.4 设置数据获取参数
实际项目中,很少直接用 period 参数。更多时候我们需要精确控制起止日期。
# 指定起止日期
start_date = "2023-01-01"
end_date = "2024-12-31"
data = yf.download("AAPL", start=start_date, end=end_date)
这里有个细节:end_date 默认是今天。如果你不传,就拿到从 start 到今天的数据。
关于周期参数,我整理了一张表:
| 参数值 | 含义 | 适用场景 |
|---|---|---|
| 1d | 日线数据 | 日常分析、回测 |
| 1wk | 周线数据 | 中期趋势判断 |
| 1mo | 月线数据 | 长期投资分析 |
| 1m | 分钟数据(仅最近7天) | 高频交易研究 |
注意: 分钟数据只能获取最近7天的,这是雅虎的限制。我曾经想拉一年的分钟数据做回测,结果发现根本拿不到。后来改用其他数据源才解决。
1.5 核心流程一览
为了让你更直观地理解整个数据获取流程,我画了一张图:
这张图把整个流程串起来了。你从左边开始,一步步走到右边,就能拿到数据。
1.6 实战小贴士
最后分享几个我在项目中积累的经验:
- 网络问题: 国内访问雅虎偶尔会超时。我建议加个重试机制,或者用代理。
- 数据缓存: 每次拉取都请求网络很慢。我习惯把数据存成 CSV,下次直接读本地。
- 股票代码格式: 美股直接写代码,港股要加后缀 .HK,比如 0700.HK。
我的习惯: 写一个 get_data() 函数,把下载、缓存、异常处理都封装进去。这样每次调用就一行代码,清爽得很。
好了,yfinance 的基础用法就这些。别看内容不多,但这是你整个量化生涯的基石。把这一章练熟,后面讲数据清洗、策略回测的时候,你才能游刃有余。