【python】财经数据获取_tushare简略版V1.0(备查)

财经数据获取_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())

效果如图:
【python】财经数据获取_tushare简略版V1.0(备查)_第1张图片

二、全部代码(分步运行)

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

你可能感兴趣的:(Python量化投资,python,财经,tushare)