Tushare数据在python中的获取和应用

关于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)
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小老虎会发光X

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值