关于tushare的使用,我是在2020年时由导师推荐使用的。我做量化投资需要用到大量金融数据,但是数据也一直困扰着我,我一直找不到好用合适的数据接口,于是导师推荐了这个社区,配合着python用起来很方便。python中也有tushare模块,再加上python的强大数据处理能力,用起来真是如鱼得水。最关键的是它还免费!免费!免费!太适合学生党使用了。
下面是Tushare数据获取的实际应用,这一段是我做股票因子分析用的数据,数据量比较大,直接用Tushare接口获取的话会很慢,还有限制。所以我们可以建立自己的股票池数据库,可以花一两天时间获取数据储存起来,方便之后用。
下面先选取股票池中的股票
#coding=utf-8
#获取从2019年1月1日到2021年9月1日期间中正常股票
#1、删去在这期间有停牌的股票
#2、删去ST股票
#3、删去在这期间上市的新股
#4、删去在这期间退市的股票
#储存在exel文件中
#一共选取318支股票
import pandas as pd
import datetime
import tushare as ts
import os
import math
from openpyxl import *
import xlrd
import xlwt
# 获取股票池
ts.set_token('tushare个人获取数据编码')
pro = ts.pro_api('tushare个人获取数据编码')
data = pro.stock_basic(exchange='', list_status='L', fields='ts_code,symbol,name,area,industry,list_date')
I=[]
for i in range(len(data)):
t=data.list_date[i]
name=data.name[i]
t1=datetime.datetime.strptime(t, "%Y%m%d")
t2=datetime.datetime.strptime('20190101', "%Y%m%d")
if 'ST' in name:
I.append(i)
if t1>t2:
I.append(i)
data=data.drop(I)
print(data)
data.to_excel('C:\\Users\\xiaomi\\Desktop\\python内容\\Tushare数据\\股票池数据.xlsx')
filename='C:\\Users\\xiaomi\\Desktop\\python内容\\Tushare数据\\股票池数据.xlsx'
wb=load_workbook(filename)
ws=wb.active
ws.delete_cols(1)
wb.save(filename)
下面开始获取这些股票的数据
def get_P(code,b_date,e_date):
ts.set_token('f8787d707ba6058aa95dd6ae24a1c81e14162dcaa8a6eefd143d3247')
pro = ts.pro_api('f8787d707ba6058aa95dd6ae24a1c81e14162dcaa8a6eefd143d3247')
data=pro.daily(ts_code=code,start_date=b_date,end_date=e_date)
close=data.close
col=data.vol
date=data.trade_date
Close=[]
Code=[]
T_date=[]
VOL=[]
for i in range(len(close)):
Close.append(close[i])
VOL.append(col[i])
for i in range(len(date)):
Code.append(code)
T_date.append(date[i])
T_date.reverse()
Close.reverse()
VOL.reverse()
d_df1 = pd.DataFrame(Code, columns=['ts_code'])
d_df2 = pd.DataFrame(T_date, columns=['trade_date'])
d_df3 = pd.DataFrame(Close, columns=['close'])
d_df4 = pd.DataFrame(VOL, columns=['vol'])
d_df1=d_df1.join(d_df2)
d_df1=d_df1.join(d_df3)
d_df1=d_df1.join(d_df4)
return d_df1
# 获取股票每日价格和成交量
gupiao_df = pd.read_excel('C:\\Users\\xiaomi\\Desktop\\python内容\\Tushare数据\\股票池数据.xlsx')
ts.set_token('f8787d707ba6058aa95dd6ae24a1c81e14162dcaa8a6eefd143d3247')
pro = ts.pro_api('f8787d707ba6058aa95dd6ae24a1c81e14162dcaa8a6eefd143d3247')
Code=[]
L=[]
for i in range(200):
code=gupiao_df.ts_code[199+i*10]
DF=get_P(code,'20190101','20210901')
l=len(DF)
if l<650:
continue
L.append(l)
Code.append(code)
filename = 'C:\\Users\\xiaomi\\Desktop\\python内容\\Tushare数据\\'+code+'.xlsx'
if os.path.exists(filename):
os.remove(filename)
DF.to_excel(filename)
wb=load_workbook(filename)
ws=wb.active
ws.delete_cols(1)
wb.save(filename)
d_df1 = pd.DataFrame(Code, columns=['code'])
d_df1.to_excel('C:\\Users\\xiaomi\\Desktop\\python内容\\Tushare数据\\选取出的股票1.xlsx')
print(L)
print(len(L))
# 获取市净率倒数
def get_pb_d(code,b_date):
ts.set_token('f8787d707ba6058aa95dd6ae24a1c81e14162dcaa8a6eefd143d3247')
pro = ts.pro_api('f8787d707ba6058aa95dd6ae24a1c81e14162dcaa8a6eefd143d3247')
data = pro.daily_basic(ts_code=code,trade_date=b_date)
d=data.pb
pb_d=[]
if len(d)!=0:
pb_d.append(d[0])
pbd=1/pb_d[0]
else:
pbd=0
return pbd
gucode_df = pd.read_excel('C:\\Users\\xiaomi\\Desktop\\python内容\\Tushare数据\\选取出的股票.xlsx')
Code=[]
begin = datetime.date(2019,1,2)
end=datetime.date(2021,1,1)
Day=[]
for i in range(((end - begin).days)+1):
day=begin + datetime.timedelta(days=i)
Day.append(day.strftime('%Y%m%d'))
D=[]
l1=math.floor(len(Day)/35)
for i in range(l1):
d=Day[i*35]
D.append(d)
for i in range(len(gucode_df)):
Code.append(gucode_df.code[i])
print(len(Code))
DF= pd.DataFrame(Code[210:220],columns=['code'])
filename='C:\\Users\\xiaomi\\Desktop\\python内容\\Tushare数据\\市净率倒数数据21.xlsx'
for i in range(len(D)):
pbd=[]
for j in range(10):
c = Code[210+j]
pb=get_pb_d(c,str(D[i]))
pbd.append(pb)
d_df1 = pd.DataFrame(pbd, columns=[str(D[i])])
DF=DF.join(d_df1)
print(DF)
DF.to_excel(filename)
wb=load_workbook(filename)
ws=wb.active
ws.delete_cols(1)
wb.save(filename)