利用Tushare获取金融数据

开发背景

笔者是在校生,STEM专业,对量化投资领域很感兴趣,刚入门。平时闲暇时光读读金融书籍,并用代码进行实战演练。此篇是笔者的第一篇blog,尝试通过Tushare获取股票的日常交易数据,为后续进行股票分析做准备。

笔者tushare ID:414988

Tushare社区

Tushare社区(https://tushare.pro/)是一个大数据开放社区,免费提供各类金融数据 , 助力智能投资与创新型投资。现Tushare使用pro接口,具有数据丰富,获取简单,落地方便等优点。

Tushare拥有丰富的数据内容,如股票、基金、期货、数字货币等行情数据,公司财务、基金经理等基本面数据。同时,SDK开发包支持语言,同时提供HTTP Restful接口,最大程度方便不同人群的使用。并且提供多种数据储存方式,如Oracle、MySQL,MongoDB、HDF5、CSV等,为数据获取提供了性能保证。

Tushare安装

在命令行,输入以下代码

pip install tushare

安装最新版tushare。安装完毕后,在命令行输入python,回车;输入

import tushare as ts

若没报错,说明安装成功。

Tushare使用

打开jupyter notebook,输入

import tushare as ts
token = 'your token'  # 这里输入tushare官网下用户接口token
pro = ts.pro_api(token)

同时,再import两个数据分析的常用库pandas,numpy和一个python画图包Matplotlib。

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt

为了防止图上的中文字符生成乱码,再用以下代码规避。

from pylab import mpl
mpl.rcParams['font.sans-serif']=['SimHei']
mpl.rcParams['axes.unicode_minus']=False

Tushare获取金融数据

1.获取A股列表

使用接口pro.stock_basic()获取沪深股票列表(以下输入输出参数只选取重要的进行分析)。
输入参数:

名称描述
ts_code股票代码
list_status上市状态:上市状态: L上市 D退市 P暂停上市,默认L
exchange交易所 SSE上交所 SZSE深交所 HKEX港交所(未上线)

输出参数:

名称描述
ts_code股票代码+交易所后缀
symbol股票代码
name股票名称
area所在地域
industry所属行业
market市场类型
exchange交易所代码
list_status上市状态:L上市 D退市 P暂停上市
list_date上市日期
delist_date退市日期

获取当前上市的股票代码、简称、注册地、行业、上市时间等数据。

basic = pro.stock_basic(list_status='L')
basic.head()  # 查看前五条

	ts_code	symbol	name	area	industry	market	list_date
0	000001.SZ	000001	平安银行	深圳	银行	主板	19910403
1	000002.SZ	000002	万科A	深圳	全国地产	主板	19910129
2	000004.SZ	000004	国华网安	深圳	互联网	主板	19910114
3	000005.SZ	000005	世纪星源	深圳	环境保护	主板	19901210
4	000006.SZ	000006	深振业A	深圳	区域地产	主板	19920427

由上输出可以发现,tushare提供的数据丰富而齐全,可以放心使用。

2.获取单只A股行情数据

获取单只A股的日线行情pro.daily()或周线行情pro.weekly()或月线行情pro.monthly()。
pro.daily()使用方法如下:
输入参数

名称描述
ts_code股票代码(支持多个股票同时提取,逗号分隔)
trade_date交易日期(YYYYMMDD)
start_date开始日期(YYYYMMDD)
end_date结束日期(YYYYMMDD)

输出参数

名称描述
ts_code股票代码
trade_date交易日期
open开盘价
high最高价
low最低价
close收盘价
pre_close昨收价
change涨跌额
pct_chg涨跌幅
vol成交量
amount成交额

以获取深物业A(000011.SZ)的日行情数据为例。

shenwuyeA_daily = pro,daily(ts_code='000011.SZ', start_date='20200101', end_date='20210101')
shenwuyeA_daily.head()

	ts_code	   trade_date	open	high	low	   close pre_close	change	pct_chg	   vol	      amount
0	000011.SZ	20201231	12.14	12.36	11.95	12.17	12.16	0.01	0.0822	65023.01	79013.218
1	000011.SZ	20201230	11.79	12.25	11.52	12.16	11.85	0.31	2.6160	91820.88	109824.091
2	000011.SZ	20201229	11.56	12.24	11.56	11.85	11.48	0.37	3.2230	78616.53	93669.887
3	000011.SZ	20201228	11.82	11.88	11.43	11.48	11.83	-0.35	-2.9586	55898.94	65020.868
4	000011.SZ	20201225	11.78	11.93	11.63	11.83	11.81	0.02	0.1693	45828.84	54148.797

我们可以获取平安银行股票的每日交易信息,开盘价、最高价、最低价、收盘价、涨跌情况以及成交量情况。

同样的,我们获取周线行情和月线行情。

shenwuyeA_weekly = pro.weekly(ts_code='000001.SZ', start_date='20200101', end_date='20210101')
shenwuyeA_weekly.head()

	ts_code	   trade_date	close	open	high	low	  pre_close change	pct_chg	    vol	       amount
0	000011.SZ	20201231	12.17	11.82	12.36	11.43	11.83	0.34	0.0287	29135936.0	3.475281e+08
1	000011.SZ	20201225	11.83	12.39	12.68	11.63	12.39	-0.56	-0.0452	33009861.0	4.017601e+08
2	000011.SZ	20201218	12.39	12.29	12.79	12.17	12.28	0.11	0.0090	29681407.0	3.703677e+08
3	000011.SZ	20201211	12.28	13.58	13.60	12.06	13.58	-1.30	-0.0957	30135472.0	3.882492e+08
4	000011.SZ	20201204	13.58	13.46	14.45	13.23	13.49	0.09	0.0067	47775410.0	6.541158e+08
shenwuyeA_monthly = pro.monthly(ts_code='000001.SZ', start_date=20200101', end_date='20210101')
shenwuyeA_monthly.head()

	ts_code	   trade_date	close	open	high	low	  pre_close	change	pct_chg	    vol	          amount
0	000011.SZ	20201231	12.17	13.76	14.04	11.43	13.82	-1.65	-0.1194	156418014.0	1.975291e+09
1	000011.SZ	20201130	13.82	14.08	15.37	13.25	13.99	-0.17	-0.0122	163400353.0	2.318080e+09
2	000011.SZ	20201030	13.99	18.10	19.96	13.85	17.86	-3.87	-0.2167	198585828.0	3.442298e+09
3	000011.SZ	20200930	17.86	20.27	20.34	15.97	20.17	-2.31	-0.1145	371551360.0	6.572802e+09
4	000011.SZ	20200831	20.17	26.60	31.87	20.08	26.05	-5.88	-0.2257	572318794.0	1.562482e+10

3.获取多只A股数据

我们定义获取数据函数:

def obtain_stocks(start_date, end_date, stock_code_list=None):
    if stock_code_list is None:
        stock_code_list = pro.stock_basic(list_status='L').ts_code
    stock_data = {}
    for stock_code in stock_code_list:
        stock_data[stock_code] = pro.daily(ts_code=stock_code, start_date=start_date, end_date=end_date)
    return stock_data

返回所需要的stock数据。

4.将数据储存至本地

def save_stock_data(all_stocks_data):
    for stock_code, stock_data in all_stocks_data.items():
        stock_data.to_csv('your path/'+stock_code+'.csv', header=True, index=False)

其中,your path对应你需要保存的路径文件夹,每个股票数据保存为一个csv。

5.读取本地数据

import os

def read_stock_data(path_name):
    # 注意path_name是文件的保存路径文件夹名
    all_files = os.walk(path_name)  # 读取文件夹中的所有文件
    file_names = []
    for path, _, file_list in all_files:
        for file_name in file_list:
            file_names.append(os.path.join(file_name))

    # 存入字典
    df = {}
    code = [name.split('.')[0] for name in filenames]  # 分离出股票代码
    for i in range(len(file_names)):
        file_name = path_name + file_names[i]
        df[code[i]] = pd.read_csv(file_name)
    return df, code
# 返回股票数据以及代码

总结

Tushare是一个性能优异的大数据社区,同时高校学生和老师以及机构研究者均可获得免费积分进行数据的获取。

笔者后续会对数据进行分析与理解,待续…

  • 11
    点赞
  • 78
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值