Tushare:Python中的财经数据接口包

Tushare:Python中的财经数据接口包

tushare包是一个免费的、开源的Python财经数据接口包。刚发现它就被它惊艳了,感觉它几乎搜罗了中国所有的财经数据接口。最重要的是,它是中国人写的,有着非常合中国人口味的中文帮助文档。所以得赶紧学习一下!

安装

Python
1
2
3
4
5
6
7
8
9
pip install tushare
# 安装依赖
pip install pandas
pip install lxml
# 升级
pip install tushare --upgrade
# 查看当前版本的方法
import tushare
print(tushare.__version__)

数据存储

csv文件

pandas的DataFrame和Series对象提供了直接保存csv文件格式的方法,通过相关参数设定可以轻松的将数据内容保存为csv文件。
常用参数:

参数 描述
path_or_buf csv文件存放路径或者StringIO对象
sep 文件分隔符,默认为逗号
na.rep 缺失值替换,默认为空字符
float_format float类型的格式
columns 需要保存的列,默认为None
header 是否保存列名,默认为True
mode 是否保存index,默认为True
encoding 编码格式
date_formate 日期格式

示例:

Python
1
2
3
4
from tushare import *
df = get_hist_data('000001')
df.to_csv('000001.csv')
df.to_csv('000001_1.csv', columns = ['open', 'high', 'low', 'close'])

有时候需要将一类数据保存在一个大文件中,这个时候就需要将数据追加在同一个文件里面:

Python
1
2
3
4
5
6
7
8
9
import tushare as ts
import os
filename = "stock.csv"
for code in ['000001', '600848', '000981']:
df = ts.get_hist_data(code)
if os.path.exists(filename):
df.to_csv(filename, mode = 'a', header=True)
else:
df.to_csv(filename)

实际上如果不需要考虑header,直接df.to_csv(filename, mode = 'a', header=True)即可,不过每次都会把表头append进去。

Excel文件

需要安装openpyxl包。
常用参数说明:

参数 描述
excel_writer 文件路径or Excel Writer对象
sheet_name sheet的名称,默认为sheet1
sep 文件内容的分隔符,默认为逗号
na_rep NAN的处理
float_format float类型数据的格式
columns 需要保存的列,默认为None
header 是否保存表头
index 是否保存行号
mode 创建新的文件还是追加现有文件
encoding 编码格式
startrow 在数据的头部留出startrow行空行
startcol 在数据的左边留出startcol列的空列

示例:

Python
1
2
3
4
import tushare as ts
df = ts.get_hist_data('000001')
df.to_excel('000001_2.xlsx')
df.to_excel('000001_3.xlsx', startrow=2, startcol=5)

空行就是这个意思:
空行

HDF5文件

Hierarchical Data Format(HDF)是一种针对大量数据进行组织和存储的文件格式。经历了20多年的发展,HDF格式的最新版本是HDF5,它包含了数据模型,库,和文件格式标准。以其便捷有效,移植性强,灵活可扩展的特点受到了广泛的关注和应用。
需要安装pytables包。
常用参数说明:

参数 描述
path_or_buf 文件路径或者HDFStore的对象
key HDF5中的group标识
mode a(追加,默认)/w(写入)/r(只读)/r+(等同于a,但是文件必须存在)
format fixed(f)/table(t),默认为fixed,f适合快速读写,不能追加数据;t适合从文件中查找和选择数据
append 适用于table(t)模式追加数据,默认Flase
complevel 压缩级别,1-9,默认为0
complib 压缩类型(zip/bzip2/lzo/lzo/blosc/None),默认为None

示例

Python
1
2
3
4
5
6
7
8
# HDF5文件
import tushare as ts
df.to_hdf('000001.h5', 'key')
# 方法二(没成功):
import
store = HDFStore('store.h5')
store['000001'] = df
store.close()

JSON文件

常用参数说明:

参数 描述
path_or_buf json文件存放路径
orient json格式顺序,包括columns, records, index, split, values, 默认为columns
force_ascii 将字符转为ASCII,默认为True

示例:

Python
1
2
3
4
# JSON文件
df.to_json('000001.json', orient = 'records')
# 或者直接使用
df.to_json(orient='records')

MySQL数据库

常用参数说明:

参数 描述
name 表名,pandas会自动创建表结构
con 数据库链接,最好是用sqlalchemy创建engine的方式来代替con
flavor 数据库的类型,(sqlite/mysql),默认为mysql,如果是engine此项可以忽略
schema 指定数据库的schema,默认即可
if_exists 如果表名已存在的处理方式(fail/replace/append),默认为’fail’
index 将pandas的index作为一列存入数据库
index_label index的列名
chunksize 分批存入数据库,默认为None即一次性全部写入数据库
dtype 设定columns在数据库里的数据类型,默认为None

示例:

Python
1
2
3
4
5
6
7
8
9
10
from sqlalchemy import create_engine
import tushare as ts
import pymysql
df = ts.get_hist_data('000001')
df['date'] = df.index.str.split(' ').str[0]
engine = create_engine('mysql+pymysql://密码@localhost:3306/MyDataBase?charset=utf8', echo=True)
# create_engine("数据库类型+数据库驱动://数据库用户名:数据库密码@IP地址:端口/数据库",其他参数)
# 其中echo=True是开启调试,这样当我们执行文件的时候会提示相应的文字。
df.to_sql('平安股票交易数据', engine, if_exists='replace',
schema='财经数据', index = False)


