数据获取基础:数据源介绍与行情数据获取
做量化,第一步就是搞数据。没有数据,再牛的因子也是空中楼阁。
我个人习惯把数据获取比作「做饭前的买菜」。菜买不好,厨艺再好也白搭。今天我们就聊聊,量化人常用的几个「菜市场」——Tushare、Wind、聚宽,以及怎么把股票行情数据拿到手、洗干净。
三大主流数据源,怎么选?
市面上数据源不少,但真正经得起折腾的,我总结下来就这三个。
| 数据源 | 特点 | 适合人群 | 费用 |
|---|---|---|---|
| Tushare | 开源、社区活跃、接口丰富 | 个人研究、小团队 | 基础免费,高级积分 |
| Wind | 机构标准、数据质量高、覆盖全 | 机构、专业投资者 | 年费数万起 |
| 聚宽 | 一站式平台、回测+数据一体 | 策略开发、快速验证 | 部分免费,高级付费 |
你可能会问:「那我该用哪个?」
我的建议是:个人研究先用Tushare,上手快、成本低。等你要跑实盘或者做高频了,再考虑Wind。聚宽更适合做策略回测,数据只是它的一部分功能。
核心观点:数据源没有绝对的好坏,关键看你的场景。我见过有人用Tushare跑了几百万的策略,也见过用Wind却亏得一塌糊涂的。工具只是工具。
股票行情数据获取实战
好了,理论说完了,咱们直接上手。以Tushare为例,拉一段A股日线行情。
首先,你得注册Tushare账号,拿到token。这个步骤我就不啰嗦了,官网走一遍就行。
然后,安装库:
pip install tushare
接下来,写代码:
import tushare as ts
# 设置token
ts.set_token('你的token')
# 初始化接口
pro = ts.pro_api()
# 获取平安银行2024年1月日线数据
df = pro.daily(
ts_code='000001.SZ',
start_date='20240101',
end_date='20240131'
)
print(df.head())
跑完你会看到类似这样的输出:
ts_code trade_date open high low close pre_close change pct_chg vol amount
0 000001.SZ 20240131 9.20 9.28 9.05 9.08 9.25 -0.17 -1.84 ... ...
1 000001.SZ 20240130 9.30 9.35 9.18 9.25 9.32 -0.07 -0.75 ... ...
...
嗯,这里要注意:返回的数据默认是按日期降序排列的。我刚开始做的时候没注意,直接拿过来算因子,结果全反了。后来排查了半天才发现是顺序问题。
小技巧:拿到数据后,先做一步 df.sort_values('trade_date', inplace=True),把日期排正。养成习惯,能省很多坑。
数据格式标准化
数据拿到了,但不同数据源返回的格式五花八门。Tushare的字段名是英文,Wind是中文,聚宽又是一种风格。你想想看,如果每个数据源都单独写一套处理逻辑,那代码得多乱?
所以,标准化是必须的。我个人习惯统一成以下格式:
| 标准字段 | 含义 | 类型 |
|---|---|---|
| code | 股票代码(如000001.SZ) | str |
| date | 交易日期 | datetime |
| open | 开盘价 | float |
| high | 最高价 | float |
| low | 最低价 | float |
| close | 收盘价 | float |
| volume | 成交量(股) | int |
| amount | 成交额(元) | float |
写个标准化函数,一劳永逸:
def standardize_daily(df, source='tushare'):
"""将不同数据源的日线数据统一为标准格式"""
if source == 'tushare':
df = df.rename(columns={
'ts_code': 'code',
'trade_date': 'date',
'vol': 'volume'
})
df['date'] = pd.to_datetime(df['date'])
elif source == 'wind':
# Wind的字段映射逻辑类似
pass
# 只保留标准字段
cols = ['code', 'date', 'open', 'high', 'low', 'close', 'volume', 'amount']
return df[cols]
避坑指南:我曾经在标准化时忽略了复权问题。Tushare的daily接口返回的是未复权数据,而Wind默认是后复权。如果你拿两个数据源算同一个因子,结果对不上,八成是复权方式不一致。建议统一使用后复权数据做因子计算。
知识体系总览
说了这么多,咱们用一张图把本章的核心逻辑串起来:
说白了,整个流程就是:选数据源 → 拉数据 → 洗成统一格式。这三步走稳了,后面的因子计算才能放心。
我的习惯:每次拿到新数据源,我都会先写一个标准化适配器。这样切换数据源时,只需要改一行代码。前期多花半小时,后期能省一整天。
好了,数据获取这块就聊到这儿。记住,数据是量化的基石,别嫌麻烦。把基础打牢,后面才能盖高楼。
公众号:蓝海数据掘金营,微信deep3321