1. 从零开始:认识你的金融数据宝库 Tushare
如果你对股票、基金这些金融市场感兴趣,或者正在学校里研究经济金融课题,甚至想自己动手试试量化交易,那你大概率会遇到一个头疼的问题:数据从哪里来?
我刚开始接触这个领域的时候,也踩过不少坑。要么是数据太贵,个人根本负担不起;要么是数据格式乱七八糟,下载下来是一堆TXT,还得自己写脚本清洗,半天时间就耗进去了;更别提那些更新不及时、字段缺失的免费数据源了,用起来提心吊胆。直到后来发现了 Tushare,我才感觉真正找到了一个趁手的工具。它不是万能的,但对于绝大多数个人研究者、学生和初级投资者来说,它就像一个打开了水龙头的宝库,数据获取的门槛被极大地降低了。
简单来说,Tushare 是一个提供金融和经济数据的开放平台。你可以把它想象成一个超级市场,里面分门别类地摆放着各种“商品”:A股、港股、美股的实时和历史行情(开盘价、收盘价、成交量等)、上市公司的财务报告(利润表、资产负债表、现金流量表)、基金净值、宏观经济指标(GDP、CPI、PMI)等等。而且,这个超市大部分区域是免费开放的,你只需要注册个会员(获取一个Token),就能推着购物车进去挑选你需要的数据了。
和那些需要你手动去财经网站一页页复制粘贴,或者面对复杂API文档头疼的原始数据源不同,Tushare 最大的优点就是 “友好”。它提供了专门为 Python 设计的 SDK(软件工具包),你只需要写几行看起来像说人话的代码,比如“给我茅台公司2023年的日K线数据”,数据就会以整洁的表格(DataFrame)形式返回到你手里,直接就能用。这对于非计算机专业出身的朋友来说,简直是福音。我见过很多金融专业的同学,因为Tushare的存在,能够把更多精力花在模型构建和策略分析上,而不是和数据获取的“脏活累活”搏斗。
2. 手把手实战:配置环境与获取第一个数据
光说不练假把式,咱们直接上手。整个过程就像搭积木,一步一步来,非常清晰。
2.1 前期准备:注册与安装
首先,你得去 Tushare 的官网(tushare.pro)注册一个账号。这个过程很简单,用手机号或者邮箱都行。注册成功后,在个人主页的“接口TOKEN”一栏,你会看到一个由字母和数字组成的长字符串。这个Token就是你的钥匙,千万保管好,别泄露出去。 每个Token每天有调用次数的限制(免费版足够个人学习使用),所以也别到处发。
接下来是安装。确保你的电脑上已经安装了 Python(建议3.7及以上版本)。然后打开你的命令行工具(Windows叫CMD或PowerShell,Mac叫终端),输入下面这行魔法命令:
pip install tushare
通常几秒钟就装好了。如果速度慢,可以试试国内的镜像源,比如加上 -i https://pypi.tuna.tsinghua.edu.cn/simple。安装完成后,我们就可以在Python里召唤它了。
2.2 初始化与第一个查询
打开你喜欢的Python编辑器(Jupyter Notebook, VS Code, PyCharm都行),让我们开始写第一段代码。
# 1. 引入tushare库,并给它起个简单的别名`ts`,这是惯例。
import tushare as ts
import pandas as pd # 通常我们会一起引入pandas,用于处理返回的表格数据
# 2. 设置你的令牌(Token)。把下面引号里的内容换成你官网复制的那个真实Token。
# 这步相当于告诉Tushare:“我是有权限的用户,请为我服务。”
ts.set_token('你的token_在这里替换成真实的字符串')
# 3. 创建一个“专业版”的接口对象。后续我们大部分数据调取都通过这个`pro`对象进行。
pro = ts.pro_api()
有的朋友可能会问,我能不能不执行 set_token,直接创建接口?当然可以,一行代码搞定:
pro = ts.pro_api('你的token_在这里替换成真实的字符串')
两种方式效果一样,看个人习惯。我通常喜欢用 set_token,因为这样Token只在一处设置,代码看起来更清晰。好了,至此,你的数据桥梁已经搭建完毕!是不是很简单?
2.3 调取你的第一份数据:交易日历
为了验证一切正常,我们先调取一个最简单、也最实用的数据——交易日历。这个数据能告诉你哪些日子股市开盘,哪些日子休市,在做回测和日期对齐时特别重要。
# 调用`trade_cal`接口,查询上海证券交易所(SSE)在2023年12月的交易日历
# 参数说明:
# exchange: 交易所代码,SSE是上交所,SZSE是深交所,CFFEX是中金所等,空字符串代表所有。
# start_date/end_date: 查询的起止日期,格式是'YYYYMMDD'。
# fields: 指定返回哪些字段,不指定则返回所有字段。
# is_open: 是否开盘,'0'代表休市日,'1'代表交易日。这里查休市日作为例子。
df_cal = pro.trade_cal(exchange='SSE', start_date='20231201', end_date='20231231', is_open='0')
# 查看获取到的数


1606

被折叠的 条评论
为什么被折叠?