代码里面我是现将index变成数据框的一列,然后再使用无index导出的,因为日期格式的index直接导出总是出错。

再把数据从MySQL读回来

Python
1
2
3
4
import pandas as pd
df2 = pd.read_sql_table('平安股票交易数据',
con=engine,
schema='财经数据')

花了一天的时间看完了这个包的文档,感觉还不错,但还是感觉不够满意。直接使用中文变量名或许效果更好一些,获取数据后自动输出数据来源更有利于将数据应用于研究。果然最适合自己的爬虫程序还是得自己写。此外,有几个函数已经不能使用了,特别是拆借利率那部分的函数全部挂掉了。
这里我是直接把获取到的数据框都存入了我的数据框。

宏观经济数据

存款利率

Python
1
2
3
4
5
6
7
8
9
import tushare as ts
from sqlalchemy import create_engine
import pymysql
engine = create_engine('mysql+pymysql://root:密码@localhost:3306/MyDataBase?charset=UTF8MB4')

# 存款利率数据
df = ts.get_deposit_rate()
df.to_sql('存款利率', engine, if_exists = 'replace',
schema = '宏观经济数据', index = False)

返回值说明:

列名 含义
date 变动日期
deposit_type 存款种类
rate 利率(%)

货币供应量

Python
1
2
3
# 货币供应量
ts.get_money_supply().to_sql('货币供应量', engine, if_exists='replace',
schema='宏观经济数据', index= False)

返回值说明:

列名 含义
month 统计时间
m2 货币和准货币(广义货币M2)(亿元)
m2_yoy 货币和准货币(广义货币M2)同比增长(%)
m1 货币(狭义货币M1)(亿元)
m1_yoy 货币(狭义货币M1)同比增长(%)
m0 流通中现金(M0)(亿元)
m0_yoy 流通中现金(M0)同比增长(%)
cd 活期存款(亿元)
cd_yoy 活期存款同比增长(%)
qm 准货币(亿元)
qm_yoy 准货币同比增长(%)
ftd 定期存款(亿元)
ftd_yoy 定期存款同比增长(%)
sd 储蓄存款(亿元)
sd_yoy 储蓄存款同比增长(%)
rests 其他存款(亿元)
rests_yoy 其他存款同比增长(%)

贷款利率

Python
1
2
3
4
ts.get_loan_rate().to_sql('贷款利率', engine,
if_exists='replace',
schema='宏观经济数据',
index=False)

返回值说明:

列名 含义
date 执行日期
loan_type 存款种类
rate 利率(%)

存款准备金率

Python
1
2
3
4
ts.get_rrr().to_sql('存款准备金率', engine,
if_exists='replace',
schema='宏观经济数据',
index=False)

返回值说明:

列名 含义
date 变动日期
before 调整前存款准备金率(%)
now 调整后存款准备金率(%)
changed 调整幅度(%)

年度GDP

Python
1
2
3
4
ts.get_gdp_year().to_sql('年度GDP', engine,
if_exists='replace',
schema='宏观经济数据',
index=False)

返回值说明:

列名 含义
year 统计年度
gdp 国内生产总值(亿元)
pc_gdp 人均国内生产总值(元)
gnp 国民生产总值(亿元)
pi 第一产业(亿元)
si 第二产业(亿元)
industry 工业(亿元)
cons_industry 建筑业(亿元)
ti 第三产业(亿元)
trans_industry 交通运输仓储邮电通信业(亿元)
lbdy 批发零售贸易及餐饮业(亿元)

季度GDP

Python
1
2
3
4
ts.get_gdp_quarter().to_sql('季度GDP', engine,
if_exists='replace',
schema='宏观经济数据',
index=False)

返回值说明:

列名 含义
quarter 季度
gdp 国内生产总值(亿元)
gdp_yoy 国内生产总值同比增长(%)
pi 第一产业增加值(亿元)
pi_yoy 第一产业增加值同比增长(%)
si 第二产业增加值(亿元)
si_yoy 第二产业增加值同比增长(%)
ti 第三产业增加值(亿元)
ti_yoy 第三产业增加值同比增长(%)

货币供应量(年底余额)

Python
1
2
3
4
ts.get_money_supply_bal().to_sql('货币供应量(年底余额)', engine,
if_exists='replace',
schema='宏观经济数据',
index=False)

返回值说明:

列名 含义
year 统计年度
m2 货币和准货币(亿元)
m1 货币(亿元)
m0 流通中现金(亿元)
cd 活期存款(亿元)
qm 准货币(亿元)
ftd 定期存款(亿元)
sd 储蓄存款(亿元)
rests 其他存款(亿元)

三大需求对GDP贡献

Python
1
2
3
4
ts.get_gdp_for().to_sql('三大需求对GDP贡献', engine,
if_exists='replace',
schema='宏观经济数据',
index=False)

返回值说明:

列名 含义
year 统计年度
end_for 最终消费支出贡献率(%)
for_rate 最终消费支出拉动(百分点)
asset_for 资本形成总额贡献率(%)
asset_rate 资本形成总额拉动(百分点)
goods_for 货物和服务净出口贡献率(%)
goods_rate 货物和服务净出口拉动(百分点)

