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 知识体系总览

下面这张图,是我整理的数据获取全链路。你想想看,从原始数据到策略信号,中间要经过多少环节:

金融数据获取全链路 A股数据 akshare 美股数据 yfinance 加密货币 ccxt 数据频率选择:1m / 5m / 30m / 1h / 1d / 1wk / 1mo 数据处理:清洗 → 对齐 → 复权 → 存储 策略回测 / 实盘交易

嗯,这张图把整个流程串起来了。从三个数据源出发,经过频率选择、数据处理,最终服务于策略。

我的建议:刚开始做量化,别追求全市场。先盯住一个市场、一个频率,把数据链路跑通再说。我见过太多人一上来就搞全市场,结果数据对不齐,策略根本跑不起来。

数据获取这块,说白了就是「工欲善其事,必先利其器」。akshare、yfinance、ccxt这三个工具,够你覆盖90%的量化场景了。剩下的10%,等遇到具体问题再针对性解决。


公众号:蓝海数据掘金营,微信deep3321