财经数据获取_tushare简略版V1.0
撰写及编辑于20201011周日 广州图书馆
主要获取列表:
1、当前所有正常上市交易的股票列表 pro.stock_basic
2、指数基础信息列表 pro.index_basic
3、指数每日行情 pro.index_daily
4、沪股通、深股通成分数据 pro.hs_const
5、个股或单个股指每日行情 pro.daily
一、全部代码(整合)
import pandas as pd
import numpy as np
import datetime
import time
import os
import warnings
warnings.filterwarnings('ignore')
# 查看tushare当前版本
import tushare as ts
print("tushare.version :",ts.__version__)
# 设置token,看看例子
tushare_token = '1b4c5a07cb9ce8d3261388ace6c5f02d52a8a39058766503ca30ddb1'
pro = ts.pro_api(tushare_token)
# datetime.timedelta调用的股票数据时间段参数
timeperiod = -3650
# 查看上证指数过去10年(3650天)的数据
df2 = pro.daily(ts_code='000001.SZ',
start_date = (datetime.date.today()+datetime.timedelta(days=timeperiod)).strftime("%Y-%m-%d"),
end_date = datetime.date.today().strftime("%Y-%m-%d"))
print("\n上证指数标准化日期及排序前:\n",df2.head())
# 标准化日期,获取时间的“年、月、日” (亲测自定义函数change_date(s)可行)
def change_date(s):
s = datetime.datetime.strptime(s, "%Y%m%d") # 把日期标准化,转化结果如:20150104 => 2015-01-04 00:00:00
s = str(s) # 上一步把date转化为了时间格式,因此要把date转回str格式
return s[:10] # 只获取年月日,即“位置10”之前的字符串
df2['trade_date'] = df2['trade_date'].map(change_date) # 用change_date函数处理列表中date这一列,如把“20150104”转化为“2015-01-04”
df2.sort_values(by='trade_date',axis=0,ascending=True,inplace=True) # 从后面print(df2.head())验证升序成功
print("\n上证指数标准化日期及排序后:\n",df2.head())
# 下面用tushare新接口 tushare.pro 来获取其他列表数据
# 新建当期财经数据列表合集文件夹,用于储存当期财经数据
total_path = os.path.abspath('.')
print("运行文件根目录 "+total_path)
path = total_path+r'\本期财经数据列表合集'+str(datetime.date.today())
try:
os.mkdir(path)
except:
pass
print("\n已新建本期文件夹 "+path)
# —— —— 查询当前所有正常上市交易的股票列表
alldata1 = pro.stock_basic(exchange='', list_status='L', fields='ts_code,symbol,name,area,industry,list_date')
alldata_path = path +'\当前所有正常上市交易的股票列表'+str(datetime.date.today())+'.xlsx'
alldata1.to_excel(alldata_path, index=False)
print("\n当前所有正常上市交易的股票列表:\n",alldata1.head(10).append(alldata1.tail(10)))
# —— —— 获取指数基础信息
indexbasic1 = pro.index_basic(market='SW')
indexbasic1_path = path +'/指数基础信息列表_SW'+str(datetime.date.today())+'.xlsx'
indexbasic1.to_excel(indexbasic1_path, index=False)
print("\n指数基础信息列表_SW:\n",indexbasic1.head())
indexbasic2 = pro.index_basic()
indexbasic2_path = path +'/指数基础信息列表_默认SSE'+str(datetime.date.today())+'.xlsx'
indexbasic2.to_excel(indexbasic2_path, index=False)
print("\n指数基础信息列表_默认SSE:\n",indexbasic2.head())
# —— —— 获取指数每日行情
# indexdaily = pro.index_daily(ts_code='399300.SZ')
indexdaily_code = '000001.SH'
indexdaily = pro.index_daily(ts_code = indexdaily_code)
indexdaily_path = path +'/指数每日行情'+indexdaily_code+str(datetime.date.today())+'.xlsx'
indexdaily.to_excel(indexdaily_path, index=False)
# #或者按日期取
# df = pro.index_daily(ts_code='399300.SZ', start_date='20180101', end_date='20181010')
print("\n指数每日行情:\n",indexdaily.head())
# —— —— 获取沪股通、深股通成分数据
#获取沪股通成分
shcf = pro.hs_const(hs_type='SH')
shcf_path = path +'/沪股通成分数据'+str(datetime.date.today())+'.xlsx'
shcf.to_excel(shcf_path, index=False)
print("\n沪股通成分数据:\n",shcf.head())
#获取深股通成分
szcf = pro.hs_const(hs_type='SZ')
szcf_path = path +'/深股通成分数据'+str(datetime.date.today())+'.xlsx'
szcf.to_excel(szcf_path, index=False)
print("\n深股通成分数据:\n",szcf.head())
二、全部代码(分步运行)
import pandas as pd
import numpy as np
import datetime
import time
import os
import warnings
warnings.filterwarnings('ignore')
# 查看tushare当前版本
import tushare as ts
print("tushare.version :",ts.__version__)
tushare.version : 1.2.60
# 设置token,看看例子
tushare_token = '1b4c5a07cb9ce8d3261388ace6c5f02d52a8a39058766503ca30ddb1'
pro = ts.pro_api(tushare_token)
# datetime.timedelta调用的股票数据时间段参数
timeperiod = -3650
# 查看上证指数过去10年(3650天)的数据
df2 = pro.daily(ts_code='000001.SZ',
start_date = (datetime.date.today()+datetime.timedelta(days=timeperiod)).strftime("%Y-%m-%d"),
end_date = datetime.date.today().strftime("%Y-%m-%d"))
print("\n上证指数标准化日期及排序前:\n",df2.head())
# 标准化日期,获取时间的“年、月、日” (亲测自定义函数change_date(s)可行)
def change_date(s):
s = datetime.datetime.strptime(s, "%Y%m%d") # 把日期标准化,转化结果如:20150104 => 2015-01-04 00:00:00
s = str(s) # 上一步把date转化为了时间格式,因此要把date转回str格式
return s[:10] # 只获取年月日,即“位置10”之前的字符串
df2['trade_date'] = df2['trade_date'].map(change_date) # 用change_date函数处理列表中date这一列,如把“20150104”转化为“2015-01-04”
df2.sort_values(by='trade_date',axis=0,ascending=True,inplace=True) # 从后面print(df2.head())验证升序成功
print("\n上证指数标准化日期及排序后:\n",df2.head())
上证指数标准化日期及排序前:
ts_code trade_date open high low close pre_close change \
0 000001.SZ 20191231 16.57 16.63 16.31 16.45 16.57 -0.12
1 000001.SZ 20191230 16.46 16.63 16.10 16.57 16.63 -0.06
2 000001.SZ 20191227 16.53 16.93 16.43 16.63 16.47 0.16
3 000001.SZ 20191226 16.34 16.48 16.32 16.47 16.30 0.17
4 000001.SZ 20191225 16.45 16.56 16.24 16.30 16.40 -0.10
pct_chg vol amount
0 -0.7242 704442.25 1154704.348
1 -0.3608 976970.31 1603152.786
2 0.9715 1042574.72 1741473.179
3 1.0429 372033.86 610381.757
4 -0.6098 414917.98 679664.596
上证指数标准化日期及排序后:
ts_code trade_date open high low close pre_close change \
2360 000001.SZ 2010-01-04 24.52 24.58 23.68 23.71 24.37 -0.66
2359 000001.SZ 2010-01-05 23.75 23.90 22.75 23.30 23.71 -0.41
2358 000001.SZ 2010-01-06 23.25 23.25 22.72 22.90 23.30 -0.40
2357 000001.SZ 2010-01-07 22.90 23.05 22.40 22.65 22.90 -0.25
2356 000001.SZ 2010-01-08 22.50 22.75 22.35 22.60 22.65 -0.05
pct_chg vol amount
2360 -2.71 241922.76 5.802495e+05
2359 -1.73 556499.82 1.293477e+06
2358 -1.72 412143.13 9.444537e+05
2357 -1.09 355336.85 8.041663e+05
2356 -0.22 288543.06 6.506674e+05
# 下面用tushare新接口 tushare.pro 来获取其他列表数据
# 新建当期财经数据列表合集文件夹,用于储存当期财经数据
total_path = os.path.abspath('.')
print("运行文件根目录 "+total_path)
path = total_path+r'\本期财经数据列表合集'+str(datetime.date.today())
try:
os.mkdir(path)
except:
pass
print("\n已新建本期文件夹 "+path)
# —— —— 查询当前所有正常上市交易的股票列表
alldata1 = pro.stock_basic(exchange='', list_status='L', fields='ts_code,symbol,name,area,industry,list_date')
alldata_path = path +'\当前所有正常上市交易的股票列表'+str(datetime.date.today())+'.xlsx'
alldata1.to_excel(alldata_path, index=False)
print("\n当前所有正常上市交易的股票列表:\n",alldata1.head(10).append(alldata1.tail(10)))
# —— —— 获取指数基础信息
indexbasic1 = pro.index_basic(market='SW')
indexbasic1_path = path +'/指数基础信息列表_SW'+str(datetime.date.today())+'.xlsx'
indexbasic1.to_excel(indexbasic1_path, index=False)
print("\n指数基础信息列表_SW:\n",indexbasic1.head())
indexbasic2 = pro.index_basic()
indexbasic2_path = path +'/指数基础信息列表_默认SSE'+str(datetime.date.today())+'.xlsx'
indexbasic2.to_excel(indexbasic2_path, index=False)
print("\n指数基础信息列表_默认SSE:\n",indexbasic2.head())
# —— —— 获取指数每日行情
# indexdaily = pro.index_daily(ts_code='399300.SZ')
indexdaily_code = '000001.SH'
indexdaily = pro.index_daily(ts_code = indexdaily_code)
indexdaily_path = path +'/指数每日行情'+indexdaily_code+str(datetime.date.today())+'.xlsx'
indexdaily.to_excel(indexdaily_path, index=False)
# #或者按日期取
# df = pro.index_daily(ts_code='399300.SZ', start_date='20180101', end_date='20181010')
print("\n指数每日行情:\n",indexdaily.head())
# —— —— 获取沪股通、深股通成分数据
#获取沪股通成分
shcf = pro.hs_const(hs_type='SH')
shcf_path = path +'/沪股通成分数据'+str(datetime.date.today())+'.xlsx'
shcf.to_excel(shcf_path, index=False)
print("\n沪股通成分数据:\n",shcf.head())
#获取深股通成分
szcf = pro.hs_const(hs_type='SZ')
szcf_path = path +'/深股通成分数据'+str(datetime.date.today())+'.xlsx'
szcf.to_excel(szcf_path, index=False)
print("\n深股通成分数据:\n",szcf.head())
运行文件根目录 D:\WPS Cloud Files\Python_Efficiency\Python_Quant_Investment
已新建本期文件夹 D:\WPS Cloud Files\Python_Efficiency\Python_Quant_Investment\本期财经数据列表合集2020-10-11
当前所有正常上市交易的股票列表:
ts_code symbol name area industry 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
5 000007.SZ 000007 全新好 深圳 酒店餐饮 19920413
6 000008.SZ 000008 神州高铁 北京 运输设备 19920507
7 000009.SZ 000009 中国宝安 深圳 综合类 19910625
8 000010.SZ 000010 美丽生态 深圳 建筑工程 19951027
9 000011.SZ 000011 深物业A 深圳 区域地产 19920330
4016 688585.SH 688585 上纬新材 上海 化工原料 20200928
4017 688586.SH 688586 江航装备 安徽 航空 20200731
4018 688588.SH 688588 凌志软件 江苏 软件服务 20200511
4019 688589.SH 688589 力合微 深圳 半导体 20200722
4020 688595.SH 688595 芯海科技 深圳 半导体 20200928
4021 688596.SH 688596 正帆科技 上海 专用机械 20200820
4022 688598.SH 688598 金博股份 湖南 矿物制品 20200518
4023 688599.SH 688599 天合光能 江苏 电气设备 20200610
4024 688600.SH 688600 皖仪科技 安徽 电器仪表 20200703
4025 688981.SH 688981 中芯国际-U 上海 半导体 20200716
指数基础信息列表_SW:
ts_code name market publisher category base_date base_point list_date
0 801001.SI 申万50 SW 申万研究 其他 19991230 1000.0 None
1 801002.SI 申万中小板 SW 申万研究 其他 20040705 1000.0 None
2 801003.SI 申万A股 SW 申万研究 其他 19991230 1000.0 None
3 801004.SI 申万股改指数 SW 申万研究 其他 20050815 1000.0 None
4 801005.SI 申万创业板 SW 申万研究 其他 20091105 1000.0 20091106
指数基础信息列表_默认SSE:
ts_code name market publisher category base_date base_point \
0 000001.SH 上证指数 SSE 中证公司 综合指数 19901219 100.00
1 000002.SH 上证A指 SSE 中证公司 综合指数 19901219 100.00
2 000003.SH 上证B指 SSE 中证公司 综合指数 19920221 100.00
3 000004.SH 上证工业类指数 SSE 中证公司 综合指数 19930430 1358.78
4 000005.SH 上证商业类指数 SSE 中证公司 综合指数 19930430 1358.78
list_date
0 19910715
1 19920221
2 19920221
3 19930503
4 19930503
指数每日行情:
ts_code trade_date close open high low \
0 000001.SH 20201009 3272.0762 3262.6105 3280.5124 3260.1873
1 000001.SH 20200930 3218.0521 3232.7104 3244.9134 3202.3435
2 000001.SH 20200929 3224.3593 3231.8551 3242.7937 3219.7902
3 000001.SH 20200928 3217.5346 3224.9769 3238.1825 3210.8925
4 000001.SH 20200925 3219.4179 3234.3739 3239.4662 3208.0349
pre_close change pct_chg vol amount
0 3218.0521 54.0241 1.6788 188325648.0 264171043.8
1 3224.3593 -6.3072 -0.1956 153504457.0 205762857.3
2 3217.5346 6.8247 0.2121 151349870.0 207307813.8
3 3219.4179 -1.8833 -0.0585 155982783.0 209672387.6
4 3223.1764 -3.7585 -0.1166 164822419.0 220674477.0
沪股通成分数据:
ts_code hs_type in_date out_date is_new
0 601628.SH SH 20141117 None 1
1 601099.SH SH 20141117 None 1
2 601808.SH SH 20141117 None 1
3 601107.SH SH 20141117 None 1
4 601880.SH SH 20141117 None 1
深股通成分数据:
ts_code hs_type in_date out_date is_new
0 002910.SZ SZ 20171114 None 1
1 000016.SZ SZ 20180102 None 1
2 001872.SZ SZ 20180102 None 1
3 000040.SZ SZ 20180102 None 1
4 000401.SZ SZ 20180102 None 1
下面是其他尝试,可略。
# 试试tushare旧接口获取上证指数[sh000001]过去150天的数据
data = ts.get_hist_data('sh000001',
start=(datetime.date.today()+datetime.timedelta(days=timeperiod)).strftime("%Y-%m-%d"),
end=datetime.date.today().strftime("%Y-%m-%d"))
data.head()
本接口即将停止更新,请尽快使用Pro版接口:https://tushare.pro/document/2
open | high | close | low | volume | price_change | p_change | ma5 | ma10 | ma20 | v_ma5 | v_ma10 | v_ma20 | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
date | |||||||||||||
2020-10-09 | 3262.61 | 3280.51 | 3272.08 | 3260.19 | 1883256.50 | 54.03 | 1.68 | 3230.288 | 3258.366 | 3271.335 | 1627970.40 | 1876678.25 | 2165331.44 |
2020-09-30 | 3232.71 | 3244.91 | 3218.05 | 3202.34 | 1535044.62 | -6.31 | -0.20 | 3220.508 | 3258.202 | 3276.980 | 1664791.12 | 1891284.57 | 2198841.76 |
2020-09-29 | 3231.86 | 3242.79 | 3224.36 | 3219.79 | 1513498.75 | 6.83 | 0.21 | 3232.840 | 3264.789 | 3286.317 | 1696138.32 | 1938223.47 | 2252862.69 |
2020-09-28 | 3224.98 | 3238.18 | 3217.53 | 3210.89 | 1559827.88 | -1.89 | -0.06 | 3242.828 | 3271.921 | 3295.630 | 1821468.72 | 1984558.00 | 2300687.37 |
2020-09-25 | 3234.37 | 3239.47 | 3219.42 | 3208.03 | 1648224.25 | -3.76 | -0.12 | 3262.710 | 3278.049 | 3304.537 | 1942509.35 | 2042499.34 | 2384432.93 |
# 前面pro.daily使用参数start_date 和 end_date后,数据日期只到20191231,没看到有2020的。现在筛选看看有没有2020的。
print(datetime.date.today())
df3 = pro.daily(ts_code='000002.SZ',
start_date = (datetime.date.today()+datetime.timedelta(days=timeperiod)).strftime("%Y-%m-%d"),
end_date = datetime.date.today().strftime("%Y-%m-%d"))
print("\n上证指数标准化日期及排序前:\n",df3.head())
df3_2020 = df3[df3['trade_date'].map(lambda x : int(x))>20200101]
print("\n筛选上证指数2020数据:\n",df3_2020.head())
# 结果是empty。为何?待咨询tushare工作人员。
date_str = '20201009'
df3_date = df3[df3['trade_date']==date_str]
print("\n筛选上证指数指定日期%s数据:\n"%date_str,df3_date.head())
# 结果仍然为empty。
2020-10-11
上证指数标准化日期及排序前:
ts_code trade_date open high low close pre_close change \
0 000002.SZ 20191231 31.35 32.45 31.32 32.18 31.57 0.61
1 000002.SZ 20191230 31.35 31.79 31.02 31.57 31.00 0.57
2 000002.SZ 20191227 31.23 31.32 30.81 31.00 31.12 -0.12
3 000002.SZ 20191226 30.50 31.30 30.50 31.12 30.29 0.83
4 000002.SZ 20191225 30.40 30.63 30.18 30.29 30.38 -0.09
pct_chg vol amount
0 1.9322 663497.98 2122966.722
1 1.8387 915751.42 2870247.850
2 -0.3856 703096.48 2185106.849
3 2.7402 888790.74 2758745.302
4 -0.2962 685037.32 2082008.206
筛选上证指数2020数据:
Empty DataFrame
Columns: [ts_code, trade_date, open, high, low, close, pre_close, change, pct_chg, vol, amount]
Index: []
筛选上证指数指定日期20201009数据:
Empty DataFrame
Columns: [ts_code, trade_date, open, high, low, close, pre_close, change, pct_chg, vol, amount]
Index: []
# 直接pro.daily调用时使用参数trade_date调用(trade_date='20201009'),能调出数据,说明数据是存在的。
# 那为何前面用start_date 和 end_date调不出2020年的呢?
df4 = pro.daily(ts_code='000002.SZ',trade_date='20201009')
df4
ts_code | trade_date | open | high | low | close | pre_close | change | pct_chg | vol | amount | |
---|---|---|---|---|---|---|---|---|---|---|---|
0 | 000002.SZ | 20201009 | 28.05 | 28.29 | 27.74 | 28.03 | 28.02 | 0.01 | 0.0357 | 684345.85 | 1913388.242 |
# pro.daily 如不限定start_date 和 end_date,则可以调出2020年数据。
df5 = pro.daily(ts_code='000001.SZ')
df5
ts_code | trade_date | open | high | low | close | pre_close | change | pct_chg | vol | amount | |
---|---|---|---|---|---|---|---|---|---|---|---|
0 | 000001.SZ | 20201009 | 15.30 | 15.55 | 15.13 | 15.18 | 15.17 | 0.01 | 0.0659 | 900425.93 | 1.376996e+06 |
1 | 000001.SZ | 20200930 | 14.80 | 15.27 | 14.80 | 15.17 | 14.80 | 0.37 | 2.5000 | 1217064.82 | 1.838548e+06 |
2 | 000001.SZ | 20200929 | 15.39 | 15.41 | 14.76 | 14.80 | 15.31 | -0.51 | -3.3312 | 1182374.40 | 1.766849e+06 |
3 | 000001.SZ | 20200928 | 15.19 | 15.37 | 14.98 | 15.31 | 15.19 | 0.12 | 0.7900 | 612711.11 | 9.328008e+05 |
4 | 000001.SZ | 20200925 | 15.20 | 15.31 | 15.11 | 15.19 | 15.12 | 0.07 | 0.4630 | 614087.00 | 9.330350e+05 |
... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... |
4995 | 000001.SZ | 19990628 | 26.48 | 28.20 | 26.30 | 28.18 | 25.86 | 2.32 | 8.9700 | 712004.00 | 1.959131e+06 |
4996 | 000001.SZ | 19990625 | 27.00 | 28.14 | 24.95 | 25.86 | 25.58 | 0.28 | 1.0900 | 1064996.00 | 2.915463e+06 |
4997 | 000001.SZ | 19990624 | 23.50 | 25.58 | 23.35 | 25.58 | 23.25 | 2.33 | 10.0200 | 642189.00 | 1.584705e+06 |
4998 | 000001.SZ | 19990623 | 22.00 | 23.80 | 21.81 | 23.25 | 21.87 | 1.38 | 6.3100 | 462531.00 | 1.057347e+06 |
4999 | 000001.SZ | 19990622 | 22.37 | 22.48 | 21.50 | 21.87 | 22.30 | -0.43 | -1.9300 | 232048.00 | 5.093748e+05 |
5000 rows × 11 columns