3、数据获取入门:用 yfinance 下载历史 K 线
做量化投资,第一步就是搞到数据。没有数据,再牛的策略也是纸上谈兵。
我个人习惯用 yfinance 这个库。它免费、简单,而且直接对接雅虎财经。说白了,几行代码就能把纳斯达克的历史 K 线拉下来。我刚开始做回测的时候,就是靠它快速验证想法的。
3.1 安装与导入:别踩坑
先装库。打开终端,敲一行:
pip install yfinance pandas
嗯,这里要注意。如果你用的是国内网络,可能会遇到下载慢的问题。我建议加个国内镜像源,比如清华的:
pip install yfinance pandas -i https://pypi.tuna.tsinghua.edu.cn/simple
装好之后,在代码里导入:
import yfinance as yf
import pandas as pd
搞定。就这么简单。
3.2 下载历史 K 线:核心操作
我们拿纳斯达克综合指数(^IXIC)举个例子。你想下载最近 1 年的日线数据:
# 定义股票代码
ticker = "^IXIC"
# 下载数据
data = yf.download(ticker, start="2023-01-01", end="2024-01-01")
# 看一眼
print(data.head())
运行之后,你会看到类似这样的输出:
| Date | Open | High | Low | Close | Volume | Adj Close |
|---|---|---|---|---|---|---|
| 2023-01-03 | 10442.10 | 10619.68 | 10385.64 | 10619.68 | 4850000000 | 10619.68 |
| 2023-01-04 | 10619.68 | 10710.52 | 10511.78 | 10619.68 | 4720000000 | 10619.68 |
你看,日期、开盘、最高、最低、收盘、成交量、复权收盘价,全都有了。这就是标准的 OHLCV 数据。
period="1mo" 参数,省得算日期。比如 yf.download(ticker, period="1mo")。
3.3 理解 DataFrame 结构
返回的 data 是一个 Pandas DataFrame。这东西是量化分析的核心数据结构。你想想看,它就像一个电子表格,有行有列。
- 行(Row): 每一行代表一个交易日。索引是日期。
- 列(Column): 每一列代表一个字段。比如 Open、Close、Volume。
我经常用 data.info() 来快速查看数据概况:
data.info()
输出:
DatetimeIndex: 251 entries, 2023-01-03 to 2023-12-29
Data columns (total 7 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 Open 251 non-null float64
1 High 251 non-null float64
2 Low 251 non-null float64
3 Close 251 non-null float64
4 Volume 251 non-null int64
5 Adj Close 251 non-null float64
dtypes: float64(6), int64(1)
memory usage: 15.7 KB
看到没?251 个交易日,没有缺失值。数据类型都是 float64 和 int64,非常适合做数学运算。
3.4 导出数据:to_csv 与 to_excel
数据拿到手,总不能每次都重新下载吧?我习惯把它存成本地文件。这样下次直接读取,省时间。
3.4.1 导出为 CSV
CSV 是最通用的格式。任何软件都能打开。
# 导出为 CSV
data.to_csv("nasdaq_ixic_2023.csv")
# 如果你不想保留索引(日期),可以加参数
data.to_csv("nasdaq_ixic_2023.csv", index=True)
我个人建议保留索引。因为日期是时间序列分析的关键字段。丢了日期,数据就废了一半。
3.4.2 导出为 Excel
有些同事喜欢用 Excel 看数据。那就导出为 .xlsx 文件。
# 导出为 Excel
data.to_excel("nasdaq_ixic_2023.xlsx", sheet_name="IXIC_Data")
注意,导出 Excel 需要安装 openpyxl 库。如果没装,会报错。装一下:
pip install openpyxl
encoding="utf-8-sig"。
3.5 知识体系:一张图看懂
下面这张 SVG 图,帮你梳理本章的核心逻辑。从数据源到最终存储,一目了然。
3.6 完整示例:一条龙搞定
最后,给你一个完整的代码示例。从下载到导出,一步到位。
import yfinance as yf
import pandas as pd
# 1. 下载数据
ticker = "^IXIC"
data = yf.download(ticker, start="2023-01-01", end="2024-01-01")
# 2. 查看数据概况
print("数据形状:", data.shape)
print("前5行:\n", data.head())
# 3. 导出为 CSV
data.to_csv("nasdaq_ixic_2023.csv")
print("已导出为 CSV 文件")
# 4. 导出为 Excel
data.to_excel("nasdaq_ixic_2023.xlsx", sheet_name="IXIC_Data")
print("已导出为 Excel 文件")
运行这段代码,你会在当前目录下看到两个文件。一个 .csv,一个 .xlsx。以后做分析,直接读取就行,不用每次都联网下载。
- yfinance 是获取美股历史 K 线的最简单方式
- 返回的 DataFrame 是量化分析的基础数据结构
- to_csv 和 to_excel 是两种最常用的数据持久化方法
- 导出时注意编码和索引问题,避免踩坑