三大产业贡献率

Python
1
2
3
4
ts.get_gdp_contrib().to_sql('三大产业贡献给率', engine,
if_exists='replace',
schema='宏观经济数据',
index=False)

返回值说明:

列名 含义
year 统计年度
gdp_yoy 国内生产总值
pi 第一产业献率(%)
si 第二产业献率(%)
industry 其中工业献率(%)
ti 第三产业献率(%)

三大产业对GDP拉动

Python
1
2
3
4
ts.get_gdp_pull().to_sql('三大产业对GDP拉动', engine,
if_exists='replace',
schema='宏观经济数据',
index=False)

返回值说明:

列名 含义
year 统计年度
gdp_yoy 国内生产总值同比增长(%)
pi 第一产业拉动率(%)
si 第二产业拉动率(%)
industry 其中工业拉动(%)
ti 第三产业拉动率(%)

工业品出厂价格指数

Python
1
2
3
4
ts.get_ppi().to_sql('工业品出厂价格指数', engine,
schema='宏观经济数据',
index=False,
if_exists='replace')

返回值说明:

列名 含义
month 统计月份
ppiip 工业品出厂价格指数
ppi 生产资料价格指数
qm 采掘工业价格指数
rmi 原材料工业价格指数
pi 加工工业价格指数
cg 生活资料价格指数
food 食品类价格指数
clothing 衣着类价格指数
roeu 一般日用品价格指数
dcg 耐用消费品价格指数

月度CPI

Python
1
2
3
4
ts.get_cpi().to_sql('月度CPI', engine,
schema='宏观经济数据',
index=False,
if_exists='replace')

返回值说明:

列名 含义
month 统计月份
cpi 价格指数

交易数据

历史行情

get_hist_data()函数只能获得近三年的日数据,适合搭配均线进行选股和分析

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
df = ts.get_hist_data('600848')
df['date'] = df.index.str.split(' ').str[0]
df.to_sql('600848日K', engine,
schema='交易数据',
index=False,
if_exists='replace')
# 获取周K线:
df = ts.get_hist_data('600848', ktype='W')
df['date'] = df.index.str.split(' ').str[0]
df.to_sql('600848周K', engine,
schema='交易数据',
index=False,
if_exists='replace')
# 获取月K线
df = ts.get_hist_data('600848', ktype='M')
df['date'] = df.index.str.split(' ').str[0]
df.to_sql('600848月K', engine,
schema='交易数据',
index=False,
if_exists='replace')
# 获取5分钟K线
df = ts.get_hist_data('600848', ktype='5')
df['date'] = df.index.str.split(' ').str[0]
df.to_sql('600848-5K', engine,
schema='交易数据',
index=False,
if_exists='replace')
# 获取15分钟K线
df = ts.get_hist_data('600848', ktype='15')
df['date'] = df.index.str.split(' ').str[0]
df.to_sql('600848-15K', engine,
schema='交易数据',
index=False,
if_exists='replace')
# 获取30分钟K线
df = ts.get_hist_data('600848', ktype='30')
df['date'] = df.index.str.split(' ').str[0]
df.to_sql('600848-30K', engine,
schema='交易数据',
index=False,
if_exists='replace')
# 获取60分钟K线
df = ts.get_hist_data('600848', ktype='60')
df['date'] = df.index.str.split(' ').str[0]
df.to_sql('600848-60K', engine,
schema='交易数据',
index=False,
if_exists='replace')
# 上证指数
df = ts.get_hist_data('sh')
df['date'] = df.index.str.split(' ').str[0]
df.to_sql('上证指数', engine,
schema='指数数据',
index=False,
if_exists='replace')
# 深圳成指
df = ts.get_hist_data('sz')
df['date'] = df.index.str.split(' ').str[0]
df.to_sql('深圳成指', engine,
schema='指数数据',
index=False,
if_exists='replace')
# 沪深300
df = ts.get_hist_data('hs300')
df['date'] = df.index.str.split(' ').str[0]
df.to_sql('沪深300', engine,
schema='指数数据',
index=False,
if_exists='replace')
# 上证50
df = ts.get_hist_data('sz50')
df['date'] = df.index.str.split(' ').str[0]
df.to_sql('上证50', engine,
schema='指数数据',
index=False,
if_exists='replace')
# 中小板指数
df = ts.get_hist_data('zxb')
df['date'] = df.index.str.split(' ').str[0]
df.to_sql('中小板指数', engine,
schema='指数数据',
index=False,
if_exists='replace')
# 创业板指数
df = ts.get_hist_data('cyb')
df['date'] = df.index.str.split(' ').str[0]
df.to_sql('创业板指数', engine,
schema='指数数据',
index=False,
if_exists='replace')

参数说明:

参数 含义
code 股票代码,即6位数字代码,或者指数代码(sh=上证指数 sz=深圳成指 hs300=沪深300指数 sz50=上证50 zxb=中小板 cyb=创业板)
start 开始日期,格式YYYY-MM-DD
end 结束日期,格式YYYY-MM-DD
ktype 数据类型,D=日k线 W=周 M=月 5=5分钟 15=15分钟 30=30分钟 60=60分钟,默认为D
retry_count 当网络异常后重试次数,默认为3
pause 重试时停顿秒数,默认为0

