【python量化】我为什么什么开始认真用 Tushare:从查行情到做数据分析,分享几个很实用的用法


最近又重新整理了一下自己平时用 Tushare 的一些习惯,顺便写一篇记录。
一开始我接触 Tushare,其实目的很简单,就是想找一个相对稳定、接口规范、适合 Python 调用的金融数据源。后来慢慢用下来,发现它不只是“拿一下股票日线数据”这么简单,很多平时做分析会遇到的场景,它都能派上用场。

这篇文章不准备写得太官方,主要就是结合我自己的使用过程,聊聊 Tushare 到底能做什么、适合什么人、平时怎么用比较顺手,以及几个容易踩的坑。如果你刚接触 Tushare,或者已经注册了但还没真正用起来,应该会有点帮助。


一、我为什么会选择 Tushare

如果只是为了看行情,其实很多软件都能看,网站也不少。
但如果你想把数据拿下来,自己做分析、筛选、回测,或者和 Python 结合起来,问题就不一样了。

我自己比较看重下面几点:

1. 对 Python 用户很友好

这一点对我来说很重要。
很多数据平台网页上看着挺全,但真要自己做分析的时候,还是希望能直接在代码里调用。Tushare 这方面体验比较统一,接口风格也比较规整,不需要到处找乱七八糟的页面。

2. 数据类型比较全

最开始我只是拿 A 股日线,后面才发现它不只是股票数据。
像下面这些内容,平时都能用到:

  • 股票基础信息
  • 日线、周线、月线行情
  • 财务指标
  • 资金流向
  • 指数数据
  • 基金数据
  • 宏观数据
  • 行业、概念分类等

对个人学习、做小项目、写分析文章来说,已经够用了。

3. 比较适合“自己动手做点东西”

这一点是我后来越来越有感受的。
用 Tushare 不只是“查数据”,而是你可以把数据拉回来之后,继续做:

  • 简单选股
  • 指标计算
  • 可视化分析
  • 回测策略
  • 数据存档
  • 每日更新脚本

对于想自己折腾量化或者金融数据分析的人来说,这个过程挺有意思。


二、Tushare 最实际的几个用途

很多人第一次接触 Tushare,会觉得它就是“查股票历史数据”的。
但我自己用下来,觉得它至少有下面几个很实际的用途。

1. 获取个股历史行情,做最基础的数据分析

这个是最常见的用法。
比如你想分析一只股票最近几个月的走势、涨跌幅、成交量变化,最直接的方式就是先把数据拿下来。

安装很简单:

pip install tushare

初始化也不复杂:

import tushare as ts

ts.set_token('你的token')
pro = ts.pro_api()

拿一只股票的日线数据:

df = pro.daily(
    ts_code='000001.SZ',
    start_date='20240101',
    end_date='20240331'
)

print(df.head())

在这里插入图片描述

拿到之后你可以继续用 pandas 处理,比如排序、计算均线、看区间涨跌幅等等。

我自己一开始就是这么用的,先把数据拿到手,再谈后面的分析。
不然只靠盯盘软件看图,很多东西看得不够细。


2. 获取股票基础信息,做股票池整理

这个接口我后来用得也挺多。
比如你想先把当前上市股票整理出来,后面做自己的股票池,就可以直接拿基础信息。

df = pro.stock_basic(
    exchange='',
    list_status='L',
    fields='ts_code,symbol,name,area,industry,list_date'
)

print(df.head())

在这里插入图片描述

这个数据特别适合做两件事:

第一,整理你自己的研究范围。
比如你只想研究主板、创业板,或者某几个行业,就能先筛一下。

第二,做数据映射。
因为很多后续接口都要用 ts_code,提前把股票列表整理好,后面会省很多事。


3. 拉取某一天全市场行情,而不是一只一只去拿

这个是我后面才意识到的一个“效率差别很大”的点。
有些新手一上来就是循环:

for code in stock_list:
    df = pro.daily(ts_code=code, start_date='20240301', end_date='20240331')

这样写当然能跑,但问题也明显:

  • 请求次数多
  • 速度慢
  • 容易碰到频率限制

后来我发现很多场景下,直接按交易日拉全市场数据更省事:

df = pro.daily(trade_date='20240329')
print(df.head())

在这里插入图片描述

这个用法很适合做:

  • 当日涨跌幅排名
  • 全市场选股
  • 条件筛选
  • 每日复盘数据存档

说白了,如果你的目标是“看某天整个市场发生了什么”,那就别老想着一只一只去拿。


4. 配合 pandas 做一些简单但很实用的指标分析

Tushare 本身负责给数据,真正好玩的地方在后面。
拿到数据以后,最自然的就是配合 pandas 做处理。

比如算一个简单的 5 日均线和 10 日均线:

import pandas as pd

df = pro.daily(
    ts_code='000001.SZ',
    start_date='20240101',
    end_date='20240331'
)

df = df.sort_values('trade_date')
df['ma5'] = df['close'].rolling(5).mean()
df['ma10'] = df['close'].rolling(10).mean()

print(df[['trade_date', 'close', 'ma5', 'ma10']].tail())

在这里插入图片描述

虽然这只是最基础的例子,但它说明一个问题:
Tushare 真正的价值,不只是提供数据,而是它让后面的分析有了起点。

很多人以为学量化一定要先学很复杂的模型,其实不是。
先把数据获取、清洗、保存、分析这条链走通,就已经进步很大了。


三、我觉得 Tushare 最适合哪几类人

这个问题我自己也想过。
因为并不是所有人都需要用 Tushare。

按我的理解,它比较适合下面几类人。

1. 想学金融数据分析的 Python 用户

