数据源探索与获取:常见金融数据源与API调用基础

做量化研究,第一步就是找数据。这听起来简单,但我在项目里见过太多人在这上面栽跟头。数据源选不对,后面所有工作都是白搭。今天咱们就聊聊市面上主流的几个金融数据源,以及怎么用API把它们拉下来。

一、三大主流数据源概览

我个人习惯把数据源分成三类:机构级、社区级、国际级。这三类各有各的脾气,咱们一个个说。

数据源 类型 覆盖范围 费用 适合场景
Wind(万得) 机构级 A股、港股、债券、期货、基金 高(年费数万) 机构研究、专业回测
Tushare 社区级 A股、指数、基金、期货 免费/积分制 个人研究、学习
Yahoo Finance 国际级 美股、全球指数、外汇 免费 跨境策略、快速验证

核心观点:没有完美的数据源,只有最适合你当前阶段的数据源。我刚开始做量化时,用Tushare就够用了。后来进了机构,才不得不跟Wind打交道。

二、Wind(万得)—— 机构标配

Wind在金融圈的地位,说白了就是「数据界的Windows」。几乎所有券商、基金公司都在用。它的数据质量确实高,但价格也让人肉疼。

2.1 Wind的调用方式

Wind提供Python接口,叫WindPy。安装后需要先启动Wind客户端,才能调用。嗯,这里要注意:Wind客户端必须开着,否则API会报错。

# 安装WindPy
# pip install WindPy

from WindPy import w
w.start()  # 启动Wind连接

# 获取贵州茅台2024年1月的日线数据
data = w.wsd("600519.SH", "open,high,low,close,volume", 
             "2024-01-01", "2024-01-31", "")
print(data.Data)

个人经验:Wind的wsd函数是获取历史日线数据的标准方法。但它的返回格式有点奇葩——返回的是一个对象,数据藏在.Data属性里。我第一次用的时候找了半天数据在哪,后来才发现这个坑。

2.2 Wind的常见问题

  • 连接超时:Wind客户端如果长时间不用,会自动断开。我建议每次调用前都执行一次w.start()
  • 数据缺失:有些股票停牌期间,Wind会返回None。处理时要小心。
  • 字段名:Wind的字段名是英文缩写,比如close是收盘价,amt是成交额。记不住的话,可以查Wind的帮助文档。

三、Tushare —— 个人研究利器

Tushare是国内社区做得最好的金融数据源之一。它免费,但需要积分才能获取更多数据。积分可以通过注册、分享、充值获得。我个人觉得,对于学习阶段来说,免费额度完全够用。

3.1 Tushare的调用方式

Tushare的Python接口叫tushare,安装后需要注册获取token。这个token相当于你的身份凭证,别泄露了。

# 安装Tushare
# pip install tushare

import tushare as ts

# 设置token(在Tushare官网注册获取)
ts.set_token('your_token_here')
pro = ts.pro_api()

# 获取贵州茅台2024年1月的日线数据
df = pro.daily(ts_code='600519.SH', 
               start_date='20240101', 
               end_date='20240131')
print(df.head())

避坑指南:我曾经遇到过Tushare返回的数据里,日期格式是YYYYMMDD的字符串,不是datetime对象。如果你直接拿去做时间序列分析,会报错。记得先转换:df['trade_date'] = pd.to_datetime(df['trade_date'])

3.2 Tushare的积分体系

Tushare的积分决定了你能调用的接口范围。比如基础日线数据只需要200积分,但获取财务数据可能需要500积分以上。积分不够怎么办?

  • 注册送积分:新用户注册会送一些积分。
  • 每日签到:连续签到可以攒积分。
  • 分享文章:在社区分享量化文章也能获得积分。

说白了,Tushare的积分体系就是鼓励你多用、多贡献。对于个人研究来说,这个模式其实挺良心的。

四、Yahoo Finance —— 国际数据免费拿

如果你做美股或者全球市场,Yahoo Finance是首选。它完全免费,数据覆盖全球主要市场。不过,它的数据质量偶尔会出问题,尤其是分红、拆股这些事件。

4.1 Yahoo Finance的调用方式

Yahoo Finance的Python接口有很多,最常用的是yfinance。这个库封装得很好,几行代码就能拉数据。