返回值说明:

列名 含义
date 日期
open 开盘价
high 最高价
close 收盘价
low 最低价
volume 成交量
price_change 价格变动
p_change 涨跌幅
ma5 5日均价
ma10 10日均价
ma20 20日均价
v_ma5 5日均量
v_ma10 10日均量
v_ma20 20日均量
turnover 换手率[注:指数无此项]

获取数据行情的新函数——get_k_data()

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
# 1)获取浦发银行近一年半的前复权日线行情:
ts.get_k_data('600000').to_sql('浦发银行前复权日线行情', engine,
schema='交易数据',
index=False,
if_exists='replace')

# 2)获取浦发银行近6年后复权周线行情:
ts.get_k_data('600000', ktype='W', autype='hfq').\
to_sql('浦发银行后复权周线行情', engine,
schema='交易数据',
index=False,
if_exists='replace')

# 3)获取浦发银行近期5分钟行情:
ts.get_k_data('600000', ktype='5').\
to_sql('浦发银行5分钟行情', engine,
schema='交易数据',
index=False,
if_exists='replace')

# 4)获取沪深300指数10月份日线行情:
ts.get_k_data('399300', index=True,start='2017-10-01', end='2017-10-31').\
to_sql('沪深300指数10月份日线行情', engine,
schema='交易数据',
index=False,
if_exists='replace')

# 5)获取鹏华银行分级B的60分钟行情:
ts.get_k_data('150228', ktype='60').\
to_sql('鹏华银行分级B的60分钟行情', engine,
schema='交易数据',
index=False,
if_exists='replace')

主要参数说明

  1. code
    证券代码:
    支持沪深A、B股
    支持全部指数
    支持ETF基金

  2. ktype
    数据类型:
    默认为D日线数据
    D=日k线 W=周 M=月
    5=5分钟 15=15分钟
    30=30分钟 60=60分钟

  3. autype
    复权类型:
    qfq-前复权 hfq-后复权 None-不复权,默认为qfq

  4. index
    是否为指数:
    默认为False
    设定为True时认为code为指数代码

  5. start
    开始日期
    format:YYYY-MM-DD 为空时取当前日期

  6. end
    结束日期 :
    format:YYYY-MM-DD

复权数据

分为前复权和后复权数据,该接口提供股票上市以来的所有历史数据,默认为前复权。如果不设定起止日期则返回近一年的复权数据。

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
# 获取个股的首个上市日期:
df = ts.get_stock_basics()
df.to_sql('个股信息', engine,
schema='交易数据',
index=False,
if_exists='replace')
df.ix['600848']['timeToMarket']
# 前复权数据
df = ts.get_h_data('002337')
df['date'] = df.index
df.to_sql('002337前复权数据', engine,
schema='交易数据',
index=False,
if_exists='replace')

# 后复权数据
df = ts.get_h_data('002337', autype='hfq')
df['date'] = df.index
df.to_sql('002337后复权数据', engine,
schema='交易数据',
index=False,
if_exists='replace')

# 这个接口还提供大盘指数的全部历史数据,调用时需设定index参数为true
# 深圳综合指数
df = ts.get_h_data('399106', index=True)
df['date'] = df.index
df.to_sql('深圳综指', engine,
schema='指数数据',
index=False,
if_exists='replace')

参数说明:

参数 含义
code string,股票代码 e.g. 600848
start: string,开始日期 format:YYYY-MM-DD 为空时取当前日期
end: string,结束日期 format:YYYY-MM-DD 为空时取去年今日
autype: string,复权类型,qfq-前复权 hfq-后复权 None-不复权,默认为qfq
index: Boolean,是否是大盘指数,默认为False
retry_count int, 默认3,如遇网络等问题重复执行的次数
pause int, 默认 0,重复请求数据过程中暂停的秒数,防止请求间隔时间太短出现的问题

返回值说明:

列名 含义
date 交易日期 (index)
open 开盘价
high 最高价
close 收盘价
low 最低价
volume 成交量
amount 成交金额

实时行情

一次性获取当前交易所有股票的行情数据,如果为节假日即为上一交易日的数据。

Python
1
2
3
4
ts.get_today_all().to_sql('全部个股当日数据', engine,
schema='交易数据',
index=False,
if_exists='replace')

返回值说明:

列名 含义
code 代码
name 名称
changepercent 涨跌幅
trade 现价
open 开盘价
high 最高价
low 最低价
settlement 昨日收盘价
volume 成交量
turnoverratio 换手率
amount 成交量
per 市盈率
pb 市净率
mktcap 总市值
nmc 流通市值

分笔数据

历史分笔

Python
1
2
3
4
5
ts.get_tick_data('600848', date = '2014-01-09')\
.to_sql('600848分笔数据', engine,
schema='交易数据',
index=False,
if_exists='replace')

参数说明:

参数 含义
code 股票代码,即6位数字代码
date 日期,格式YYYY-MM-DD
retry_count int, 默认3,如遇网络等问题重复执行的次数
pause int, 默认 0,重复请求数据过程中暂停的秒数,防止请求间隔时间太短出现的问题

实时分笔

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
df = ts.get_realtime_quotes('000581')
df[['code', 'name', 'price', 'bid', 'ask', 'volume', 'amount']]

