利用baostock下在股票历史数据
bs.query_history_k_data_plus(code, fields, start_date, end_date, frequency, adjustflag)
code,股票代码;
fields,表字段date,open,high,low,close,preclose,volume,amount,adjustflag,
turn,tradestatus,pctChg,peTTM,pbMRQ,psTTM,pcfNcfTTM,isST。也可以选取这其中一部分。
start_date,起始日期;
end_date,结束日期;
frequency,该参数为'd'时,表示下载日线数据;
adjustflag,复权类型,=’2‘为前复权
要下载全部A股数据,耗时会相当长,因此,这里可以引入多进程模块multiprocessing,但是,运行多进程的时候,又总有进程会莫名的卡死,导致程序即不报错,也不停止。于是,再引入一个超时模块func_timeout.
from multiprocessing import Pool
from func_timeout import func_set_timeout
定义函数get_history_data()用来获取股票历史数据,用func_timeout盯着它。
import baostock as bs
from func_timeout import func_set_timeout
# 设置50秒超时
@func_set_timeout(50)
def get_history_data(code, start='1990-12-19', end=datetime.date.today().strftime('%Y-%m-%d'),
adjustflag='2', ):
"""
获取股票历史数据
:param code: 股票代码
:param start: 开始日期
:param end: 结束日期
:param adjustflag: 复权类型,默认为 2 ,前复权
:return: 股票历史数据的DataFrame
"""
# 登录baostock
bs.login()
print(f'正在建立{code}的下载链接......')
df = bs.query_history_k_data_plus(code,fields=self.baostock_fields, start_date=start, end_date=end,
frequency='d', adjustflag=adjustflag).get_data()
print(f'{code} is done!')
return d