# 安装yfinance
# pip install yfinance

import yfinance as yf

# 获取苹果公司2024年1月的日线数据
aapl = yf.download('AAPL', start='2024-01-01', end='2024-01-31')
print(aapl.head())

个人经验:yfinance返回的数据是pandas DataFrame,列名是Open, High, Low, Close, Volume。这个格式跟Wind和Tushare不太一样,但好处是直接就能用。我一般拿到数据后,第一件事就是检查有没有NaN值——Yahoo Finance偶尔会漏数据。

4.2 Yahoo Finance的局限性

  • 数据延迟:Yahoo Finance的数据不是实时的,通常有15-20分钟的延迟。
  • 历史数据限制:有些股票的历史数据只能追溯到几年内,太早的数据可能没有。
  • 事件数据缺失:分红、拆股、增发这些事件,Yahoo Finance有时会记录不全。

五、API调用基础 —— 通用套路

不管用哪个数据源,API调用的核心逻辑都差不多。我总结了一个通用流程,你照着做基本不会出错。

5.1 通用调用流程

  1. 注册账号:获取API token或密钥。
  2. 安装SDK:用pip安装对应的Python库。
  3. 设置参数:指定股票代码、时间范围、字段等。
  4. 发起请求:调用API函数获取数据。
  5. 处理返回:把数据转换成pandas DataFrame格式。
  6. 错误处理:捕获异常,比如网络超时、数据不存在等。
# 一个通用的数据获取模板
def fetch_data(source, symbol, start, end):
    """
    从指定数据源获取股票数据
    source: 'wind', 'tushare', 'yahoo'
    """
    try:
        if source == 'wind':
            # Wind调用
            data = w.wsd(symbol, "close", start, end, "")
            return data.Data
        elif source == 'tushare':
            # Tushare调用
            pro = ts.pro_api()
            df = pro.daily(ts_code=symbol, 
                          start_date=start.replace('-', ''),
                          end_date=end.replace('-', ''))
            return df
        elif source == 'yahoo':
            # Yahoo Finance调用
            df = yf.download(symbol, start=start, end=end)
            return df
        else:
            raise ValueError(f"不支持的数据源: {source}")
    except Exception as e:
        print(f"数据获取失败: {e}")
        return None

核心观点:写一个通用的数据获取函数,可以让你在切换数据源时只改一个参数。我在项目里就是这么做的,省了不少事。

5.2 常见错误与处理

错误类型 原因 解决方法
连接超时 网络问题或API服务端繁忙 增加重试机制,比如用time.sleep(1)等待后重试
数据为空 股票代码错误或该时间段无数据 检查股票代码格式,确认交易日期
积分不足 Tushare积分不够 签到或充值获取积分
字段不存在 API字段名写错了 查阅API文档,确认字段名

六、知识体系框架图

下面这张图展示了本章的核心逻辑:从数据源选择到API调用,再到数据获取的完整流程。

数据源探索与获取:核心流程 数据源选择 Wind(机构级) Tushare(社区级) Yahoo Finance(国际级) API调用基础 注册获取Token 安装SDK 设置参数 发起请求 数据处理:转换为DataFrame,处理缺失值 输出:干净的金融时间序列数据

七、总结与建议

数据源的选择,说白了就是权衡:你要的是数据质量、获取成本,还是开发效率?

  • 如果你在机构工作:用Wind,数据质量有保障,但要做好跟它「斗智斗勇」的准备。
  • 如果你是个人研究者:用Tushare,免费且社区活跃,遇到问题有人帮你。
  • 如果你做美股或全球市场:用Yahoo Finance,免费且覆盖广,但数据质量要自己把关。

避坑指南:我曾经在项目里同时用了三个数据源,结果发现同一只股票在同一天的收盘价居然不一样。后来排查发现,Wind用的是复权价格,Tushare用的是不复权价格,Yahoo Finance用的是调整后价格。所以,用数据前一定要搞清楚它的「复权规则」。

数据获取只是第一步,拿到数据后怎么清洗、怎么处理缺失值、怎么对齐时间戳,这些才是真正考验功夫的地方。不过,那是下一章的内容了。今天先把数据源搞定,后面的事后面再说。


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