【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())

效果如图:
在这里插入图片描述

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

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
openhighcloselowvolumeprice_changep_changema5ma10ma20v_ma5v_ma10v_ma20
date
2020-10-093262.613280.513272.083260.191883256.5054.031.683230.2883258.3663271.3351627970.401876678.252165331.44
2020-09-303232.713244.913218.053202.341535044.62-6.31-0.203220.5083258.2023276.9801664791.121891284.572198841.76
2020-09-293231.863242.793224.363219.791513498.756.830.213232.8403264.7893286.3171696138.321938223.472252862.69
2020-09-283224.983238.183217.533210.891559827.88-1.89-0.063242.8283271.9213295.6301821468.721984558.002300687.37
2020-09-253234.373239.473219.423208.031648224.25-3.76-0.123262.7103278.0493304.5371942509.352042499.342384432.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_codetrade_dateopenhighlowclosepre_closechangepct_chgvolamount
0000002.SZ2020100928.0528.2927.7428.0328.020.010.0357684345.851913388.242
# pro.daily 如不限定start_date 和 end_date,则可以调出2020年数据。
df5 = pro.daily(ts_code='000001.SZ')
df5
ts_codetrade_dateopenhighlowclosepre_closechangepct_chgvolamount
0000001.SZ2020100915.3015.5515.1315.1815.170.010.0659900425.931.376996e+06
1000001.SZ2020093014.8015.2714.8015.1714.800.372.50001217064.821.838548e+06
2000001.SZ2020092915.3915.4114.7614.8015.31-0.51-3.33121182374.401.766849e+06
3000001.SZ2020092815.1915.3714.9815.3115.190.120.7900612711.119.328008e+05
4000001.SZ2020092515.2015.3115.1115.1915.120.070.4630614087.009.330350e+05
....................................
4995000001.SZ1999062826.4828.2026.3028.1825.862.328.9700712004.001.959131e+06
4996000001.SZ1999062527.0028.1424.9525.8625.580.281.09001064996.002.915463e+06
4997000001.SZ1999062423.5025.5823.3525.5823.252.3310.0200642189.001.584705e+06
4998000001.SZ1999062322.0023.8021.8123.2521.871.386.3100462531.001.057347e+06
4999000001.SZ1999062222.3722.4821.5021.8722.30-0.43-1.9300232048.005.093748e+05

5000 rows × 11 columns

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值