# 请求多个股票的实时分笔数据(一次最好不超过10个)
df = ts.get_realtime_quotes(['600848', '000980', '000981'])

# 获取实时指数
df = ts.get_realtime_quotes('sh')
df = ts.get_realtime_quotes(['sh', 'sz', 'hs300', 'sz50',
'zxb', 'cyb', '399001', '399002',
'399003', '399004', '399008',
'399100', '399101', '399106',
'399107', '399108', '399333',
'399606'])
df.to_sql('实时主要大盘指数', engine,
schema='指数数据',
index=False,
if_exists='replace')

参数说明:

参数 含义
symbols 6位数字股票代码,或者指数代码(sh=上证指数 sz=深圳成指 hs300=沪深300指数 sz50=上证50 zxb=中小板 cyb=创业板) 可输入的类型:str、list、set或者pandas的Series对象

当日分笔数据

参数说明:

参数 含义
code 股票代码,即6位数字代码
retry_count int, 默认3,如遇网络等问题重复执行的次数
pause int, 默认 0,重复请求数据过程中暂停的秒数,防止请求间隔时间太短出现的问题
Python
1
2
3
4
ts.get_today_ticks('601333').to_sql('601333当日分笔数据', engine,
schema='交易数据',
index=False,
if_exists='replace')

大盘指数行情列表

Python
1
2
3
4
ts.get_index().to_sql('大盘指数行情列表', engine,
schema='指数数据',
index=False,
if_exists='replace')

返回值说明:

列名 含义
code 指数代码
name 指数名称
change 涨跌幅
open 开盘点位
preclose 昨日收盘点位
close 收盘点位
high 最高点位
low 最低点位
volume 成交量(手)
amount 成交金额(亿元)

大单交易数据

获取大单交易数据,默认为大于等于400手,数据来源于新浪财经。

Python
1
2
3
4
5
ts.get_sina_dd('000001', date = '2018-06-28')\
.to_sql('000001大单交易数据', engine,
schema='交易数据',
index=False,
if_exists='replace')

参数说明:

参数 含义
code 股票代码,即6位数字代码
date 日期,格式YYYY-MM-DD
vol 手数,默认为400手,输入数值型参数
retry_count int, 默认3,如遇网络等问题重复执行的次数
pause int, 默认 0,重复请求数据过程中暂停的秒数,防止请求间隔时间太短出现的问题

返回值说明:

列名 含义
code 代码
name 名称
time 时间
price 当前价格
volume 成交手
preprice 上一笔价格
type 买卖类型【买盘、卖盘、中性盘】

基本面数据

股票列表

Python
1
2
3
4
5
ts.get_stock_basics().\
to_sql('股票列表', engine,
schema='基本面数据',
index=False,
if_exists='replace')

返回值说明:

列名 含义
code 代码
name 名称
industry 所属行业
area 地区
pe 市盈率
outstanding 流通股本(亿)
totals 总股本(亿)
totalAssets 总资产(万)
liquidAssets 流动资产
fixedAssets 固定资产
reserved 公积金
reservedPerShare 每股公积金
esp 每股收益
bvps 每股净资
pb 市净率
timeToMarket 上市日期
undp 未分利润
perundp 每股未分配
rev 收入同比(%)
profit 利润同比(%)
gpr 毛利率(%)
npr 净利润率(%)
holders 股东人数

业绩报告(主表)

Python
1
2
3
4
5
6
# 获取2018年第1季度业绩报表数据
ts.get_report_data(2018, 1).\
to_sql('2018年第1季度业绩报表数据', engine,
schema='基本面数据',
index=False,
if_exists='replace')

返回值说明:

列名 含义
code 代码
name 名称
esp 每股收益
eps_yoy 每股收益同比(%)
bvps 每股净资产
roe 净资产收益率(%)
epcf 每股现金流量(元)
net_profits 净利润(万元)
profits_yoy 净利润同比(%)
distrib 分配方案
report_date 发布日期

盈利能力

Python
1
2
3
4
5
6
# 获取2018年第1季度盈利能力数据
ts.get_profit_data(2018, 1).\
to_sql('2018年第1季度盈利能力数据', engine,
schema='基本面数据',
index=False,
if_exists='replace')

返回值说明:

列名 含义
code 代码
name 名称
roe 净资产收益率(%)
net_profit_ratio 净利率(%)
gross_profit_rate 毛利率(%)
net_profits 净利润(万元)
esp 每股收益
business_income 营业收入(百万元)
bips 每股主营业务收入(元)

营运数据

Python
1
2
3
4
5
6
# 2018年第1季度营运能力数据
ts.get_report_data(2018, 1).\
to_sql('2018年第1季度营运能力数据', engine,
schema='基本面数据',
index=False,
if_exists='replace')

返回值说明:

列名 含义
code 代码
name 名称
arturnover 应收账款周转率(次)
arturndays 应收账款周转天数(天)
inventory_turnover 存货周转率(次)
inventory_days 存货周转天数(天)
currentasset_turnover 流动资产周转率(次)
currentasset_days 流动资产周转天数(天)

成长能力

Python
1
2
3
4
5
6
# 2018年第1季度成长能力数据
ts.get_growth_data(2018, 1).\
to_sql('2018年第1季度成长能力数据', engine,
schema='基本面数据',
index=False,
if_exists='replace')

