数据获取基础:数据源介绍与行情数据获取

做量化,第一步就是搞数据。没有数据,再牛的因子也是空中楼阁。

我个人习惯把数据获取比作「做饭前的买菜」。菜买不好,厨艺再好也白搭。今天我们就聊聊,量化人常用的几个「菜市场」——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默认是后复权。如果你拿两个数据源算同一个因子,结果对不上,八成是复权方式不一致。建议统一使用后复权数据做因子计算。

知识体系总览

说了这么多,咱们用一张图把本章的核心逻辑串起来:

数据获取基础:知识体系 Tushare Wind 聚宽 行情数据获取(日线、分钟线等) 数据格式标准化(字段统一、日期排序、复权处理) 标准化因子计算输入

说白了,整个流程就是:选数据源 → 拉数据 → 洗成统一格式。这三步走稳了,后面的因子计算才能放心。

我的习惯:每次拿到新数据源,我都会先写一个标准化适配器。这样切换数据源时,只需要改一行代码。前期多花半小时,后期能省一整天。

好了,数据获取这块就聊到这儿。记住,数据是量化的基石,别嫌麻烦。把基础打牢,后面才能盖高楼。


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