如果你会一点 Python,又对金融数据感兴趣,那 Tushare 很适合作为练手工具。
它比纯爬虫更稳定,也比手动复制数据更高效。

2. 刚接触量化的人

很多人学量化,第一步不是策略,而是数据从哪里来
这一关过不去,后面的回测、因子分析、策略优化都没法展开。

Tushare 在这一步上,算是一个比较自然的入口。

3. 想自己搭建小型数据系统的人

比如每天自动拉数据、保存到 csv 或数据库,形成自己的本地数据仓库。
这个事情听起来复杂,但其实从 Tushare 开始做并不难。


四、我自己用下来的一些小经验

这一部分可能比“接口介绍”更有用,因为很多问题文档里不一定会重点讲,但实际使用时很容易碰到。

1. 不要反复重复调用同一份数据

这是我最早踩的坑之一。
有时候写代码图省事,每次运行都重新请求一次历史数据,结果其实完全没必要。

如果一份历史数据短期内不会变,最好存到本地:

df = pro.daily(
    ts_code='000001.SZ',
    start_date='20240101',
    end_date='20240331'
)
df.to_csv('000001_SZ_daily.csv', index=False)

这样做有几个好处:

  • 省接口调用次数
  • 省时间
  • 方便反复调试

我现在一般是“原始数据先落地”,后面分析尽量基于本地文件来做。


2. 字段不要贪多,够用就行

有些接口支持通过 fields 参数指定字段,这个挺实用。
很多时候你可能只关心收盘价、成交量、交易日期,那就没必要把一大堆暂时用不到的字段全取回来。

比如:

df = pro.daily(
    ts_code='000001.SZ',
    start_date='20240101',
    end_date='20240331',
    fields='ts_code,trade_date,open,high,low,close,vol'
)

这样数据更轻,后面处理起来也更干净。


3. 先想清楚分析目标,再决定取什么数据

这一点看起来像废话,但其实很重要。
我以前也有过“先拉一堆数据再说”的阶段,后来发现这样很容易把自己搞乱。

比如你如果只是想研究:

  • 最近一段时间某只股票的走势
    那就拿个股日线就够了。

如果你想做:

  • 某一天全市场涨停股统计
    那就应该优先考虑全市场日线、涨跌幅筛选。

如果你想做:

  • 基本面筛选
    那重点就不在日线,而在财务指标、利润表、资产负债表这类接口。

想清楚问题,代码反而会简单很多。


五、一个我觉得很适合新手的实战小例子

光说用途还是有点虚,下面给一个比较实在的小例子:
筛选某一天涨幅靠前的股票。

这个例子不复杂,但已经能体现 Tushare 的实际价值了。

import tushare as ts
import pandas as pd

ts.set_token('你的token')
pro = ts.pro_api()

# 获取某个交易日的全市场日线数据
df = pro.daily(trade_date='20240329')

# 计算涨跌幅靠前的股票
df = df.sort_values('pct_chg', ascending=False)

# 取前20名
top20 = df[['ts_code', 'open', 'high', 'low', 'close', 'pct_chg', 'vol']].head(20)

print(top20)

这个结果能做什么?

其实能做的还不少,比如:

  • 复盘市场热点
  • 看当天强势股分布
  • 配合行业信息做进一步分析
  • 导出 Excel 后自己整理备注

如果后面再加一层,比如把这些股票的基础信息合并进来,就能形成一个更完整的小分析表。


六、一个更进一步的思路:自己做“每日数据更新”

我后来越来越觉得,Tushare 最值得用的地方,不在于“偶尔查一次数据”,而在于它可以帮你形成自己的数据习惯。

比如每天收盘后自动跑一个脚本,做几件事:

  1. 拉取当天全市场日线
  2. 保存到本地
  3. 统计涨幅前20、跌幅前20
  4. 更新自己关注股票池的数据
  5. 生成一个简单报表

哪怕这个流程不复杂,长期坚持下来也很有价值。
因为你会慢慢从“看别人总结市场”变成“自己手里有数据”。

对我来说,这种感觉其实挺不一样的。


七、我觉得 Tushare 值得长期用的原因

写到这里,再回头看,我觉得自己现在对 Tushare 的理解已经和最开始不太一样了。

一开始我把它当成一个“数据接口工具”;
后来慢慢发现,它更像是一个入口:

  • 你可以从这里开始接触金融数据
  • 可以开始练 pandas
  • 可以开始做策略回测前的数据准备
  • 可以逐渐形成自己的分析框架

它不一定能一次性帮你解决所有问题,但它确实让“自己动手做分析”这件事变得更容易了。

对于想认真学一点金融数据处理、量化分析的人来说,我觉得 Tushare 还是很值得花时间熟悉一下的。


八、最后总结

如果让我用一句比较直接的话来概括,Tushare 对我来说最大的价值就是:

它让我从“看数据”变成了“能把数据拿下来自己分析”。

这中间的差别其实很大。
因为一旦数据能稳定获取,后面无论是做简单统计、做选股、做图表,还是搭一个自己的小工具,都会顺很多。

如果你刚开始接触 Tushare,我的建议是:

先别想着一步到位做多复杂的策略,
先把下面几件事做熟:

  • 会初始化接口
  • 会拿股票基础信息
  • 会拿个股日线
  • 会拿某日全市场数据
  • 会用 pandas 做简单处理
  • 会把数据存到本地

把这些基础动作走顺之后,再往后学就轻松多了。

以上就是我这段时间使用 Tushare 的一些实际体会。
后面如果我把财务数据、资金流向、简单选股这部分也整理出来,再继续写一篇。


Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