返回值说明:

列名 含义
code 代码
name 名称
mbrg 主营业务收入增长率(%)
nprg 净利润增长率(%)
nav 净资产增长率
targ 总资产增长率
epsg 每股收益增长率
seg 股东权益增长率

偿债能力

Python
1
2
3
4
5
6
# 2018年第1季度偿债能力数据
ts.get_debtpaying_data(2018, 1).\
to_sql('2018年第1季度偿债能力数据', engine,
schema='基本面数据',
index=False,
if_exists='replace')

返回值说明:

列名 含义
code 代码
name 名称
currentratio 流动比率
quickratio 速动比率
cashratio 现金比率
icratio 利息支付倍数
sheqratio 股东权益比率
adratio 股东权益增长率

现金流量

Python
1
2
3
4
5
6
# 2018年第1季度现金流量数据
ts.get_cashflow_data(2018, 1).\
to_sql('2018年第1季度现金流量数据', engine,
schema='基本面数据',
index=False,
if_exists='replace')

返回值说明:

列名 含义
code 代码
name 名称
cf_sales 经营现金净流量对销售收入比率
rateofreturn 资产的经营现金流量回报率
cf_nm 经营现金净流量与净利润的比率
cf_liabilities 经营现金净流量对负债比率
cashflowratio 现金流量比率

股票分类数据

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
# 行业分类
ts.get_industry_classified().\
to_sql('行业分类', engine,
schema='股票分类数据',
index=False,
if_exists='replace')

# 概念分类
ts.get_concept_classified().\
to_sql('概念分类', engine,
schema='股票分类数据',
index=False,
if_exists='replace')

# 地域分类
ts.get_area_classified().\
to_sql('地域分类', engine,
schema='股票分类数据',
index=False,
if_exists='replace')

# 中小板分类
ts.get_sme_classified().\
to_sql('中小板分类', engine,
schema='股票分类数据',
index=False,
if_exists='replace')

# 创业板分类
ts.get_gem_classified().\
to_sql('创业板分类', engine,
schema='股票分类数据',
index=False,
if_exists='replace')

# 风险警示板分类
ts.get_st_classified().\
to_sql('风险警示板分类', engine,
schema='股票分类数据',
index=False,
if_exists='replace')

# 沪深300成分股及权重
ts.get_hs300s().\
to_sql('沪深300成分股及权重', engine,
schema='股票分类数据',
index=False,
if_exists='replace')

# 上证50成分股
ts.get_sz50s().\
to_sql('上证50成分股', engine,
schema='股票分类数据',
index=False,
if_exists='replace')

# 中证500成分股
ts.get_zz500s().\
to_sql('中证500成分股', engine,
schema='股票分类数据',
index=False,
if_exists='replace')

投资参考数据

分配预案

Python
1
2
3
4
5
6
7
8
9
10
11
12
# 最新公布的1000条
ts.profit_data(top = 1000).\
to_sql('分配预案', engine,
schema='投资参考数据',
index=False,
if_exists='replace')
# 2018年分配预案
ts.profit_data(year = 2018).\
to_sql('2018年分配预案', engine,
schema='投资参考数据',
index=False,
if_exists='replace')

参数说明:

参数 含义
year 预案公布的年份,默认为2014
top 取最新n条数据,默认取最近公布的25条
retry_count 当网络异常后重试次数,默认为3
pause 重试时停顿秒数,默认为0

返回值说明:

列名 含义
code 股票代码
name 股票名称
year 分配年份
report_date 公布日期
divi 分红金额(每10股)
shares 转增和送股数(每10股)

业绩预告

Python
1
2
3
4
5
6
# 2018年第2季度业绩预告
ts.forecast_data(2018, 2).\
to_sql('2018年第2季度业绩预告', engine,
schema='投资参考数据',
index=False,
if_exists='replace')

参数说明:

参数 含义
year int 年度 e.g:2014
quarter int 季度 :1、2、3、4,只能输入这4个季度

结果返回的数据属性说明如下:

列名 含义
code 代码
name 名称
type 业绩变动类型【预增、预亏等】
report_date 发布日期
pre_eps 上年同期每股收益
range 业绩变动范围

限售股解禁

以月的形式返回限售股解禁情况,通过了解解禁股本的大小,判断股票上行的压力。可通过设定年份和月份参数获取不同时段的数据。

Python
1
2
3
4
5
ts.xsg_data().\
to_sql('限售股解禁', engine,
schema='投资参考数据',
index=False,
if_exists='replace')

参数说明:

参数 含义
year 年份,默认为当前年
month 解禁月份,默认为当前月
retry_count 当网络异常后重试次数,默认为3
pause 重试时停顿秒数,默认为0

返回值说明:

列名 含义
code 股票代码
name 股票名称
date 解禁日期
count 解禁数量(万股)
ratio 占总盘比率

基金持股

获取每个季度基金持有上市公司股票的数据。

Python
1
2
3
4
5
6
# 2018年第1季度基金持股数据
ts.fund_holdings(2018, 1).\
to_sql('2018年第1季度基金持股数据', engine,
schema='投资参考数据',
index=False,
if_exists='replace')

参数说明:

