Tushare是一个免费、开源的python财经数据接口包。主要实现对股票等金融数据从数据采集、清洗加工 到 数据存储的过程,能够为金融分析人员提供快速、整洁、和多样的便于分析的数据,为他们在数据获取方面极大地减轻工作量,使他们更加专注于策略和模型的研究与实现上。考虑到Python pandas包在金融量化分析中体现出的优势,Tushare返回的绝大部分的数据格式都是pandas DataFrame类型,非常便于用pandas/NumPy/Matplotlib进行数据分析和可视化。
首先,需要注册一个tushare账号,到这里注册:https://tushare.pro/register?reg=350968
注册完之后,在python中要进行tushare的安装,pip install tushare
#############2021-01-17注释#########
本文中使用了一些函数的调用,导致没有跑起来,这些函数见我2021-02-17的新文章,下载日线数据前的准备工作
###################################
如果安装网络超时可尝试国内pip源,如pip install tushare -i https://pypi.tuna.tsinghua.edu.cn/simple
安装好了之后,就可以进行调用了。
我在这里是首先对tushare进行了一层封装:
#网站方文初始化
def ts_init():
pro = ts.pro_api(userid) #这里的userid是每个人注册后tushare提供的唯一程序调用认证码,具体怎么获取看网站帮助。
return pro
#获取股票列表
#从tushare获取股票代码列表
def getGpList(pro):
gpListfields = "ts_code,symbol,name,area,industry"
gpList = pro.query("stock_basic", exchange='', list='L', fields=gpListfields)
return gpList
#调用股票日线行情封装
#获取指定代码的股票信息
def queryGpinfo(pro, infotp ,gpCode, stDate, endDate):
df_query = pd.DataFrame()
try:
df_query = pro.query(infotp, ts_code=gpCode, start_date=stDate, end_date=endDate)
except:
time.sleep(1)
return df_query
#进行了日线数据获取的封装之后,就可以进行遍历进行股票日线行情下载了。
#由于每次下载要等1秒,4000多只股票,全部下载回来得1个多小时,所以我们进行了聚合,每100支股票进行一次下载,这样大概40多秒下载完毕,具体实现如下:
#根据股票代码列表,获取指定日期段的股票历史日线数据,如果股票代码为空,则获取全部股票的指定日期段的股票信息,如指定日期为空,则获取股票的所有日线
def getGpHisData(GpCode = '', stDate = '19901219', endDate = dt.datetime.today().strftime('%Y%m%d')):
#print(endDate)
#初始化
pro = ts_init()
gpList = pd.DataFrame
#获取股票列表
if GpCode == '':
gpList = getGpList(pro)
else:
gpList = pd.DataFrame(GpCode.split(','), columns=['ts_code'])
#print(gpList)
#股票数据存放路径
filepath_pre = "D:\\MFfiles\\LHTrade\\stockdata"
filepath_prefix = filepath_pre + "\\day"
if not os.path.exists(filepath_prefix):#如果day文件夹不存在,则需要新建,防止后面路径不存在
os.mkdir(filepath_prefix)
file_cfg = filepath_pre + "\\cfg.txt"
#进行时间的比较处理,取正确时间段额数据,不在时间段的不处理
dt_tmp = dt.datetime
if stDate == '00000000':#如果是8个0,则自动使用cfg文件中的上次记录的时间
with open(file_cfg, 'r') as f:
cfg_dt = f.readline()
dt_tmp = parse_ymd(cfg_dt)
if dt_tmp.hour > 15:
dt_stDate = dt.datetime(dt_tmp.year,dt_tmp.