4、金融数据获取:多市场数据源的实战接入
做量化交易,第一道坎就是数据。没有数据,策略就是空中楼阁。
我个人习惯把数据源分成三类:A股用akshare,美股用yfinance,加密货币用ccxt。这三个库我用了好几年,踩过不少坑,今天一次性说清楚。
4.1 akshare:A股数据的瑞士军刀
akshare这个库,说白了就是爬虫+数据清洗的集合体。它把东方财富、新浪财经等网站的数据封装成了统一接口。
核心优势:免费、无需API Key、覆盖全
安装很简单:
pip install akshare --upgrade
获取A股日线数据,我常用这个:
import akshare as ak
# 获取贵州茅台历史数据
stock_zh_a_hist_df = ak.stock_zh_a_hist(
symbol="600519",
period="daily", # daily/weekly/monthly
start_date="20200101",
end_date="20241231",
adjust="qfq" # 前复权
)
print(stock_zh_a_hist_df.head())
参数说明:
| 参数 | 可选值 | 说明 |
|---|---|---|
| period | daily / weekly / monthly | 数据频率 |
| adjust | qfq / hfq / None | 复权方式 |
我的经验:做回测一定要用前复权(qfq)。我曾经用未复权数据跑策略,结果分红后信号全乱了,排查了两天才发现是数据问题。
4.2 yfinance:美股数据的首选
yfinance是雅虎财经的非官方Python接口。说实话,雅虎财经的API稳定性一般,但yfinance做了很好的封装。
pip install yfinance
获取苹果公司数据:
import yfinance as yf
# 下载苹果股票数据
aapl = yf.download(
"AAPL",
start="2020-01-01",
end="2024-12-31",
interval="1d" # 1d, 1wk, 1mo
)
print(aapl.head())
interval参数对照:
| interval值 | 频率 | 适用场景 |
|---|---|---|
| 1m | 1分钟 | 日内高频 |
| 5m | 5分钟 | 短线交易 |
| 1d | 日线 | 标准回测 |
| 1wk | 周线 | 长线策略 |
注意:yfinance的分钟数据最多只能获取过去7天。想做历史分钟回测?得另想办法。
4.3 ccxt:加密货币的统一接口
加密货币交易所多如牛毛,每个交易所的API都不一样。ccxt就是来解决这个问题的——它提供了统一的接口。
pip install ccxt
获取币安BTC/USDT的K线数据:
import ccxt
import pandas as pd
exchange = ccxt.binance({
'rateLimit': 1200,
'enableRateLimit': True,
})
# 获取K线数据
ohlcv = exchange.fetch_ohlcv(
symbol='BTC/USDT',
timeframe='1h', # 1m, 5m, 1h, 1d
limit=1000 # 最多1000根
)
# 转为DataFrame
columns = ['timestamp', 'open', 'high', 'low', 'close', 'volume']
df = pd.DataFrame(ohlcv, columns=columns)
df['timestamp'] = pd.to_datetime(df['timestamp'], unit='ms')
print(df.head())
timeframe参数速查:
| timeframe | 含义 | 数据量限制 |
|---|---|---|
| 1m | 1分钟 | 最多1000根 |
| 5m | 5分钟 | 最多1000根 |
| 1h | 1小时 | 最多1000根 |
| 1d | 日线 | 最多1000根 |
避坑指南:我曾经在币安上拉取1分钟数据,没注意limit限制,结果只拿到了最近16小时的数据。后来改用循环请求+时间戳偏移才解决。
4.4 数据频率与周期选择
选什么频率,取决于你的策略类型。我一般这样选:
- 高频策略(持仓<1天):用1分钟或5分钟数据。注意,数据量会很大,存储要规划好。
- 短线策略(持仓1-5天):用30分钟或1小时数据。这个频率比较舒服,信号不会太频繁。
- 中线策略(持仓1-3个月):用日线数据。我最常用的频率,回测速度快,信号也稳定。
- 长线策略(持仓>1年):用周线或月线数据。说实话,这个频率更适合基本面分析。
核心原则:数据频率越高,噪音越大,但信号延迟越小。找到平衡点才是关键。
4.5 知识体系总览
下面这张图,是我整理的数据获取全链路。你想想看,从原始数据到策略信号,中间要经过多少环节:
嗯,这张图把整个流程串起来了。从三个数据源出发,经过频率选择、数据处理,最终服务于策略。
我的建议:刚开始做量化,别追求全市场。先盯住一个市场、一个频率,把数据链路跑通再说。我见过太多人一上来就搞全市场,结果数据对不齐,策略根本跑不起来。
数据获取这块,说白了就是「工欲善其事,必先利其器」。akshare、yfinance、ccxt这三个工具,够你覆盖90%的量化场景了。剩下的10%,等遇到具体问题再针对性解决。
公众号:蓝海数据掘金营,微信deep3321