参数 含义
year 年份,默认为当前年
quarter 季度(只能输入1,2,3,4这个四个数字)
retry_count 当网络异常后重试次数,默认为3
pause 重试时停顿秒数,默认为0

返回值说明:

列名 含义
code 股票代码
name 股票名称
date 报告日期
nums 基金家数
nlast 与上期相比(增加或减少了)
count 基金持股数(万股)
clast 与上期相比
amount 基金持股市值
ratio 占流通盘比率

新股数据

获取IPO发行和上市的时间列表,包括发行数量、网上发行数量、发行价格已经中签率信息等。

Python
1
2
3
4
5
ts.new_stocks().\
to_sql('新股数据', engine,
schema='投资参考数据',
index=False,
if_exists='replace')

参数说明:

参数 含义
retry_count 当网络异常后重试次数,默认为3
pause 重试时停顿秒数,默认为0

返回值说明:

列名 含义
code 股票代码
name 股票名称
ipo_date 上网发行日期
issue_date 上市日期
amount 发行数量(万股)
markets 上网发行数量(万股)
price 发行价格(元)
pe 发行市盈率
limit 个人申购上限(万股)
funds 募集资金(亿元)
ballot 网上中签率(%)

融资融券数据(深市)

深市的融资融券数据从深圳证券交易所网站直接获取,提供了有记录以来的全部汇总和明细数据。在深交所的网站上,对于融资融券的说明如下:

本报表基于证券公司报送的融资融券余额数据汇总生成,其中:

本日融资余额(元)=前日融资余额+本日融资买入-本日融资偿还额
本日融券余量(股)=前日融券余量+本日融券卖出量-本日融券买入量-本日现券偿还量
本日融券余额(元)=本日融券余量×本日收盘价
本日融资融券余额(元)=本日融资余额+本日融券余额;
2014年9月22日起,“融资融券交易总量”数据包含调出标的证券名单的证券的融资融券余额。

参数说明

参数 含义
start 开始日期 format:YYYY-MM-DD 为空时取去年今日
end 结束日期 format:YYYY-MM-DD 为空时取当前日期
retry_count 当网络异常后重试次数,默认为3
pause 重试时停顿秒数,默认为0

返回值说明

列名 含义
opDate 信用交易日期(index)
rzmre 融资买入额(元)
rzye 融资余额(元)
rqmcl 融券卖出量
rqyl 融券余量
rqye 融券余量(元)
rzrqye 融资融券余额(元)
Python
1
2
3
4
5
ts.sz_margins().\
to_sql('融资融券(深市)', engine,
schema='投资参考数据',
index=False,
if_exists='replace')

融资融券详细数据(深市)

Python
1
2
3
4
5
ts.sz_margin_details().\
to_sql('融资融券详细数据(深市)', engine,
schema='投资参考数据',
index=False,
if_exists='replace')

参数说明

参数 含义
date 日期 format:YYYY-MM-DD 默认为空’‘,数据返回最近交易日明细数据
retry_count 当网络异常后重试次数,默认为3
pause 重试时停顿秒数,默认为0

返回值说明

列名 含义
stockCode 标的证券代码
securityAbbr 标的证券简称
rzmre 融资买入额(元)
rzye 融资余额(元)
rqmcl 融券卖出量
rqyl 融券余量
rqye 融券余量(元)
rzrqye 融资融券余额(元)
opDate 信用交易日期

新闻事件数据

即时100条新闻

Python
1
2
3
4
5
6
# 即时100条新闻
ts.get_latest_news().\
to_sql('即时100条新闻', engine,
schema='新闻事件数据',
index=False,
if_exists='replace')

信息地雷

Python
1
2
3
4
5
ts.get_notices('000001').\
to_sql('000001相关新闻', engine,
schema='新闻事件数据',
index=False,
if_exists='replace')

新浪股吧

Python
1
2
3
4
5
6
7
ts.guba_sina(True).\
to_sql('新浪股吧', engine,
schema='新闻事件数据',
index=False,
if_exists='replace')
# 查看第三条消息的内容
print(ts.guba_sina(True).ix[3]['content'])

龙虎榜

每日龙虎榜列表

Python
1
2
3
4
5
ts.top_list().\
to_sql('每日龙虎榜列表', engine,
schema='龙虎榜',
index=False,
if_exists='replace')

按日期获取历史当日上榜的个股数据,如果一个股票有多个上榜原因,则会出现该股票多条数据。

参数说明:

参数 含义
date 日期,格式YYYY-MM-DD
retry_count 当网络异常后重试次数,默认为3
pause 重试时停顿秒数,默认为0

返回值说明:

列名 含义
code 代码
name 名称
pchange 当日涨跌幅
amount 龙虎榜成交额(万)
buy 买入额(万)
bratio 买入占总成交比例
sell 卖出额(万)
sratio 卖出占总成交比例
reason 上榜原因
date 日期

个股上榜统计

Python
1
2
3
4
5
ts.cap_tops().\
to_sql('个股上榜统计', engine,
schema='龙虎榜',
index=False,
if_exists='replace')

获取近5、10、30、60日个股上榜统计数据,包括上榜次数、累积购买额、累积卖出额、净额、买入席位数和卖出席位数。

参数说明:

参数 含义
days 统计周期5、10、30和60日,默认为5日
retry_count 当网络异常后重试次数,默认为3
pause 重试时停顿秒数,默认为0

返回值说明:

列名 含义
code 代码
name 名称
count 上榜次数
bamount 累积购买额(万)
samount 累积卖出额(万)
net 净额(万)
bcount 买入席位数
scount 卖出席位数

营业部上榜统计

Python
1
2
3
4
5
ts.broker_tops().\
to_sql('个股营业部上榜统计', engine,
schema='龙虎榜',
index=False,
if_exists='replace')

获取营业部近5、10、30、60日上榜次数、累积买卖等情况。

参数说明:

参数 含义
days 统计周期5、10、30和60日,默认为5日
retry_count 当网络异常后重试次数,默认为3
pause 重试时停顿秒数,默认为0

返回值说明:

列名 含义
broker 营业部名称
count 上榜次数
bamount 累积购买额(万)
bcount 买入席位数
samount 累积卖出额(万)
scount 卖出席位数
top3 买入前三股票

机构席位追踪

获取机构近5、10、30、60日累积买卖次数和金额等情况

Python
1
2
3
4
5
ts.inst_tops().\
to_sql('机构席位追踪', engine,
schema='龙虎榜',
index=False,
if_exists='replace')

获取机构近5、10、30、60日累积买卖次数和金额等情况。

参数说明:

参数 含义
days 统计周期5、10、30和60日,默认为5日
retry_count 当网络异常后重试次数,默认为3
pause 重试时停顿秒数,默认为0

返回值说明:

列名 含义
code 代码
name 名称
bamount 累积买入额(万)
bcount 买入次数
samount 累积卖出额(万)
scount 卖出次数
net 净额(万)

机构成交明细

Python
1
2
3
4
5
ts.inst_detail().\
to_sql('机构成交明细', engine,
schema='龙虎榜',
index=False,
if_exists='replace')

获取最近一个交易日机构席位成交明细统计数据

参数说明:

参数 含义
retry_count 当网络异常后重试次数,默认为3
pause 重试时停顿秒数,默认为0

返回值说明:

列名 含义
code 代码
name 名称
date 交易日期
bamount 机构席位买入额(万)
samount 机构席位卖出额(万)
type 类型

电影票房

实时票房

Python
1
2
3
4
5
ts.realtime_boxoffice().\
to_sql('实时票房', engine,
schema='电影票房数据',
index=False,
if_exists='replace')

获取实时电影票房数据,30分钟更新一次票房数据,可随时调用。

返回值说明:

列名 含义
BoxOffice 实时票房(万)
Irank 排名
MovieName 影片名
boxPer 票房占比 (%)
movieDay 上映天数
sumBoxOffice 累计票房(万)
time 数据获取时间

上一日票房

获取单日电影票房数据,默认为上一日的电影票房,可输入参数获取指定日期的票房。

参数说明:

参数 含义
date: 日期(YYYY-MM-DD),默认为上一日

返回值说明:

列名 含义
AvgPrice 平均票价
AvpPeoPle 场均人次
BoxOffice 单日票房(万)
BoxOffice_Up 环比变化 (%)
IRank 排名
MovieDay 上映天数
MovieName 影片名
SumBoxOffice 累计票房(万)
WomIndex 口碑指数
Python
1
2
3
4
5
6
7
8
9
10
11
ts.day_boxoffice().\
to_sql('上一日票房', engine,
schema='电影票房数据',
index=False,
if_exists='replace')
# 2018-06-27票房
ts.day_boxoffice('2018-06-27').\
to_sql('2018-06-27票房', engine,
schema='电影票房数据',
index=False,
if_exists='replace')

月度票房

参数说明:

参数 含义
date 年月(YYYY-MM),默认为上一月

返回值说明:

列名 含义
Irank 排名
MovieName 电影名称
WomIndex 口碑指数
avgboxoffice 平均票价
avgshowcount 场均人次
box_pro 月度占比
boxoffice 单月票房(万)
days 月内天数
releaseTime 上映日期
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
# 上一月票房
ts.month_boxoffice().\
to_sql('上一月票房', engine,
schema='电影票房数据',
index=False,
if_exists='replace')

# 2018-06票房
ts.month_boxoffice('2018-06').\
to_sql('2018-06票房', engine,
schema='电影票房数据',
index=False,
if_exists='replace')

影院日度票房

获取全国影院单日票房排行数据,默认为上一日,可输入日期参数获取指定日期的数据。

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
# 上一日影院日度票房
ts.day_cinema().\
to_sql('上一日影院日度票房', engine,
schema='电影票房数据',
index=False,
if_exists='replace')

# 2018-06-27影院日度票房
ts.day_cinema('2018-06-27').\
to_sql('2018-06-27影院日度票房', engine,
schema='电影票房数据',
index=False,
if_exists='replace')

参数说明:

参数 含义
date 日期(YYYY-MM-DD),默认为上一日

返回值说明:

列名 含义
Attendance 上座率
AvgPeople 场均人次
CinemaName 影院名称
RowNum 排名
TodayAudienceCount 当日观众人数
TodayBox 当日票房
TodayShowCount 当日场次
price 场均票价(元)
# Python

评论

程振兴

程振兴 @czxa.top
截止今天,我已经在本博客上写了604.4k个字了!

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×